首页 > 代码库 > Go - Struct
Go - Struct
定义
go 语言中的struct与c的很相似,此外,go没有Class,也没有继承。
stuct的格式为:type <name> struct{}
package mainimport ( "fmt")type person struct { Name string Age int}func main() { p := person{ Name: "Tony", Age: 23, } fmt.Println(p)}
//output
{Tony 23}
Struct是值类型
package mainimport ( "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 mainimport ( "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 mainimport ( "fmt")type person struct { string int}func main() { p := person{ "Bob", 27, } fmt.Println(p)}// output{Bob 27}
匿名结构
go语言中,也支持定义匿名结构。
package mainimport ( "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 mainimport ( "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}
Go - Struct
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。