Go语言结构体与range关键字详解

Owen
Owen
发布时间:2026-10-15 | 5人浏览过
原创

本文介绍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基础语法与数据结构学习的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表