Go-Struct


本文摘自网络,作者,侵删。

自定义类型

//将NewString定义为string类型
type NewString string

类型别名

type byte = uint8
type rune = int32

go 结构体

Go语言提供了一种自定义数据类型,可以封装多个基本数据类型,这种数据类型叫结构体

定义结构体

type StructName struct {
    field1 fieldType
    field2 fieldType
    …
}

type person struct {
    name string
    city string
    age  int8
}

创建指针类型结构体

可以通过new函数进行实例化,得到一个结构体的指针

var p2 = new(person)
fmt.Printf("%T\n", p2)     //*main.person
fmt.Printf("p2=%#v\n", p2) //p2=&main.person{name:"", city:"", age:0}

结构体实例化的三种方式

// 方式1
var p1 person
// 方式2
// var p2 = new(person)
// 方式2
// var p3 := &person{}

p1.name = "name"
p1.age = 18
p1.city = "city"
fmt.Printf("p1=%#v\n", p1) //p1=&main.person{name:"name", city:"city", age:18}

结构体初始化

没有初始化的结构体,结构体字段的值都是对应类型的0值, 例如:
var p1 person

  • 方式1,通过.的方式对字段直接赋值进行初始化
p1.name = "name"
p1.age = 18
p1.city = "city"
  • 方式2,通过键值对赋值的方式初始化
p1 := person{
    name: "name",
    city: "city",
    age:  18,
}
  • 方式3,通过结构体指针进进行初始化
p1 := &person{
    name: "name",
    city: "city",
    age:  18,
}
  • 方式4,根据字段的顺序,直接传入对应的值
p1 := &person{"name", "city", 18}

空结构体

// 空结构体不占用空间
var person struct{}
fmt.Println(unsafe.Sizeof(person))  // 0

方法的定义

func (receiver receiverType) methodName(params) (returnValueType) {
    ...
}

方法接收者

指定接收者,相当于python中传入self

  1. 接收者的两种类型:
  • 值类型接收者
  • 指针类型接收者
  1. 指针类型作为方法接收者使用场景:
    如果用到了指针接收者,为保证代码一致性,那么应尽量保证其他方法也都使用指针类型的接收者,不应混用
  • 需要修改接收者的字段值(属性值)
  • 比较大的结构体作为接收者传入

嵌套结构体

// Address 结构体
type Address struct {
    Province string
    City     string
}

// User 结构体
type User struct {
    Name    string
    Gender  string
    Address // 匿名字段, 可省略类型, 也可传入指针类型的 *Address
}

嵌套结构体的查找顺序

当访问结构体属性或方法时,先在当前结构体中查找该字段,若未找到再去嵌套的匿名字段中查找。

嵌套结构体适用场景

虽然golang没有像其他语言一样比较明确的使用面向对象,但嵌套结构体可理解为其他语言中的继承。


本文来自:简书

感谢作者:SodaCrush

查看原文:Go-Struct

相关阅读 >>

小孩数数出列问题

Golang的优势是什么

rabbitmq 消息丢失处理机制 confirm模式 [Go 版本]

vscode 安装Golang插件

Golang(0)的安装和vscode开发环境

jenkins构建Go及java项目

Go wails 框架构建桌面应用示例

Go time

Go那些事儿|Go反射使用第二弹(valueof)

2020.3.30日结

更多相关阅读请进入《Go》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...