您现在的位置是:自如初>Go基础Go基础

30、Go 结构体 - 结构体的定义与使用

温新 2023-08-30 00:09:32 Go基础 91人已围观

简介单一的数据类型已经无法满足开发的需求,Go 中提供了结构体来定义更为复杂的数据类型。结构体是由一系列相同类型或不同类型的数据构成的数据集合。

hi,我是温新

单一的数据类型已经无法满足开发的需求,Go 中提供了结构体来定义更为复杂的数据类型。结构体是由一系列相同类型或不同类型的数据构成的数据集合。

定义体的定义与实例化

定义结构体

结构体的定义方式如下,组成结构体类型的那些数据称为字段(fields),每个字段都有一个类型和一个名字,在一个结构体中,字段名字必须是唯一一。

type typeName struct {
   field1 type1
   field2 type2
   ...
}

使用结构体时需要注意如下 3 点:

1、typeName 是标识结构体的名称,在同一个包内不能重复;

2、结构体的 field 必须唯一;

3、同类型的 field 可以写在一行。


结构体的定义只是一种内存布局的描述,只有当结构体实例化时,才会真正分配内存。因此,只有在定义结构体并实例化后才能使用结构体。

实例化就是根据结构体定义的格式创建一份与格式一致的内存区域,结构体每个实例的内存是完全独立的。下面看看结构体的案例:

package main
// struct.go

func main() {
}

// 定义一个结构体
type Teacher struct {
   name string
   age  int8
   sex  byte
}

实例化结构体

1、使用声明的方式实例化结构体

格式:var 自定义结构体名称 结构体名称

// struct.go
import "fmt"

func main() {
   // 声明的方式实例化结构体
   var t1 Teacher
   fmt.Println(t1)
   // 为字段赋值
   t1.name = "王美丽"
   t1.age = 19
   t1.sex = 1
   fmt.Println(t1)
}

2、变量简短声明格式实例化结构体

// struct.go main 函数中

t2 := Teacher{}
t2.name = "王大丽"
t2.age = 20
t2.sex = 1
fmt.Println(t2)

3、简短方式实例化并赋值

Go语言中可以通过键值对格式和列表格式对结构体进行初始化。格式如下:

结构体实例 := 结构体类型{
   field1:值1,
   filed2:值2,
}


// struct.go main 函数中

t3 := Teacher{
   name: "美美",
   age:  23,
   sex:  1,
}
fmt.Println(t3)

4、new 函数实例化

// struct.go main 函数中

t4 := new(Teacher)
fmt.Println(t4) // &{ 0 0}

使用内置函数 new 实例化结构体,结构体实例化后形成指针类型的结构体,new 函数会分配内存。第一个参数是类型,返回值是指向该类型新分配的零值的指针。

5、取地址实例化

取地址实例化与使用new函数进行实例化类似,返回的是结构体指针类型。取地址实例化格式 如下:

// 格式
结构体实例 := &结构体类型{}
// struct.go main 函数中

t5 := &Teacher{}
fmt.Println(t5) // &{ 0 0}

结构体属性的访问

结构体实例化完成后,可通过“.”来访问结构体的成员变量,对成员变量进行赋值或修改。

package main

import "fmt"

func main() {
   b := Book{
       name: "Go",
   }

   fmt.Println(b.name)
}

type Book struct {
   name string
}

很赞哦!(3)

文章评论

登录 注册

自如初--时间轴

站名:自如初

独白:向前走!向前走!

邮箱:ziruchu@qq.com

RSS: RSS

站点信息