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

 更新时间:2022年07月29日 09:46:56   作者:梦想橡皮擦  
这篇文章主要为大家介绍了Go语言结构体Go range的学习教程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

脚本之家 / 编程助手:解决程序员“几乎”所有问题!
脚本之家官方知识库 → 点击立即使用

正文

在前一篇博客我们学习了 Go 数组,其要求所有元素为同一数据类型,如果希望存储不同类型的数据,就要用到结构体相关知识。

结构体的定义:存储相同或不同类型的数据集合。

有 C 相关经验,结构体还是比较容易理解的,语法格式如下所示:

1
2
3
4
5
6
type struct_variable_type struct {
   member definition
   member definition
   ...
   member definition
}

上述语法格式的关键字是 structtypestruct_variable_type 是结构体名称,例如我们声明一个【人】的结构体,有姓名,有年龄,有性别。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package main
import "fmt"
// 声明结构体
type People struct {
    name string
    age  int
    sex  int
}
func main() {
    //使用结构体
    people := People{
        "橡皮擦",
        18,
        0}
    fmt.Println(people)
}

在编写的时候要注意语法格式,其中结构体的使用代码建议放在一行,或者右大括号紧跟最后一个元素。

使用结构体也可以携带元素名,即下述写法。

1
2
3
//使用结构体
people := People{name: "橡皮擦", age: 18, sex: 0}
fmt.Println(people)

访问结构体成员 使用 结构体.成员名 即可,当然也可以用该办法进行赋值。

1
2
3
4
5
6
7
//使用结构体
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 用于数组的语法格式如下所示:

1
2
3
for i,value := range a_array{
    // TODO
}

结合语法格式,编写下述代码:

1
2
3
4
5
6
7
8
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 作用于字符串,可以对其每个字符进行迭代输出。

1
2
3
4
5
6
7
8
9
10
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,代码如下:

1
2
3
4
5
6
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 个字节的索引,所以索引值有可能并不连续。

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

1
2
3
4
var str string = "xiang橡pi皮ca擦"
for _, v := range str {
    fmt.Println(string(v))
}

range 相关知识等学到切片和集合的时候,应该还会涉及到,这里参考其它语言的经验,我们下篇再见。

以上就是Go语言结构体Go range的学习教程的详细内容,更多关于Go range结构体的资料请关注脚本之家其它相关文章!

蓄力AI

微信公众号搜索 “ 脚本之家 ” ,选择关注

程序猿的那些事、送书等活动等着你

原文链接:https://juejin.cn/post/7124900260186423333

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 reterry123@163.com 进行投诉反馈,一经查实,立即处理!

相关文章

  • Golang 中实现 Set的思路详解

    Golang 中实现 Set的思路详解

    本文介绍了Go中两种set的实现原理,并在此基础介绍了对应于它们的两个包简单使用,本文介绍的非常详细,需要的朋友参考下吧
    2024-01-01
  • golang中实现给gif、png、jpeg图片添加文字水印

    golang中实现给gif、png、jpeg图片添加文字水印

    这篇文章主要介绍了golang中实现给gif、png、jpeg图片添加文字水印,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • 详解Go 依赖管理 go mod tidy

    详解Go 依赖管理 go mod tidy

    这篇文章主要为大家介绍了详解Go 依赖管理 go mod tidy,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • Go gin权限验证实现过程详解

    Go gin权限验证实现过程详解

    这篇文章主要为大家介绍了Go gin权限验证实现过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • go实现整型的二进制转化的方法

    go实现整型的二进制转化的方法

    这篇文章主要介绍了go实现整型的二进制转化的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-07-07
  • Go中的go.mod使用详解

    Go中的go.mod使用详解

    这篇文章主要介绍了Go中的go.mod使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Golang优雅保持main函数不退出的办法

    Golang优雅保持main函数不退出的办法

    很多时候我们需要让main函数不退出,让它在后台一直执行,下面这篇文章主要给大家介绍了关于Golang优雅保持main函数不退出的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • golang生成RSA公钥和密钥的实现方法

    golang生成RSA公钥和密钥的实现方法

    本文主要介绍了golang生成RSA公钥和密钥的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • Go iota关键字与枚举类型实现原理

    Go iota关键字与枚举类型实现原理

    这篇文章主要介绍了Go iota关键字与枚举类型实现原理,iota是go语言的常量计数器,只能在常量的表达式中使用,更多相关内容需要的小伙伴可以参考一下
    2022-07-07
  • go gin+token(JWT)验证实现登陆验证

    go gin+token(JWT)验证实现登陆验证

    本文主要介绍了go gin+token(JWT)验证实现登陆验证,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12

最新评论