您现在的位置是:网站首页> 编程资料编程资料
Go语言结构体Go range的学习教程_Golang_
2023-05-26
568人已围观
简介 Go语言结构体Go range的学习教程_Golang_
正文
在前一篇博客我们学习了 Go 数组,其要求所有元素为同一数据类型,如果希望存储不同类型的数据,就要用到结构体相关知识。
结构体的定义:存储相同或不同类型的数据集合。
有 C 相关经验,结构体还是比较容易理解的,语法格式如下所示:
type struct_variable_type struct { member definition member definition ... member definition } 上述语法格式的关键字是 struct 和 type,struct_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,值:%d\n", 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结构体的资料请关注其它相关文章!
相关内容
- Golang channel为什么不会阻塞的原因详解_Golang_
- go语言中的defer关键字_Golang_
- go mod详细使用教程_Golang_
- Golang运行报错找不到包:package xxx is not in GOROOT的解决过程_Golang_
- Go泛型实战教程之如何在结构体中使用泛型_Golang_
- 关于go-zero单体服务使用泛型简化注册Handler路由的问题_Golang_
- go语言VScode see 'go help modules' (exit status 1)问题的解决过程_Golang_
- Go Redis客户端使用的两种对比_Golang_
- Go代码检查的推荐工具及使用详解_Golang_
- Golang如何编写内存高效及CPU调优的Go结构体_Golang_
