当前位置:网站首页>7 天学个Go,Go 结构体 + Go range 来学学
7 天学个Go,Go 结构体 + Go range 来学学
2022-08-04 15:17:00 【华为云】
写在学习前
在前一篇博客我们学习了 Go 数组,其要求所有元素为同一数据类型,如果希望存储不同类型的数据,就要用到结构体相关知识。
结构体的定义:存储相同或不同类型的数据集合。
有 C 相关经验,结构体还是比较容易理解的,语法格式如下所示:
type struct_variable_type struct { member definition member definition ... member definition}
上述语法格式的关键字是 struct
和 type
,struct_variable_type
是结构体名称,例如我们声明一个【人】的结构体,有姓名,有年龄,有性别。
package mainimport "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 Peoplepeople1.name = "橡皮擦"people1.age = 18people1.sex = 1fmt.Println(people1)
Go Range
作为一个 Python 程序员,关键字 range 是非常熟悉的,在 Go 中 range 关键字可以用于 for 循环,用于数组它返回元素的索引和值,在后续学习的集合中返回键值对。
range 用于数组的语法格式如下所示:
for i,value := range a_array{ // TODO}
结合语法格式,编写下述代码:
package mainimport "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 mainimport ( "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))}
边栏推荐
- leetcode: 212. Word Search II
- Byte、Short、Integer、Long内部缓存类的对比与源码分析
- Leetcode: 215 disorderly to find the first big k element in the array
- FRED Application: Capillary Electrophoresis System
- leetcode:255 验证前序遍历序列二叉搜索树
- 【北亚数据恢复】IBM System Storage存储lvm信息丢失,卷访问不了的数据恢复方案
- 解决dataset.mnist无法加载进去的情况
- 1401 - Web technology 】 【 introduction to graphical Canvas
- MVCC实现过程
- Codeforces Round #811 A~F
猜你喜欢
随机推荐
程序猿七夕礼物-如何30分钟给女朋友快速搭建专属语聊房
技术分享| 小程序实现音视频通话
【北亚数据恢复】IBM System Storage存储lvm信息丢失,卷访问不了的数据恢复方案
郑轻新生校赛和中工选拔赛题解
Oracle database user creation, restart, import and export
IP第十六天笔记
苏秋贵:揭秘绿联科技用5年时间从0做到6亿,如何一枝独秀?
手搓一个“七夕限定”,用3D Engine 5分钟实现烟花绽放效果
16、学习MySQL 正则表达式
多线程编程之优先级翻转问题
AOSP内置APP特许权限白名单
《分布式云最佳实践》分论坛,8月11日深圳见
1403. Minimum Subsequence in Non-Increasing Order
I love Tanabata hahaha
QT笔记——QUuid了解
【Today in History】August 4: First female Turing Award winner; NVIDIA acquires MediaQ; first Cybersecurity Challenge completed
Resharper 如何把类里的类移动到其他文件
小程序|炎炎夏日、清爽一夏、头像大换装
using关键字学习
Manacher(求解最长回文子串)