GO的range具體使用

2022-09-21 02:51:09 字數 1849 閱讀 5718

目錄

go 語言的 for…range  能做什麼呢?

for…range  如何使用 ?

for…range  的返回值有哪些情況,可以對於任何資料結構使用嗎?

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

for…range  的資料是如何傳遞的?

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

golang 的 for…range   是 go 自身的語法,可以用來遍歷資料結構,有如下資料結構可以遍歷

我們分別來看看可以如何使用他們,for…range  相當於乙個迭代器,可以遍歷資料結構的鍵/索引 和值

初始化乙個陣列

使用 for…range 遍歷 , 對應的是 索引  和 值

func main()

for i, v := range myarray

}初始化乙個切片

使用 for…range 遍歷 , 對應的是 索引  和 值

myslice := int

for i, v := range myslice

map 雜湊表

mymap := map[string]string

for k, v := range mymap

package main

import "fmt"

var mych = make(chan int, 10)

func writech()

for _, v := range mymap

for…range  的資料是如何傳遞的?

資料都是通過複製傳遞的,也就是都是值傳遞的,只不過由於資料結構不一樣,陣列和切片在這裡還是有一些區別的

前面的文章,我們有說到,切片,對應著 有 3 個元素的資料結構,乙個是 cap,乙個是 len, 乙個是 ptr ,指向的是乙個底層陣列

切片是引用傳遞,但是傳遞資料的時候,切片這個變數是值傳遞,但是它實際指向的底層陣列還是不會變的

咱們來寫乙個 demo 檢視一下:

我們思路是這個樣子:

遍歷乙個 陣列/切片,在遍歷當前值的時候,去修改後面索引對應的值,全部遍歷完畢後,檢視結果中,實際的資料是否會被修改掉,若修改掉了,則是切片是傳引用,若沒有修改掉,則是陣列是傳值

myarray := [5]int

fmt.println(myarray)

for i, v := range myarray

fmt.printf("%d -- %d -- %p\n", i, v, &a

}效果如下:

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

fmt.println(myslice)

for i, v := range myslice

fmt.printf("%dwww.cppcns.com -- %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

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

go程式設計使用range的思考

記性不好,初學golang,作個筆記。先看以下 package main import fmt type student struct func main for s range stus for k,v range m 有什麼問題嗎?對映中的內容會如何 輸出如下 john bob any 原因是r...

Go語言中Range的使用

go 語言中 range 關鍵字用於 for 迴圈中迭代陣列 array 切片 slice 通道 channel 或集合 map 的元素。在陣列和切片中它返回元素的索引和索引對應的值,在集合中返回 key value 對。package main import fmt func main sum 0...

go語言基礎之range

在go語言中,遍歷資料或切片時可以用range,range會產生兩個值,分別是資料的索引與值 package main import fmt func main for v range x 這種寫法非常不好 雖然沒有報錯 因為for range的過程中,產生了index 索引 與value兩個值,但...