Go语言结构体Go range的学习教程

作者:梦想橡皮擦 时间:2024-05-05 09:33:49 

在前一篇博客我们学习了 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,值:%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 相关知识等学到切片和集合的时候,应该还会涉及到,这里参考其它语言的经验,我们下篇再见。

来源:https://juejin.cn/post/7124900260186423333

标签:Go,range,结构体
0
投稿

猜你喜欢

  • python将每个单词按空格分开并保存到文件中

    2023-07-01 12:46:31
  • python DataFrame数据格式化(设置小数位数,百分比,千分位分隔符)

    2021-02-03 21:34:10
  • numpy.ndarray 实现对特定行或列取值

    2022-05-14 09:17:24
  • 基于Python2、Python3中reload()的不同用法介绍

    2023-10-01 17:59:15
  • 中国移动G3笔记本全Flash 网站

    2009-04-27 12:51:00
  • Python3 中return和yield的区别

    2023-10-19 09:03:00
  • Python ndarray 数组的变形详情

    2023-05-13 14:58:47
  • CentOS 6/7环境下通过yum安装php7的方法

    2023-11-23 11:08:02
  • SQL Server 2000日志转移实现高可用性

    2009-01-20 15:04:00
  • 浅谈pytorch中的nn.Sequential(*net[3: 5])是啥意思

    2023-10-05 05:42:55
  • python实现人脸识别代码

    2022-12-20 15:39:06
  • php部分常见问题总结

    2023-07-02 17:10:41
  • Python中一些深不见底的“坑”

    2021-10-10 05:03:57
  • Go 加密解密算法小结

    2024-04-26 17:29:00
  • SQL Join的一些总结(实例)

    2024-01-14 04:28:16
  • Python数据库sqlite3图文实例详解

    2024-01-15 07:50:33
  • SpringBoot+Mybatis-Plus实现mysql读写分离方案的示例代码

    2024-01-17 02:13:32
  • 利用python实现全屏爱心雨向喜欢的人表白

    2022-05-29 22:32:14
  • openCV实现图像融合的示例代码

    2022-05-20 03:28:16
  • Python如何根据时间序列数据作图

    2022-06-30 01:41:01
  • asp之家 网络编程 m.aspxhome.com