golang struct 结构体

golang 结构体

什么是结构体?

结构体可以存不同项定义的数据类型,它是一组数据的集合。我们可以将数据按指定的格式进行保存和读取。

下面以一台服务器参数作为例子:

服务器名: ServerName
CPU: CPU
内存: Mem
硬盘: Disk
IP地址: IP

定义一个SERVER的结构体:

1
2
3
4
type 结构体名 struct {
member string // 成员及成员类型

}
1
2
3
4
5
6
7
type SERVER struct {
ServerName string
CPU int
MEM int
DISK int
IP string
}

创建结构体

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package main

import "fmt"

type SERVER struct {
ServerName string
CPU int
MEM int
DISK int
IP string
}



func main(){
//{HOSTNAME 4 8 500 200.2.14.2} 创建一个结构体,并赋予值
fmt.Println(SERVER{"DBSERVER",4,8,500,"200.2.14.2"})


//也可以使用KEY->VALUE格式定义一个结构体
serverInfo := SERVER{ServerName:"web server",CPU:4,MEM:8,DISK:200,IP:"47.23.23.1"}

fmt.Println(serverInfo.IP)

//如果没有赋值,将使用缺省默认值
webInfo := SERVER{ServerName:"web 2server",DISK:200,IP:"47.23.23.2"}

fmt.Println(webInfo)


}

访问成员

使用方法为struct.xxxx 赋值或者访问

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package main

import "fmt"

type SERVER struct {
ServerName string
CPU int
MEM int
DISK int
IP string
}


func main(){
//赋值
newServer.ServerName = "new server"
newServer.DISK = 500
newServer.MEM = 4
newServer.CPU = 2
newServer.IP = "2.2.3.2"

//读取

fmt.Printf("服务器名%s,磁盘:%d,内存:%d,CPU:%d,IP:%s", newServer.ServerName,
newServer.DISK, newServer.MEM,
newServer.CPU, newServer.IP,
)
}

结构体传递

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
func GetServerInfo(server SERVER){
fmt.Printf("server ip:%s\n",server.IP) //访问结构体中的成员信息
}

func main() {


var newServer SERVER

//赋值
newServer.ServerName = "new server"
newServer.DISK = 500
newServer.MEM = 6
newServer.CPU = 2
newServer.IP = "2.2.3.2"

GetServerInfo(newServer) //将结构体传递给GetServerInfo函数

}

结构体指针

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//结构体做为参数传递,如果要修改数据,需要用结构体指针方式
func changeServer(server *SERVER){
if server.MEM > 4{
server.MEM = 8
}
}




var newServer SERVER

//赋值
newServer.ServerName = "new server"
newServer.DISK = 500
newServer.MEM = 6
newServer.CPU = 2
newServer.IP = "2.2.3.2"

changeServer(&newServer) //结构体指针传递

//读取

fmt.Printf("服务器名%s,磁盘:%d,内存:%d,CPU:%d,IP:%s", newServer.ServerName,
newServer.DISK, newServer.MEM,
newServer.CPU, newServer.IP,
)
//结果server.MEM =8