Go基础:010.Struct

73 阅读1分钟

概述

Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型。

结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。

定义

定义结构体需要使用 type 和 struct 语句。

type 语句设定了结构体的名称。 struct 语句定义一个新的数据类型,结构体中有一个或多个成员。

package main

import "fmt"

type People struct {
	Id      uint
	Name    string
	Address string
}

func main() {
	//1. 按顺序赋值
	p1 := People{1, "Jim", "Beijing"}
	fmt.Println(p1) //{1 Jim Beijing}

	//2. 使用 key => value 格式
	p2 := People{Id: 2, Name: "Tom", Address: "Shanghai"}
	fmt.Println(p2) //{2 Tom Shanghai}

	//3. 指定部分字段,未设置为0值
	p3 := People{Id: 3, Name: "Jack"}
	fmt.Println(p3) //{3 Jack }
}

访问

package main

import "fmt"

// 1. 定义结构体
type People struct {
	Id      uint
	Name    string
	Address string
}

func main() {
	//2. 声明
	var p1 People

	//3. 赋值
	p1.Id = 1
	p1.Name = "Jim"
	p1.Address = "Beijing"

	//4. 访问
	fmt.Printf("p1's Id: %d\n", p1.Id)           //p1's Id: 1
	fmt.Printf("p1's Name: %s\n", p1.Name)       //p1's Name: Jim
	fmt.Printf("p1's Address: %s\n", p1.Address) //p1's Address: Beijing
}

结构体作为函数参数,结构体是值传递

package main

import "fmt"

type People struct {
	Id      uint
	Name    string
	Address string
}

func print(p People) {
	fmt.Printf("id:%d, name:%s, address:%s\n", p.Id, p.Name, p.Address)
}

func updateAddress(p People) {
	p.Address = "Shanghai"
}

func main() {
	var p1 People

	p1.Id = 1
	p1.Name = "Jim"
	p1.Address = "Beijing"

	print(p1) //id:1, name:Jim, address:Beijing
	updateAddress(p1)
	print(p1) //id:1, name:Jim, address:Beijing
}

结构体指针

package main

import "fmt"

type People struct {
	Id      uint
	Name    string
	Address string
}

func print(p *People) {
	fmt.Printf("id:%d, name:%s, address:%s\n", p.Id, p.Name, p.Address)
}

func updateAddress(p *People) {
	p.Address = "Shanghai"
}

func main() {
	var p1 People

	p1.Id = 1
	p1.Name = "Jim"
	p1.Address = "Beijing"

	// 传递结构体指针
	print(&p1) //id:1, name:Jim, address:Beijing
	updateAddress(&p1)
	print(&p1) //id:1, name:Jim, address:Shanghai
}