最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go語言開發(fā)技巧必知的小細節(jié)提升效率

 更新時間:2024年01月11日 11:17:39   作者:Go語言中文網(wǎng)  
這篇文章主要介紹了Go語言開發(fā)技巧必知的小細節(jié)提升效率,分享幾個你可能不知道的Go語言小細節(jié),希望能幫助大家更好地學習這門語言

引言

近年來,Go語言迅速占領了開發(fā)領域的重要地位,成為眾多公司和開發(fā)者的首選語言。

其簡捷、高效、并發(fā)性強的特點使得它在處理大型系統(tǒng)和復雜工程問題時表現(xiàn)出色,為開發(fā)者提供了良好的體驗。

隨著云計算、容器化、微服務、服務網(wǎng)格等技術的興起,Go語言的應用場景愈發(fā)廣泛,這也進一步推動其社區(qū)的繁榮和發(fā)展。

可以預見,Go語言的發(fā)展前景將會更加廣闊。

本文分享幾個你可能不知道的Go語言小細節(jié),希望能幫助大家更好地學習這門語言~~

01 數(shù)字字面量

Go語言中聲明數(shù)字變量時,可以使用數(shù)字字面量讓開發(fā)者以二進制、八進制或十六進制浮點數(shù)的格式定義數(shù)字。例如:

v1 := 0b00101101 // 二進制字面量 

v2 := 0o377      // 八進制字面量 

v3 := 0x1p-2     // 十六進制浮點字面量 

v4 := 01e2       // 十進制浮點字面量

在表達數(shù)字字面量時,可以使用_分隔數(shù)字。例如:

v5 := 123_456  // 可以使用_分隔數(shù)字

02 切片表達式

切片表達式指從字符串、數(shù)組、指向數(shù)組或切片的指針構造子字符串或切片。

它有兩種變體,其中一種是指定low和high兩個索引界限值。

由于切片的底層是數(shù)組,所以我們可以基于數(shù)組通過切片表達式得到切片,切片表達式中的low和high表示索引范圍(左包含,右不包含)。

例如,下面的代碼表示從數(shù)組a中選出1≤索引值<4的元素組成切片s,切片s的長度為high-low,容量為其底層數(shù)組的容量。

// 對數(shù)組取切片
a := [5]int{1, 2, 3, 4, 5}
s := a[1:3] // s := a[low:high]
fmt.Printf("s:%v type:%T len:%v cap:%v\n", s, s, len(s), cap(s))
// 對字符串取切片得到的還是字符串類型
b := "hello world"
s2 := b[1:3] // s2 := b[low:high]
fmt.Printf("s2:%v type:%T len:%v\n", s2, s2, len(s2))

輸出:

s:[2 3] type:[]int len:2 cap:4

s2:el type:string len:2

方便起見,可以省略切片表達式中的任何索引。如果省略low則默認為0,如果省略high則默認為切片操作數(shù)的長度。

a[2:]  // 等同于 a[2:len(a)]

a[:3]  // 等同于 a[0:3]

a[:]   // 等同于 a[0:len(a)]

注意:對于數(shù)組或字符串,如果0 ≤ low ≤ high ≤ len(a),則索引合法;否則會索引越界(out of range)。

對切片再執(zhí)行切片表達式時(切片再切片),high的上限是切片的容量cap(a),而不是長度。

常量索引必須是非負的,并且可以用int類型的值表示。

對于數(shù)組或常量字符串,常量索引必須在有效范圍內(nèi)。

如果low和high兩個指標都是常數(shù),則它們必須滿足low≤high。

如果索引在運行時超出范圍,就會發(fā)生運行時panic。

a := [5]int{1, 2, 3, 4, 5}
s := a[1:3] // s := a[low:high]
fmt.Printf("s:%v len:%v cap:%v\n", s, len(s), cap(s))
s2 := s[3:4] // 索引的上限是cap(s)而不是len(s)
fmt.Printf("s2:%v len:%v cap:%v\n", s2, len(s2), cap(s2))

輸出:

s:[2 3] len:2 cap:4

s2:[5] len:1 cap:1

另一種變體是除了指定low和high索引界限值,還指定容量的完整形式。

注意:字符串不支持完整切片表達式。

a[low:high:max]

上面的代碼會構造與簡單切片表達式a[low:high]的類型、長度和元素相同的切片。

另外,它會將得到的結果切片的容量設置為max-low。

在完整切片表達式中只有第一個索引值(low)可以省略,該值默認為0。

a := [5]int{1, 2, 3, 4, 5}
s1 := a[1:3:4] // 通過額外指定max,控制切片的容量
fmt.Printf("s1:%v len:%v cap:%v\n", s1, len(s1), cap(s1))
s2 := a[1:3]
fmt.Printf("s2:%v len:%v cap:%v\n", s2, len(s2), cap(s2))

輸出結果:

s1:[2 3] len:2 cap:3

s2:[2 3] len:2 cap:4

完整切片表達式需要滿足的條件是0 ≤ low ≤ high ≤ max ≤ cap(a),其他條件和簡單切片表達式相同。

03 go test cache

在包列表模式下,go test會緩存測試成功的包的測試結果,以避免運行不必要的重復測試。

當測試結果可以從緩存中獲取時,go test將直接顯示以前緩存的輸出,而不是再次運行測試二進制文件。

當這種情況發(fā)生時,go test會輸出(cached)來代替摘要行中的運行時間。 

執(zhí)行兩次 go test . -v,從下面的輸出結果可以看到,第二次的輸出結果中有cached標識。

? go test . -v
=== RUN   TestSplit
--- PASS: TestSplit (0.00s)
PASS
ok   split 0.005s
? go test . -v
=== RUN   TestSplit
--- PASS: TestSplit (0.00s)
PASS
ok   split (cached)

如果多次執(zhí)行測試時運行的二進制文件相同,并且命令行上的參數(shù)都是可緩存測試參數(shù)(-bachtime、-cpu、-list、-pallel、-run、-short、-timeout、-failfast和-v),就會匹配到緩存中的結果。

只要測試時添加了除上述可緩存參數(shù)外的任何參數(shù)就不會緩存結果,顯式禁用測試緩存的慣用方法是在命令行使用 -count=1 參數(shù)。

? go test . -v -count=1
=== RUN   TestSplit
--- PASS: TestSplit (0.00s)
PASS
ok   split 0.005s

04 JSON序列化時不轉(zhuǎn)義

json包中的encoder可以通過SetEscapeHTML指定是否應該在JSON字符串中轉(zhuǎn)義有問題的HTML字符。

它默認將&、<和>轉(zhuǎn)義為\u0026、\u003c和\u003e,以避免在HTML中嵌入JSON時出現(xiàn)安全問題。

如果在是非HTML場景下不想被轉(zhuǎn)義,那么可以通過SetEscapeHTML(false)禁用此行為。

例如,在有些業(yè)務場景下可能需要序列化帶查詢參數(shù)的URL,我們并不希望轉(zhuǎn)義&符號。

// URLInfo 一個包含URL字段的結構體
type URLInfo struct {
URL string
// ...
}
func jsonEncodeDontEscapeHTML(data URLInfo) {
// 默認序列化時會轉(zhuǎn)義 &、<和>
b, _ := json.Marshal(data)
fmt.Printf("json.Marshal(data) result:%s\n", b)
// 通過 SetEscapeHTML(false) 設置不轉(zhuǎn)義
buf := bytes.Buffer{}
encoder := json.NewEncoder(&buf)
encoder.SetEscapeHTML(false)
encoder.Encode(data)
fmt.Printf("encoder.Encode(data) result:%s\n", buf.String())
}
func main() {
jsonEncodeDontEscapeHTML(URLInfo{URL:"https://liwenzhou.com?name=q1mi&age=18"})
}

輸出結果如下:

json.Marshal(data) 

result:{"URL":"https://liwenzhou.com?name=q1mi\u0026age=18"}

encoder.Encode(data) 

result:{"URL":"https://liwenzhou.com?name=q1mi&age=18"}

以上就是Go語言開發(fā)技巧必知的小細節(jié)提升效率的詳細內(nèi)容,更多關于Go語言開發(fā)技巧的資料請關注腳本之家其它相關文章!

相關文章

  • Go語言并發(fā)技術詳解

    Go語言并發(fā)技術詳解

    這篇文章主要介紹了Go語言并發(fā)技術詳解,本文講解了goroutine、channels、Buffered Channels、Range和Close等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • 詳解Go語言中的監(jiān)視器模式與配置熱更新

    詳解Go語言中的監(jiān)視器模式與配置熱更新

    這篇文章主要為大家詳細介紹了Go語言中的監(jiān)視器模式與配置熱更新的相關知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-03-03
  • golang使用os/exec庫查詢進程方式

    golang使用os/exec庫查詢進程方式

    本文介紹了使用Go語言os/exec查詢進程的方法,并提供了兩種方式,第一種方式輸出了當前系統(tǒng)所有運行的進程,第二種方式可以過濾出指定進程的信息
    2026-04-04
  • 使用go備份StarRocks建表語句方法實例

    使用go備份StarRocks建表語句方法實例

    這篇文章主要為大家介紹了使用go備份StarRocks建表語句方法實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • Go類型安全的HTTP請求示例詳解

    Go類型安全的HTTP請求示例詳解

    這篇文章主要為大家介紹了Go類型安全的HTTP請求示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • golang如何讓string轉(zhuǎn)int64

    golang如何讓string轉(zhuǎn)int64

    這篇文章主要介紹了golang如何讓string轉(zhuǎn)int64問題,
    2024-02-02
  • Golang?Makefile示例深入講解使用

    Golang?Makefile示例深入講解使用

    一次偶然的機會,在?github?上看到有人用?Makefile,就嘗試了一下,發(fā)現(xiàn)真的非常合適,Makefile?本身就是用來描述依賴的,可讀性非常好,而且與強大的?shell?結合在一起,基本可以實現(xiàn)任何想要的功能
    2023-01-01
  • GO使用阿里云,解決go get下載項目慢或無法下載的情況

    GO使用阿里云,解決go get下載項目慢或無法下載的情況

    這篇文章主要介紹了GO使用阿里云,解決go get下載項目慢或無法下載的情況,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Go+Gin實現(xiàn)安全多文件上傳功能

    Go+Gin實現(xiàn)安全多文件上傳功能

    這篇文章主要為大家詳細介紹了Go如何利用Gin框架實現(xiàn)安全多文件上傳功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-04-04
  • 淺析Go語言版本的forgery

    淺析Go語言版本的forgery

    使用過Python語言的朋友們可能使用過 forgery_py ,它是一個偽造數(shù)據(jù)的工具。這篇文章主要介紹了Go語言版本的forgery,需要的朋友可以參考下
    2018-08-08

最新評論

都江堰市| 石狮市| 昭平县| 古蔺县| 读书| 巴彦县| 卢龙县| 河池市| 灵武市| 青海省| 京山县| 岑溪市| 聂荣县| 开江县| 英德市| 邹平县| 会同县| 凯里市| 婺源县| 宁海县| 昌江| 德令哈市| 岐山县| 内黄县| 黑山县| 南涧| 尖扎县| 天全县| 通化县| 麦盖提县| 宁晋县| 夏邑县| 芮城县| 西藏| 沈丘县| 昌黎县| 福建省| 沁源县| 襄樊市| 大理市| 清徐县|