写点什么

7 天学个 Go,Go 结构体 + Go range 来学学

作者:梦想橡皮擦
  • 2022 年 8 月 20 日
    河北
  • 本文字数:1249 字

    阅读完需:约 4 分钟

写在学习前

在前一篇博客我们学习了 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 = 18people1.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 x1 i2 a3 n4 g5 p6 i7 c8 a
复制代码


如果 str 中包含中文,k 值每次 +3,代码如下:


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


输出结果如下:


0 橡3 皮6 擦
复制代码


如果是中英文混拼,出现的结果会更加有趣。


0 x1 i2 a3 n4 g5 橡8 p9 i10 皮13 c14 a15 擦
复制代码


这里其实可以得到一个结论,range 迭代是的 Unicode,而不是字节,返回值是 UTF-8 编码第 1 个字节的索引,所以索引值有可能并不连续。


在编写代码的时候,如果不需要索引,只保留元素,可以使用废弃占位符,代码如下:


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


发布于: 刚刚阅读数: 5
用户头像

爬虫 100 例作者,蓝桥签约作者,博客专家 2021.02.06 加入

6 年产品经理+教学经验,3 年互联网项目管理经验; 互联网资深爱好者; 沉迷各种技术无法自拔,导致年龄被困在 25 岁; CSDN 爬虫 100 例作者。 个人公众号“梦想橡皮擦”。

评论

发布
暂无评论
7 天学个Go,Go 结构体 + Go range 来学学_Python_梦想橡皮擦_InfoQ写作社区