go語言切片slice使用細節(jié)和注意事項整理大全
go語言中切片slice的使用是最為頻繁的,效率也是最高的, 今天就給大家說說我們在使用過程中會忽略的一些細節(jié)。
先普及一下slice的核心基礎(chǔ)知識, go語言中的切片是引用類型, 其底層數(shù)據(jù)的存儲實際上是存儲在一個數(shù)組 上(這個和他的數(shù)據(jù)類型 引用 是相關(guān)的 他底層就是引用的數(shù)組), 而數(shù)組的大小一旦定義其大小就是不可改變的,
使用建議:建議大家在使用切片的時候,如果是知道大小,那就在make的時候指定大小,然后通過下標(biāo)來使用, 如果不知道大小,希望通過append來動態(tài)擴容,那在定義的時候就不要使用make來初始化。
使用之前先初始化和分配內(nèi)存空間
slice := make([]string, 2) //定義cap容量為2的字符串切片 slice[0] = "hello" slice[1] = "golang"
用append函數(shù)將slice當(dāng)做動態(tài)數(shù)組使用
var x []interface{} // 定義個空接口切片,注意切片如果定義后如果是使用append函數(shù)動態(tài)增加元素,則不需要使用make初始化分配空間,因為append函數(shù)幫我們做了這個事情。 // 如果是定義后想直接通過下標(biāo)訪問切片,則必須使用make初始化后才能使用下標(biāo)訪問?。? //動態(tài)增加元素, append會自動幫我們初始化和分配內(nèi)存空間 x = append(x, "Hello golang")
定義切片的3種方式:
1. 從已有的數(shù)組中使用中括號[]和指定截取索引的位置來截取切片;
2. 使用 var 定義切片,然后使用append函數(shù)動態(tài)擴容;
3. 直接使用make構(gòu)建和初始化切片,然后通過下標(biāo)使用 注意不能越界!!
切片使用細節(jié)注意事項
1. 如果切片是從已有的數(shù)組截取來的, 在切片里面改變數(shù)據(jù)或者原來數(shù)組值改變的時候, 原來的數(shù)組或者截取后的切片的值也會相應(yīng)的改變,因為切片是引用的數(shù)組
2. 切片使用len獲取數(shù)據(jù)條數(shù), 使用cap獲取容量
切片的拷貝 注意事項
切片使用copy 內(nèi)置函數(shù)完成拷貝:func copy(dst, src []Type) int
dst 要拷貝到的目標(biāo)切片, src 拷貝數(shù)據(jù)的來源切片
var s4 = []int{7, 8, 9} var ss4 = make([]int, 2) // 注意這里的創(chuàng)建的切片長度, 需要大于等于要拷貝的src的長度 否則就只能拷貝這里的長度個元素 copy(ss4, s4) fmt.Printf("ss2=%v\n", ss4) // ss2=[7 8] s4里面有3個元素,因為ss4長度為2 所以這里只拷貝了2個元素
總結(jié)
到此這篇關(guān)于go語言切片slice使用細節(jié)和注意事項整理大全的文章就介紹到這了,更多相關(guān)go語言切片slice使用注意事項內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
go將request?body綁定到不同的結(jié)構(gòu)體中教程
這篇文章主要為大家介紹了go將request?body綁定到不同的結(jié)構(gòu)體中教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-10-10Go 使用Unmarshal將json賦給struct出錯的原因及解決
這篇文章主要介紹了Go 使用Unmarshal將json賦給struct出錯的原因及解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03Go 1.21新增的slices包中切片函數(shù)用法詳解
Go 1.21新增的 slices 包提供了很多和切片相關(guān)的函數(shù),可以用于任何類型的切片,本文通過代碼示例為大家介紹了部分切片函數(shù)的具體用法,感興趣的小伙伴可以了解一下2023-08-08