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

Posted 梦想橡皮擦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了7 天学个Go,Go 结构体 + Go range 来学学相关的知识,希望对你有一定的参考价值。

写在学习前

在前一篇博客我们学习了 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 := Peoplename: "橡皮擦", 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 = []int1, 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))
	

输出结果如下:

036

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

0 x
1 i
2 a
3 n
4 g
58 p
9 i
1013 c
14 a
15

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

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

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

以上是关于7 天学个Go,Go 结构体 + Go range 来学学的主要内容,如果未能解决你的问题,请参考以下文章

go切片遍历

go语言初体验(流程控制range遍历函数结构体面向对象)

Golang入门:一天学完GO的进阶语法

Go 语言范围(Range)

Go 语言范围(Range)

Go语言结构体