首页> 基础笔记 >GoLang基础学习 >面向对象 面向对象

Golang结构的声明和使用

作者:小萝卜 2023-04-24 浏览 306

简介1)从概念或叫法上看:结构体字段 =属性 = field(即授课中,统一叫字段)2)字段是结构体的一个组成部分,一般是基本数据类型、数组,也可是引用类型。比如我们前面定 义猫结构体的 Name string就是属性

如何声明结构体

基本语法

type结构体名称   struct  {

    field1 type

    field2 type

}

举例:

type Person struct{
	Name string
	Age int
	Scores [5]float64
	ptr *int //指针 
	slice []int //切片
	map1 map[string]string //map
}


字段/属性

基本介绍(结构体是值类型)

1)从概念或叫法上看:结构体字段     =属性   = field(即授课中,统一叫字段)

2)字段是结构体的一个组成部分,一般是基本数据类型、数组,也可是引用类型。比如我们前面定义猫结构体的   Name string就是属性

注意事项和细节说明

1)字段声明语法同变量,示例:字段名字段类型

2)字段的类型可以为:基本类型、数组或引用类型

3)在创建一个结构体变量后,如果没有给字段赋值,都对应一个零值   (默认值),规则同前面讲的一样:

    布尔类型是  false,数值是   0,字符串是   ""。

    数组类型的默认值和它的元素类型相关,比如  score [3]int则为[0,  0, 0]

    指针,slice,和 map的零值都是  nil,即还没有分配空间。

案例演示:

type Person struct{
	Name string
	Age int
	Scores [5]float64
	ptr *int //指针 
	slice []int //切片
	map1 map[string]string //map
}

func main() {

	//定义结构体变量
	var p1 Person
	fmt.Println(p1)

	if p1.ptr == nil {
		fmt.Println("ok1")
	}

	if p1.slice == nil {
		fmt.Println("ok2")
	}

	if p1.map1 == nil {
		fmt.Println("ok3")
	}

	//使用slice, 再次说明,一定要make
	p1.slice = make([]int, 10)
	p1.slice[0] = 100 //ok

	//使用map, 一定要先make
	p1.map1 = make(map[string]string)
	p1.map1["key1"] = "tom~" 
	fmt.Println(p1)
}

4)不同结构体变量的字段是独立,互不影响,一个结构体变量字段的更改,不影响另外一个   ,结构体是值类型。

案例:

type Person struct{
	Name string
	Age int
	Scores [5]float64
	ptr *int //指针 
	slice []int //切片
	map1 map[string]string //map
}

type Monster struct{
	Name string
	Age int
}


func main() {

	//不同结构体变量的字段是独立,互不影响,一个结构体变量字段的更改,
	//不影响另外一个, 结构体是值类型
	var monster1 Monster
	monster1.Name = "牛魔王"
	monster1.Age = 500

	monster2 := monster1 //结构体是值类型,默认为值拷贝
	monster2.Name = "青牛精"

	fmt.Println("monster1=", monster1) //monster1= {牛魔王 500}
	fmt.Println("monster2=", monster2) //monster2= {青牛精 500}

}

画出上面代码的内存示意图:

很赞哦! (0)

文章评论

    高端网站建设