Golang开发--结构体的使用

结构体是由一系列具有相同类型或不同类型的数据构成的数据集合
在golang结构体可以为不同项定义不同的数据类型

1.结构体格式:

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

2.变量声明:

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

代码示例:

package main
import "fmt"
//结构体定义
type Student struct{
	name string
	age int
	height int
}

func main() {

    // 创建一个新的结构体
	x1 :=Student{"Tom",18,182}
    fmt.Println(x1)
    //可以用key:value形式
	x2 :=Student{name:"Bob",age:14,height:152}
    fmt.Println(x2)
    //没有定义的字段为“空值”
	x3 :=Student{}
	fmt.Println(x3)
}

运行结果为:

{Tom 18 182}
{Bob 14 152}
{ 0 0}

3.创建结构体实例

type apple struct {
}

p = apple{}:这是一种使用结构体字面量创建apple类型的实例的方式。通过在大括号内提供适当的字段值,可以初始化结构体的字段。这种方式在创建结构体实例时直接返回该实例的值,可以直接使用该值,而不需要通过指针来访问。

package main

type apple struct {
}

func main() {
	p := apple{} // 创建一个apple类型的实例
	// 可以直接使用p
}

p = new(apple):这是使用new关键字创建指向apple类型的指针的方式。new函数会为指定的类型分配内存,并返回一个指向该内存的指针。这种方式创建的是指向apple类型实例的指针,需要通过解引用操作符*来访问实例的字段。

package main

type apple struct {
}

func main() {
	p := new(apple) // 创建一个指向apple类型的指针
	// 需要使用*p来访问apple实例
}

因此,主要的区别在于p = apple{}创建的是结构体实例的值,而p = new(apple)创建的是指向结构体实例的指针。根据您的需求和使用场景,您可以选择适当的方式来创建和操作apple类型的实例。
访问结构体成员

结构体.成员名称

不仅可以访问结构体成员,还可以重新赋值

package main
import "fmt"
//结构体定义
type Student struct{
	name string
	age int
	height int
}

func main() {

    // 创建一个新的结构体
	x1 :=Student{"Tom",18,182}
	fmt.Println(x1)
	fmt.Println(x1.name)
	fmt.Println(x1.age)
	fmt.Println(x1.height)
	
	x1.name="Bob"
	x1.age=22
	x1.height=176
	fmt.Println("After change!")
	fmt.Println(x1)
	fmt.Println(x1.name)
	fmt.Println(x1.age)
	fmt.Println(x1.height)
}

运行结果为:

{Tom 18 182}
Tom
18
182
After change!
{Bob 22 176}
Bob
22
176

结构体作为函数参数
像其他数据类型一样,将结构体类型作为参数传递给函数,访问它的成员

package main
import "fmt"
//结构体定义
type Student struct{
	name string
	age int
	height int
}

func main() {
	var xx Student
	xx.name="Lili"
	xx.age=17
	xx.height=165
	showstruct(xx)
}

func showstruct(stu Student){
	fmt.Println(stu)
	fmt.Println(stu.name)
	fmt.Println(stu.age)
	fmt.Println(stu.height)
}

运行结果为:

{Lili 17 165}
Lili
17
165

结构体指针
定义指向结构体的指针:

package main
import "fmt"
//结构体定义
type Student struct{
	name string
	age int
	height int
}

func main() {
	xx :=Student{"Bob",17,178}
	var stu *Student
	stu=&xx
	fmt.Println(xx)
	fmt.Println(*stu)
	fmt.Println(stu.name)
	fmt.Println(stu.age)
	fmt.Println(stu.height)
}

运行结果为:

{Bob 17 178}
{Bob 17 178}
Bob
17
178

结构体指针作为函数参数:

package main
import "fmt"
//结构体定义
type Student struct{
	name string
	age int
	height int
}

func main() {
	xx :=Student{"Bob",17,178}
	showstruct(&xx)
}

func showstruct(stu *Student){
	fmt.Println(*stu)
	fmt.Println(stu.name)
	fmt.Println(stu.age)
	fmt.Println(stu.height)
}  

运行结果为:

{Bob 17 178}
Bob
17
178
  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值