go语言结构体使用小结

转载请注明出处:

  在Go语言中,结构体(struct)是一种复合数据类型,它允许你将多个不同类型的字段组合成一个单一的类型。结构体为数据的封装和抽象提供了便利,使得数据组织更加清晰和易于管理。

结构体的定义

  结构体的定义使用type关键字和struct类型,然后列出结构体的字段名和类型。

复制代码
type Person struct {  
    Name string  
    Age  int  
    Email string  
}

  在这个例子中,定义了一个名为Person的结构体,它有三个字段:Name(字符串类型),Age(整型),和Email(字符串类型)。

结构体的实例化

  使用结构体类型来创建结构体变量,这通常被称为结构体的实例化。

复制代码
// 使用字面量创建结构体实例  
p1 := Person{  
    Name: "Alice",  
    Age:  30,  
    Email: "alice@example.com",  
}  
  
// 使用字段名来设置值  
p2 := Person{  
    Name: "Bob",  
    Age:  25,  
}  
p2.Email = "bob@example.com"  
  
// 使用结构体类型创建变量,然后分别设置字段  
var p3 Person  
p3.Name = "Charlie"  
p3.Age = 35  
p3.Email = "charlie@example.com"

结构体的集合

  结构体集合通常指的是一个包含多个结构体实例的切片(slice)。

复制代码
// 定义一个Person类型的切片  
var people []Person  
  
// 向切片中添加结构体实例  
people = append(people, p1)  
people = append(people, p2)  
people = append(people, p3)  
  
// 或者直接初始化一个包含多个实例的切片  
people = []Person{  
    {Name: "Alice", Age: 30, Email: "alice@example.com"},  
    {Name: "Bob", Age: 25, Email: "bob@example.com"},  
    {Name: "Charlie", Age: 35, Email: "charlie@example.com"},  
}

结构体的遍历

  使用for循环来遍历结构体切片。

复制代码
// 遍历结构体切片  
for _, person := range people {  
    fmt.Printf("Name: %s, Age: %d, Email: %s\n", person.Name, person.Age, person.Email)  
}

  在这个循环中,range关键字用于迭代people切片中的每一个元素。_是一个空白标识符,用于忽略索引值,只获取切片中的元素。person是每次迭代时当前元素的副本,可以访问它的字段。

结构体方法和接收器

  在Go中,还可以为结构体定义方法,方法是一种特殊的函数,它关联到一个特定的类型上。方法的第一个参数是接收器(receiver),它指定了方法关联的类型。

复制代码
func (p Person) SayHello() {  
    fmt.Printf("Hello, my name is %s and I'm %d years old.\n", p.Name, p.Age)  
}  
  
// 使用结构体方法  
p1.SayHello() // 输出: Hello, my name is Alice and I'm 30 years old.

  在上面的代码中,定义了一个名为SayHello的方法,它接收一个Person类型的接收器p。然后可以像调用普通函数一样调用这个方法,但是需要使用结构体实例来调用它。

相关推荐
ldmd2844 小时前
地图生成算法(噪声篇-Perlin,Simplex,Value noise)
算法·go·地图生成
妙码生花5 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(四十一):增加管理员账号管理接口
后端·go·gin
名字还没想好☜2 天前
Go for-range 循环变量陷阱:goroutine 里全打印同一个值(Go 1.22 前后差异)
开发语言·后端·golang·go
光头闪亮亮2 天前
Fyne ( go跨平台GUI )项目实战-项目开发必备基础知识(中)
android·c++·go
光头闪亮亮2 天前
Fyne ( go跨平台GUI )项目实战-项目开发必备基础知识(上)
android·sqlite·go
光头闪亮亮2 天前
Fyne ( go跨平台GUI )项目实战-项目开发必备基础知识(下)
android·c++·go
妙码生花2 天前
从 PHP 到 AI + Golang,程序员自救转型手记(三十六):多驱动上传接口
后端·go·ai编程
golang学习记3 天前
从 CRUD 到生产就绪:Go 后端必须掌握的五个分布式系统模式
go
名字还没想好☜3 天前
Go 结构体内存对齐:调整字段顺序,同样的字段省下 40% 内存
开发语言·后端·golang·go·内存对齐