GO 语言学习 之 结构体

发布于:2025-07-05 ⋅ 阅读:(22) ⋅ 点赞:(0)

        在 Go 语言中,结构体(struct)是一种用户自定义的数据类型,它可以包含多种不同类型的数据组合在一起。结构体为组织和管理相关数据提供了一种有效的方式,常用于表示现实世界中的对象或概念。如果你懂C/C++,那么这个数据结构理解起来挺容易的,只是形式上略有不同。

结构体定义

type <结构体名> struct {

         <成员1> <类型1>

         <成员2> <类型2>

         <成员3> <类型3>

        ...

}

  • type 关键字:表示定义了一个新类型。
  • struct 关键字:表示新的类型是一个结构体类型
  • 结构体可以包含多个成员,每个成员的类型可以相同也可以不同
  • 成员命名也区分大小写,大驼峰命名外部包是否可以被引用
  • 结构体可以有自己的成员函数(这里后续再补充)
  • 成员函数也是要有大小写的命名,大驼峰命名外部包可以引用
  • 作为函数形式参数的时候,通常是传递指针类型,因为结构体的内容可能会很大
  • 另外,指针类型可以直接修改原始数据,把修改的结果带回来,所以使用的时候也要注意
  • 还有一种特殊的用法,匿名结构
  • 指针变量与普通变量在访问结构体成员的时候都使用 . 的方式访问 (与C语言不一样)
  • 结构体支持嵌套使用,最常见的例子就是解析配置 JSON 和 Yaml 内容的时候

结构体的使用

package main

import "fmt"

type Student struct {
    NumID    int       // 学号
    Name     string    // 姓名
    ClassID  string    // 班级
    Birthday string    // 生日
    Age      int       // 年龄
    Sex      string    // 性别
    IsAccommodation bool // 是否住校 true 住校 false 不住
}

func (s *Student)StudentInfoPrint() {
    fmt.Println("学号 :", s.NumID)
    fmt.Println("姓名 :", s.Name)
    fmt.Println("班级 :", s.ClassID)
    fmt.Println("生日 :", s.Birthday)
    fmt.Println("年龄 :", s.Age)
    fmt.Println("性别 :", s.Sex)
    fmt.Println("是否住校 :", s.IsAccommodation)
}


func main() {
    stu1 := Student {1, "张三", "一年级", "2020-01-12", 6, "男", true}
    fmt.Println("===== stu1 =====")
    stu1.StudentInfoPrint()

    var stu2 Student
    fmt.Println("===== stu2 =====")
    stu2.StudentInfoPrint()

    stu3 := &Student{}
    stu3.Name = "李四"
    fmt.Println("===== stu3 =====")
    stu3.StudentInfoPrint()

    stu4 := &Student{
        NumID: 4,
        Name: "王五",
        ClassID: "二年级",
        Birthday: "2018-03-12",
        Age: 7,
        Sex: "男",
    }
    fmt.Println("===== stu4 =====")
    stu4.StudentInfoPrint()

    stu5 := new(Student)
    stu5.NumID = 5
    stu5.Name = "朱六"
    stu5.Sex = "女"
    fmt.Println("===== stu5 =====")
    stu5.StudentInfoPrint()

    fmt.Println("匿名结果体使用")
    stu6 := struct {
        name string
        age int
    }
    stu6.name = "刘七"
    stu6.age = 10
    fmt.Println("===== stu6 =====")
    fmt.Println("name : ", stu6.name)
    fmt.Println("age : ", stu6.age)
}


网站公告

今日签到

点亮在社区的每一天
去签到