GO—结构体简述

目录

1,定义结构体

2,访问结构体成员

3,结构体作为函数参数

4,结构体指针


Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型。

结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。

结构体表示一项记录,比如班级的学生信息,每个人有以下属性:

●Name:姓名 ●Sex:性别 ●Age:年龄 ●IDcard: 身份证

注:结构体是值类型

1,定义结构体

结构体定义需要使用 typestruct 语句。struct 语句定义一个新的数据类型,结构体中有一个或多个成员。type 语句设定了结构体的名称。结构体的格式如下:

type struct_variable_type struct {
   member definition
   member definition
   ...
   member definition
}

一旦定义了结构体类型,它就能用于变量的声明,语法格式如下:

variable_name := structure_variable_type {value1, value2...valuen}
或
variable_name := structure_variable_type { key1: value1, key2: value2..., keyn: valuen}

实例如下:

package main
​
import "fmt"
​
//定义结构体
func main() {
    //声明结构体
    type Person struct {
        name string
        sex  string
        age  int
        id   int
    }
    //按顺序进行初始化
    // 创建一个新的结构体
    fmt.Println("顺序初始化结构体:", Person{"张三", "男", 20, 123456789})
    // 也可以使用 key => value 格式初始化
    fmt.Println("按键值类型赋值结构体", Person{name: "李四", sex: "女", age: 25, id: 456123789})
    // 忽略的字段为 0 或 空部分属性赋值初始化
    fmt.Println("部分属性赋值结构体", Person{name: "王五"})
}
[Running] go run "f:\goProject\src\dev_code\day12\example2\main\main.go"
顺序初始化结构体: {张三 男 20 123456789}
按键值类型赋值结构体 {李四 女 25 456123789}
部分属性赋值结构体 {王五  0 0}
​
[Done] exited with code=0 in 0.541 seconds

2,访问结构体成员

如果要访问结构体成员,需要使用点号 . 操作符,格式为:

结构体.成员名"

结构体类型变量使用 struct 关键字定义,实例如下:

package main
​
import "fmt"
​
//定义结构体
func main() {
    //声明结构体
    type Person struct {
        name string
        sex  string
        age  int
        id   int
    }
    //结构体类型的变量
    var Person1 Person
    var Person2 Person
    //给person1赋值
    Person1.name = "张三"
    Person1.sex = "男"
    Person1.age = 20
    Person1.id = 123456
    //给person2赋值
    Person2.name = "李三"
    Person2.sex = "女"
    Person2.age = 22
    Person2.id = 456789
    //输出结构体信息
    fmt.Println(Person1)
    fmt.Println(Person2)
}
[Running] go run "f:\goProject\src\dev_code\day12\example3\main\main.go"
{张三 男 20 123456}
{李三 女 22 456789}
​
[Done] exited with code=0 in 0.452 seconds

3,结构体作为函数参数

你可以像其他数据类型一样将结构体类型作为参数传递给函数。并以以上实例的方式访问结构体变量:

示例:

package main
​
import "fmt"
​
//定义结构体
//声明结构体
type Person struct {
    name string
    sex  string
    age  int
    id   int
}
​
func main() {
    //结构体类型的变量
    var Person1 Person
    var Person2 Person
    //给person1赋值
    Person1.name = "张三"
    Person1.sex = "男"
    Person1.age = 20
    Person1.id = 123456
    //给person2赋值
    Person2.name = "李三"
    Person2.sex = "女"
    Person2.age = 22
    Person2.id = 456789
    //使用函数传参结构体类型数据
    PrintInfo(Person1)
    PrintInfo(Person2)
}
​
//函数定义结构体为形式参数进行传入
func PrintInfo(per Person) {
    fmt.Println("姓名:", per.name)
    fmt.Println("性别:", per.sex)
    fmt.Println("年龄:", per.age)
    fmt.Println("id号:", per.id)
}

以上实例执行运行结果为:

姓名: 张三
性别: 男
年龄: 20
id号: 123456
姓名: 李三
性别: 女
年龄: 22
id号: 456789

4,结构体指针

你可以定义指向结构体的指针类似于其他指针变量,格式如下:

var struct_pointer *Person

以上定义的指针变量可以存储结构体变量的地址。查看结构体变量地址,可以将 & 符号放置于结构体变量前:

struct_pointer = &Person1

使用结构体指针访问结构体成员,使用 "." 操作符:

struct_pointer.title

接下来让我们使用结构体指针重写以上实例,代码如下:

package main
​
import "fmt"
​
//定义结构体
//声明结构体
type Person struct {
    name string
    sex  string
    age  int
    id   int
}
​
func main() {
    //结构体类型的变量
    var Person1 Person
    var Person2 Person
    //给person1赋值
    Person1.name = "张三"
    Person1.sex = "男"
    Person1.age = 20
    Person1.id = 123456
    //给person2赋值
    Person2.name = "李三"
    Person2.sex = "女"
    Person2.age = 22
    Person2.id = 456789
    //使用函数传参结构体类型数据
    PrintInfo(&Person1)
    fmt.Println()
    PrintInfo(&Person2)
}
​
//函数定义结构体为形式参数进行传入
func PrintInfo(per *Person) {
    fmt.Println("姓名:", per.name)
    fmt.Println("性别:", per.sex)
    fmt.Println("年龄:", per.age)
    fmt.Println("id号:", per.id)
}

以上实例执行运行结果为:

姓名: 张三
性别: 男
年龄: 20
id号: 123456
​
姓名: 李三
性别: 女
年龄: 22
id号: 456789

示例:

package main
​
import "fmt"
​
//定义结构体
//声明结构体
type Person struct {
    name string
    sex  string
    age  int
    id   int
}
​
func main() {
    //结构体类型的变量
    var Person1 Person
    //给person1赋值
    Person1.name = "张三"
    Person1.sex = "男"
    Person1.age = 20
    Person1.id = 123456
    fmt.Println("处理前", Person1)
    PrintInfo(Person1)
    fmt.Println("处理后", Person1)
}
​
//函数定义结构体为形式参数进行传入
func PrintInfo(per Person) {
    per.name = "张四"
}
[Running] go run "f:\goProject\src\dev_code\day12\example5\main\main.go"
处理前 {张三 男 20 123456}  //结构体是值类型
处理后 {张三 男 20 123456}
​
[Done] exited with code=0 in 0.453 seconds
​
//使用指针传数值
package main
​
import "fmt"
​
//定义结构体
//声明结构体
type Person struct {
    name string
    sex  string
    age  int
    id   int
}
​
func main() {
    //结构体类型的变量
    var Person1 Person
    //给person1赋值
    Person1.name = "张三"
    Person1.sex = "男"
    Person1.age = 20
    Person1.id = 123456
    fmt.Println("处理前", Person1)
    PrintInfo(&Person1)
    fmt.Println("处理后", Person1)
}
​
//函数定义结构体为形式参数进行传入
func PrintInfo(per *Person) {
    per.name = "张四"
}
[Running] go run "f:\goProject\src\dev_code\day12\example5\main\main.go"
处理前 {张三 男 20 123456}   //结构体指针是引用类型
处理后 {张四 男 20 123456}  
​
[Done] exited with code=0 in 0.444 seconds

示例:

package main
​
import "fmt"
​
type jiaose struct {
    name   string
    gongji int
}
​
func main() {
    var jiaose1 jiaose
    jiaose1.name = "魔神"
    jiaose1.gongji = 20000
    fmt.Println(jiaose1)
    test(&jiaose1)
    fmt.Println(jiaose1)
}
​
func test(js *jiaose) {
    js.name = "剑神"
    js.gongji = 30000
}
[Running] go run "f:\goProject\src\dev_code\day12\example5\main\main.go"
{魔神 20000}
{剑神 30000}
​
[Done] exited with code=0 in 0.439 seconds
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值