首頁 > 軟體

Go語言結構體Go range的學習教學

2022-07-29 14:02:37

正文

在前一篇部落格我們學習了 Go 陣列,其要求所有元素為同一資料型別,如果希望儲存不同型別的資料,就要用到結構體相關知識。

結構體的定義:儲存相同或不同型別的資料集合。

有 C 相關經驗,結構體還是比較容易理解的,語法格式如下所示:

type struct_variable_type struct {
   member definition
   member definition
   ...
   member definition
}

上述語法格式的關鍵字是 structtypestruct_variable_type 是結構體名稱,例如我們宣告一個【人】的結構體,有姓名,有年齡,有性別。

package main
import "fmt"
// 宣告結構體
type People struct {
	name string
	age  int
	sex  int
}
func main() {
	//使用結構體
	people := People{
		"橡皮擦",
		18,
		0}
	fmt.Println(people)
}

在編寫的時候要注意語法格式,其中結構體的使用程式碼建議放在一行,或者右大括號緊跟最後一個元素。

使用結構體也可以攜帶元素名,即下述寫法。

//使用結構體
people := People{name: "橡皮擦", age: 18, sex: 0}
fmt.Println(people)

存取結構體成員 使用 結構體.成員名 即可,當然也可以用該辦法進行賦值。

//使用結構體
var people1 People
// var people2 People
people1.name = "橡皮擦"
people1.age = 18
people1.sex = 1
fmt.Println(people1)

Go Range

作為一個 Python 程式設計師,關鍵字 range 是非常熟悉的,在 Go 中 range 關鍵字可以用於 for 迴圈,用於陣列它返回元素的索引和值,在後續學習的集合中返回鍵值對。

range 用於陣列的語法格式如下所示:

for i,value := range a_array{
	// TODO
}

結合語法格式,編寫下述程式碼:

package main
import "fmt"
var a_array = []int{1, 2, 3, 4, 5, 6, 7, 8}
func main() {
	for i, value := range a_array {
		fmt.Printf("索引:%d,值:%dn", i, value)
	}
}

執行程式碼輸出如下資訊:

索引:0,值:1
索引:1,值:2
索引:2,值:3
索引:3,值:4
索引:4,值:5
索引:5,值:6
索引:6,值:7
索引:7,值:8

如果將 range 作用於字串,可以對其每個字元進行迭代輸出。

package main
import (
	"fmt"
)
func main() {
	var str string = "xiangpica"
	for k, v := range str {
		fmt.Println(k, string(v))
	}
}

上述 str 中的內容為純英文,k 值每次+1。

0 x
1 i
2 a
3 n
4 g
5 p
6 i
7 c
8 a

如果 str 中包含中文,k 值每次 +3,程式碼如下:

func main() {
	var str string = "橡皮擦"
	for k, v := range str {
		fmt.Println(k, string(v))
	}
}

輸出結果如下:

0 橡
3 皮
6 擦

如果是中英文混拼,出現的結果會更加有趣。

0 x
1 i
2 a
3 n
4 g
5 橡
8 p
9 i
10 皮
13 c
14 a
15 擦

這裡其實可以得到一個結論,range 迭代是的 Unicode,而不是位元組,返回值是 UTF-8 編碼第 1 個位元組的索引,所以索引值有可能並不連續。

在編寫程式碼的時候,如果不需要索引,只保留元素,可以使用廢棄預留位置,程式碼如下:

var str string = "xiang橡pi皮ca擦"
for _, v := range str {
	fmt.Println(string(v))
}

range 相關知識等學到切片和集合的時候,應該還會涉及到,這裡參考其它語言的經驗,我們下篇再見。

以上就是Go語言結構體Go range的學習教學的詳細內容,更多關於Go range結構體的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com