Go语言结构体与range关键字详解
本文介绍Go语言中用于存储不同类型数据的结构体基本用法,包括类型定义、实例化赋值及字段访问。同时详细解析 range 关键字在 for 循环中的应用,特别是遍历字符串时基于UTF-8编码的索引规律。
结构体的定义与使用
Go语言的数组只能存放同一数据类型,若需组合不同类型的属性(如人的姓名、年龄、性别),应使用结构体。结构体是用户自定义的类型,能够将多个零值或不同类型的值聚合在一起。
第1步:声明结构体类型
使用 type 和 struct 关键字来定义新类型。语法如下:
type StructName struct {
field1 Type
field2 Type
}
以创建一个表示人的结构体为例:
package main
import "fmt"
type People struct {
name string
age int
sex int
}
第2步:创建结构体实例
可以通过两种方式初始化结构体变量,建议将元素写在单行或右大括号紧邻最后一项以提高可读性。
按顺序赋值:
people := People{
"橡皮擦",
18,
0
}
fmt.Println(people)
指定字段名赋值(推荐): 这种方式更清晰,不受字段顺序限制。
people := People{name: "橡皮擦", age: 18, sex: 0}
fmt.Println(people)
第3步:访问与修改成员
通过 结构体变量.成员名 的语法进行读取或写入。先声明空变量再逐个赋值也是常见做法:
var p People
p.name = "橡皮擦"
p.age = 18
p.sex = 1
fmt.Println(p)
range关键字与循环遍历
range 配合 for 循环使用,常用于迭代数组、切片、映射、通道等集合类型。它返回两个值:第一个是元素的索引(Index),第二个是元素的值(Value)。
第4步:遍历数组与切片
对于数值类型的数组,range 提供从0开始的索引。
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~7 及其对应的值 1~8。
第5步:遍历字符串的字符特性
在Go中,字符串底层由字节组成,但 range 遍历的是Unicode码点(Rune)。这意味着遍历时会自动处理UTF-8编码的多字节字符。
英文字符串: 每个字母占1个字节,索引连续递增1。
中文字符串: 中文通常占3个字节,因此索引每次增加3。
var str string = "橡皮擦"
for k, v := range str {
fmt.Println(k, string(v))
}
输出结果为:
0 橡
3 皮
6 擦
这证明了 range 返回的是UTF-8编码第一字节的索引位置,而非简单的字符序号。若中英文混合,索引跳跃取决于具体字符的字节长度。
第6步:忽略不需要的返回值
如果只需要值而无需索引,可以使用Go的空标识符 _ 来丢弃索引值:
var str string = "xiang橡皮擦"
for _, v := range str {
fmt.Println(string(v))
}
这种写法在处理仅需内容不需位置的场景下更加简洁。理解 range 基于Unicode的特性,能有效避免在处理多语言文本时出现的乱码或索引错位问题。
以上就是Go语言结构体与range关键字的详细解析,更多关于Go基础语法与数据结构学习的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









