go 语言中的 struct 与 c 的很相似,此外,go 没有 Class,也没有继承。
stuct 的格式为:type
- 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}
- 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{Tony23}
- Call 'Change Age'function,newageis 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{Tony23}
- Call 'Change Age'function,newageis 15
- {Tony 15}
go 语言中,支持在 struct 中省略字段的名称,只保留其类型(匿名字段)
- package main
- import (
- "fmt"
- )
- type person struct {
- string
- int
- }
- func main() {
- p := person{
- "Bob",
- 27,
- }
- fmt.Println(p)
- }
- // output{Bob27}
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{Joe26female}
- 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
- }
来源: http://www.cnblogs.com/atuotuo/p/6884908.html