12、结构-GOLANG

我们目前学的数据收集器都是针对同种类型而言,但是在实际编程中需要吧不同类型的数据综合到一起,比如一个人,姓名,年龄等等各个方面,数据类型不同就需要好几个数组或者切片之类的,明显不合适

声明结构

curiosity:好奇,在例子里代表一个探测器,lat与long代表探索的经纬度

1
2
3
4
5
6
7
8
9
10
11
12
import "fmt"

func main() {
var curiosity struct {
lat float64
long float64
}
curiosity.lat = -4.5859//采用结构体.属性名的方式赋予属性值
curiosity.long = 137.4417
fmt.Println(curiosity.lat)
fmt.Println(curiosity.long)
}

类型复用结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package main

import "fmt"

func main() {
type location struct {//声明struct的类型别名location,location类型有两个属性
lat float64
long float64
}
var spirit location//声明location类型的变量,改变量自动继承location的两个属性
spirit.lat = -14.5684
spirit.long = 175.4722636

var opportunity location
opportunity.lat = -1.9462
opportunity.long = 354.4734

fmt.Println(spirit, opportunity)
}

复合字面量初始化结构

1
2
3
4
5
6
7
8
9
10
11
12
package main

import "fmt"

func main() {
type location struct{ lat, long float64 }
opportunity := location{lat: -14.5684, long: 175.4722636}
fmt.Println(opportunity)

insight := location{3.14159, 4.13159}
fmt.Println(insight)
}

结构被复制

1
2
3
4
5
6
7
8
9
10
11
12
13
package main

import "fmt"

func main() {
type location struct{ lat, long float64 }
opportunity := location{lat: -14.5684, long: 175.4722636}

curiosity := opportunity

curiosity.lat = 1.111111
fmt.Println(opportunity, curiosity)//opportunity数据没有变化说明新结构是被复制过来的
}

image-20230310151913570

由结构组成的切片

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package main

import "fmt"

func main() {

type location struct {
name string
lat float64
long float64
}

locations := []location{ //声明一个location类型的切片
{name: "Bradbury Landing", lat: -4.5895, long: 137.4417},
{name: "Columbia Memorial Station", lat: -14.5684, long: 175.472636},
{name: "Challenger Memorial Station", lat: -1.9462, long: 354.4734},
}
fmt.Println(locations)
}