耐心和持久胜过激烈和狂热。

前言

前面的两篇文章对 Go 语言的基础语法和基本数据类型以及几个复合数据类型进行介绍,本文将对 Go 里面的指针和结构体进行介绍,也为后续文章做铺垫。

指针
GoGointfloat64string*int*float64*string

指针的定义

import (
	"fmt"
)

func main() {
	var num int = 666
	var numPtr *int = &num
	fmt.Println(numPtr)  // num 变量的地址值 0xc00001c098
	fmt.Println(&numPtr) // 指针变量本身的地址值 0xc00000a028
}
import (
	"fmt"
)

func main() {
	numPtr := new(int)
	fmt.Println(numPtr)  // 0xc000122058
	fmt.Println(*numPtr) // 0
}
func main() {
	var num float64 = 666
	var numPtr *int = &num // cannot use &num (value of type *float64) as type *int in variable declaration
}

获取和修改指针所指向变量的值

func main() {
	var num int = 666
	var numPtr *int = &num

	// 获取 num 的值
	fmt.Println(*numPtr) // 666
}
import (
	"fmt"
)

func main() {
	var num int = 666
	var numPtr *int = &num

	// 修改 num 的值
	*numPtr = 555
	fmt.Println(num) // 555
}
结构体

通过上一篇文章,我们了解了数组和切片的特点,它们可以存储一组相同类型的数据,而结构体,它可以由 0 个或多个字段组成,每个字段的数据类型可以一样,也可以不一样。结构体可以表示一个对象,例如:人,人包含的一些字段有姓名、性别和年龄等。

结构体定义

语法格式:

type XXX struct {
	/*
	结构体字段定义区域
	*/
}
XXX
// Person定义一个人的结构体
type Person struct {
	// 姓名
	Name string
	// 年龄
	Age int
	// 性别
	Sex string
	// 身份证号
	idNumber string
}
Person
// Person 定义一个人的结构体
type Person struct {
	// 姓名
	Name string
	// 年龄
	Age int
	// 性别
	Sex string
	// 身份证号
	idNumber string
}

// Phone 手机结构体
type Phone struct {
	// 品牌
	Brand string
	// 拥有者
	Owner Person
}
PersonPhonePhoneBrandOwnerOwnerPerson

结构体的创建方式

// Person 定义一个人的结构体
type Person struct {
	// 姓名
	Name string
	// 年龄
	Age int
	// 性别
	Sex string
	// 身份证号
	idNumber string
}

func main() {
	var person Person
	fmt.Println(person.Name)     // ""
	fmt.Println(person.Age)      // 0
	fmt.Println(person.Sex)      // ""
	fmt.Println(person.idNumber) // ""

	// 修改结构体字段的值
	person.Name = "chenmingyong"
	fmt.Println(person.Name) // "chenmingyong"
}

import "fmt"

// Person 定义一个人的结构体
type Person struct {
	// 姓名
	Name string
	// 年龄
	Age int
	// 性别
	Sex string
	// 身份证号
	idNumber string
}

func main() {
	person := Person{
		"chenmingyong",
		18,
		"男",
		"xxxxxxxxx",
	}

	fmt.Println(person) // {chenmingyong 18 男 xxxxxxxxx}
}
import "fmt"

// Person 定义一个人的结构体
type Person struct {
	// 姓名
	Name string
	// 年龄
	Age int
	// 性别
	Sex string
	// 身份证号
	idNumber string
}

func main() {
	person := Person{
	    Sex:      "男",
	    Age:      18,
	    Name:     "chenmingyong",
	    idNumber: "xxxxxxxxx",
    }

	fmt.Println(person) // {chenmingyong 18 男 xxxxxxxxx}
}
// Person 定义一个人的结构体
type Person struct {
	// 姓名
	Name string
	// 年龄
	Age int
	// 性别
	Sex string
	// 身份证号
	idNumber string
}

func main() {
	person := new(Person)
	(*person).Name = "chenmignyong"
	fmt.Println((*person).Name) // chenmignyong
	// 简化赋值,底层自动转换成 (*person).Age = 18
	person.Age = 18
	fmt.Println(person.Age) // 18
}
小结

本文对指针和结构体进行了介绍,也指出使用指针和结构体时需要注意的一些地方。因为本文是基于了解的层面去写的文章,一些深入的知识并没有提到,然后也没有提到结构体的方法,是因为打算留到后面和函数一起去介绍。

如果本文对你有帮助,欢迎点赞收藏加关注,如果本文有错误的地方,欢迎指出!