文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
struct 类型的声明
Go 语言中,也和 C 或者其他语言一样,可以声明新的类型,作为其它类型的属性或字段的容器。例如,可以创建一个自定义类型 person
代表一个人的实体。这个实体拥有属性:姓名和年龄。这样的类型称之 struct
。如下代码所示:
type person struct {
name string
age int
}
声明一个 struct
如此简单,上面的类型包含有两个字段
- 一个
string
类型的字段 name,用来保存用户名称这个属性 - 一个
int
类型的字段 age,用来保存用户年龄这个属性
使用 struct
看下面的代码
type person struct {
name string
age int
}
var P person // P 现在就是 person 类型的变量了
P.name = "Astaxie" // 赋值"Astaxie"给 P 的 name 属性。
P.age = 25 // 赋值"25"给变量 P 的 age 属性
fmt.Printf("The person's name is %s", P.name) // 访问 P 的 name 属性。
除了上面这种 P 的声明使用之外,还有另外几种声明使用方式:
按照顺序提供初始化值
P := person{"Tom", 25}
通过
field:value
的方式初始化,这样可以任意顺序P := person{age:24, name:"Tom"}
当然也可以通过
new
函数分配一个指针,此处 P 的类型为*person
P := new(person)
看一个完整的使用 struct
的例子
package main
import "fmt"
// 声明一个新的类型
type person struct {
name string
age int
}
// 比较两个人的年龄,返回年龄大的那个人,并且返回年龄差
// struct 也是传值的
func Older(p1, p2 person) (person, int) {
if p1.age>p2.age { // 比较 p1 和 p2 这两个人的年龄
return p1, p1.age-p2.age
}
return p2, p2.age-p1.age
}
func main() {
var tom person
// 赋值初始化
tom.name, tom.age = "Tom", 18
// 两个字段都写清楚的初始化
bob := person{age:25, name:"Bob"}
// 按照 struct 定义顺序初始化值
paul := person{"Paul", 43}
tb_Older, tb_diff := Older(tom, bob)
tp_Older, tp_diff := Older(tom, paul)
bp_Older, bp_diff := Older(bob, paul)
fmt.Printf("Of %s and %s, %s is older by %d years\n",
tom.name, bob.name, tb_Older.name, tb_diff)
fmt.Printf("Of %s and %s, %s is older by %d years\n",
tom.name, paul.name, tp_Older.name, tp_diff)
fmt.Printf("Of %s and %s, %s is older by %d years\n",
bob.name, paul.name, bp_Older.name, bp_diff)
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论