返回介绍

struct 类型的声明

发布于 2024-10-12 12:35:54 字数 2130 浏览 0 评论 0 收藏 0

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 的声明使用之外,还有另外几种声明使用方式:

  1. 按照顺序提供初始化值
    P := person{"Tom", 25}

  2. 通过 field:value 的方式初始化,这样可以任意顺序
    P := person{age:24, name:"Tom"}

  3. 当然也可以通过 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文