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

GO的range如何使用詳解

 更新時間:2023年02月10日 08:35:06   作者:阿兵云原生  
本文主要介紹了GO的range如何使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

GO 語言的 for…range 能做什么呢?

for…range 如何使用 ?

for…range 的返回值有哪些情況,可以對于任何數(shù)據(jù)結(jié)構(gòu)使用嗎?

for…range 的返回值如果不需要,可以如何處理?

for…range 的數(shù)據(jù)是如何傳遞的?

剛學(xué)習(xí) golang 的 xdm 會不會有上面的疑問?其實很簡單,我們就一個一個的來分享和實操一遍

GO 語言的 for…range 能做什么呢?

golang 的 for…range 是 go 自身的語法,可以用來遍歷數(shù)據(jù)結(jié)構(gòu),有如下數(shù)據(jù)結(jié)構(gòu)可以遍歷

  • 切片 slice
  • 數(shù)組 array
  • map 哈希表
  • channel 通道

for…range 如何使用 ?

我們分別來看看可以如何使用他們,for…range 相當(dāng)于一個迭代器,可以遍歷數(shù)據(jù)結(jié)構(gòu)的鍵/索引 和值

數(shù)組 array

  • 初始化一個數(shù)組
  • 使用 for…range 遍歷 , 對應(yīng)的是 索引 和 值
func main() {
?? ?myArray := [5]int{1, 2, 3, 4, 5}

?? ?for i, v := range myArray {
?? ??? ?fmt.Printf("%d -- %d -- %p\n", i, v, &v)
?? ?}
}

切片 slice

  • 初始化一個切片
  • 使用 for…range 遍歷 , 對應(yīng)的是 索引 和 值
mySlice := []int{1, 2, 3, 4, 5}
    
for i, v := range mySlice {
    fmt.Printf("%d -- %d -- %p\n", i, v, &v)
}

map 哈希表

  • 初始化一個 map 哈希表
  • 使用 for…range 遍歷 , map 對應(yīng)的 鍵值對
myMap := map[string]string{
    "name":  "xmt",
    "hobby": "program",
    "addr":  "mengli",
}
for k, v := range myMap {
    fmt.Printf("%s -- %s -- %p\n", k, v, &v)
}

channel 通道

  • 創(chuàng)建一個可以緩沖 10 個 int 類型數(shù)據(jù)的通道
  • 創(chuàng)建一個協(xié)程專門向通道中寫入數(shù)據(jù)
  • 主協(xié)程遍歷通道,讀取數(shù)據(jù)
package main
import "fmt"
var myCh = make(chan int, 10)

func writeCh() {
?? ?for i := 0; i < 5; i++ {
?? ??? ?myCh <- i
?? ?}
?? ?close(myCh)

}
func main() {
?? ?go writeCh()
?? ?for {
?? ??? ?for data := range myCh {
?? ??? ??? ?fmt.Println(data)
?? ??? ?}
?? ??? ?break
?? ?}

}

for…range 的返回值有哪些情況,可以對于任何數(shù)據(jù)結(jié)構(gòu)使用嗎?

并不是所有數(shù)據(jù)結(jié)構(gòu)都可以使用 for…range 的,如下結(jié)構(gòu)可以使用這個方法

返回值 1返回值 2數(shù)據(jù)傳遞
字符串索引索引對應(yīng)的值值傳遞
數(shù)組或者切片索引索引對應(yīng)的值數(shù)組:值傳遞
切片:引用傳遞
哈希表鍵對應(yīng)的值指針
通道通道中的數(shù)據(jù)指針

for…range 的返回值如果不需要,可以如何處理?

相信寫過 golang 的 xdm 都知道,go 里面對于我們不需要的返回值,都可以使用 - 來表示 ,因此 for…range 當(dāng)然也可以這樣

例如:

myMap := map[string]string{
    "name":  "xmt",
    "hobby": "program",
    "addr":  "mengli",
}
for _, v := range myMap {
    fmt.Printf("%s -- %p\n", v, &v)
}

for…range 的數(shù)據(jù)是如何傳遞的?

數(shù)據(jù)都是通過復(fù)制傳遞的,也就是都是值傳遞的,只不過由于數(shù)據(jù)結(jié)構(gòu)不一樣,數(shù)組和切片在這里還是有一些區(qū)別的

前面的文章,我們有說到,切片,對應(yīng)著 有 3 個元素的數(shù)據(jù)結(jié)構(gòu),一個是 cap,一個是 len, 一個是 ptr ,指向的是一個底層數(shù)組

切片是引用傳遞,但是傳遞數(shù)據(jù)的時候,切片這個變量是值傳遞,但是它實際指向的底層數(shù)組還是不會變的

咱們來寫一個 demo 查看一下:

我們思路是這個樣子:

遍歷一個 數(shù)組/切片,在遍歷當(dāng)前值的時候,去修改后面索引對應(yīng)的值,全部遍歷完畢后,查看結(jié)果中,實際的數(shù)據(jù)是否會被修改掉,若修改掉了,則是切片是傳引用,若沒有修改掉,則是數(shù)組是傳值

數(shù)組的效果

myArray := [5]int{1, 2, 3, 4, 5}
fmt.Println(myArray)

for i, v := range myArray {
? ? if ?i == 0{
? ? ? ? myArray[2] = 888
? ? }
? ? fmt.Printf("%d -- %d -- %p\n", i, v, &myArray[i])
}

效果如下:

go run main.go
[1 2 3 4 5]
0 -- 1 -- 0x1189c120
1 -- 2 -- 0x1189c124
2 -- 3 -- 0x1189c128
3 -- 4 -- 0x1189c12c
4 -- 5 -- 0x1189c130

切片的效果

mySlice := []int{1, 2, 3, 4, 5}
fmt.Println(mySlice)
for i, v := range mySlice {
    if i == 0{
        mySlice[2] = 888
    }
    fmt.Printf("%d -- %d -- %p\n", i, v, &mySlice[i])
}

效果如下:

go run main.go
[1 2 3 4 5]
0 -- 1 -- 0x1140e340
1 -- 2 -- 0x1140e344
2 -- 888 -- 0x1140e348
3 -- 4 -- 0x1140e34c
4 -- 5 -- 0x1140e350

通過上述的案例,相信心里都有點譜了吧

到此這篇關(guān)于GO的range如何使用詳解的文章就介紹到這了,更多相關(guān)GO range使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在Go中格式化字符串的幾種常用方法

    在Go中格式化字符串的幾種常用方法

    Go對字符串格式化提供了良好的支持,這篇文章主要給大家介紹了關(guān)于在Go中格式化字符串的幾種常用方法,文中通過代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Go具有一定的參考價值,需要的朋友可以參考下
    2023-10-10
  • 詳解golang各種類型是如何進行比較的

    詳解golang各種類型是如何進行比較的

    在日常開發(fā)中,比較操作是最常用的基本操作之一,可以用來判斷變量之間是否相等或者對應(yīng)的大小關(guān)系,比較操作對于排序、查找和集合數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)至關(guān)重要,本文將深入解析golang各種類型是如何進行比較的,需要的朋友可以參考下
    2024-01-01
  • go內(nèi)存緩存BigCache之Entry封裝源碼閱讀

    go內(nèi)存緩存BigCache之Entry封裝源碼閱讀

    這篇文章主要介紹了go內(nèi)存緩存BigCache之Entry封裝源碼閱讀
    2023-09-09
  • Go實現(xiàn)文件上傳和下載

    Go實現(xiàn)文件上傳和下載

    這篇文章主要為大家詳細介紹了Go實現(xiàn)文件上傳和下載,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • Go中數(shù)組傳參的幾種方式小結(jié)

    Go中數(shù)組傳參的幾種方式小結(jié)

    本文主要介紹了Go中數(shù)組傳參的幾種方式小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Golang截取字符串方法示例講解及對比

    Golang截取字符串方法示例講解及對比

    這篇文章主要介紹了Golang截取字符串方法,文中介紹了使用rune函數(shù)和utf包以及range遍歷的方式,熟練掌握這些可以幫助我們更方便地處理字符串,提高編程效率和代碼質(zhì)量,感興趣的同學(xué)可以參考下文
    2023-05-05
  • Go使用Gin+mysql實現(xiàn)增刪改查的詳細實例

    Go使用Gin+mysql實現(xiàn)增刪改查的詳細實例

    golang本身沒有提供連接mysql的驅(qū)動,但是定義了標(biāo)準(zhǔn)接口供第三方開發(fā)驅(qū)動,下面這篇文章主要給大家介紹了關(guān)于Go使用Gin+mysql實現(xiàn)增刪改查的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • 使用go gin來操作cookie的講解

    使用go gin來操作cookie的講解

    今天小編就為大家分享一篇關(guān)于使用go gin來操作cookie的講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • go RWMutex的實現(xiàn)示例

    go RWMutex的實現(xiàn)示例

    本文主要來介紹讀寫鎖的一種Go語言的實現(xiàn)方式RWMutex,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 解決Goland 同一個package中函數(shù)互相調(diào)用的問題

    解決Goland 同一個package中函數(shù)互相調(diào)用的問題

    這篇文章主要介紹了解決Goland 同一個package中函數(shù)互相調(diào)用的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05

最新評論

台州市| 都安| 辽宁省| 贞丰县| 涞源县| 南开区| 嘉定区| 许昌县| 西峡县| 虹口区| 铜山县| 五河县| 建瓯市| 宣恩县| 遵义市| 茌平县| 鄂州市| 和林格尔县| 黄陵县| 陆良县| 乳源| 巩留县| 志丹县| 孝昌县| 莱州市| 喀喇沁旗| 博乐市| 广河县| 平远县| 六安市| 尼玛县| 安仁县| 页游| 贺州市| 康平县| 桂阳县| 通道| 新干县| 原平市| 莱阳市| 石泉县|