Go - Struct
定义
go 语言中的struct与c的很相似,此外,go没有Class,也没有继承。
stuct的格式为:type <name> struct{}
package main import ( "fmt" ) type person struct { Name string Age int } func main() { p := person{ Name: "Tony", Age: 23, } fmt.Println(p) }
//output
{Tony 23}
Struct是值类型
package main import ( "fmt" ) type person struct { Name string Age int } func ChangeAge(per person) { per.Age = 15 fmt.Printf("Call 'Change Age' function, new age is %d \n", per.Age) } func main() { p := person{ Name: "Tony", Age: 23, } fmt.Println(p) ChangeAge(p) fmt.Println(p) } //output {Tony 23} Call 'Change Age' function, new age is 15 {Tony 23}
我们可以看到,age属性只在func内部被修改,因此可以确定struct是值类型(传递给函数的参数为值的一个copy)
如何传递引用?
我们可以将函数的参数类型定义称为“一个指针”,即可
package main import ( "fmt" ) type person struct { Name string Age int } func ChangeAge(per *person) { per.Age = 15 fmt.Printf("Call 'Change Age' function, new age is %d \n", per.Age) } func main() { p := person{ Name: "Tony", Age: 23, } fmt.Println(p) ChangeAge(&p) fmt.Println(p) } //output {Tony 23} Call 'Change Age' function, new age is 15 {Tony 15}
struct中的匿名字段
go 语言中,支持在struct中省略字段的名称,只保留其类型(匿名字段)
package main import ( "fmt" ) type person struct { string int } func main() { p := person{ "Bob", 27, } fmt.Println(p) } // output {Bob 27}
匿名结构
go语言中,也支持定义匿名结构。
package main import ( "fmt" ) func main() { p := struct { Name string Age int Sex string }{ Name: "Joe", Age: 26, Sex: "female", } fmt.Println(p) } //output {Joe 26 female}
使用嵌入字段来“模拟”继承关系
package main import ( "fmt" ) type person struct { Sex string } type teacher struct { person Name string Age int } func main() { t := teacher{ person: person{Sex: "feamle"}, Name: "Jill", Age: 28, } fmt.Println(t) t.Age = 30 t.Name = "Criss" t.person.Sex = "male" fmt.Println(t) } //output {{feamle} Jill 28} {{male} Criss 30}
分类:
Golang
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现