【struct】go的结构体|Go主题月

简介: go结构体的结构体主要由type和struct两个关键字组成

网络异常,图片无法展示
|

结构体组成

go结构体的结构体主要由typestruct两个关键字组成

当字段首字母为大写时,可以被外部包访问,相当于Javapublic字段,

当字段首字母为小写时,只能被当前包访问,外部包不能访问,相当于Javaprivate字段

结构体的名称也一样,小写时外部包就无法访问到这个结构体了。

type Address struct {
  Province string
  City   string
  Country  string
  Detail   string
}

网络异常,图片无法展示
|

声明结构体

  • 字面量声明
addr:=Address{
    Province: "浙江省",
    City:     "杭州市",
    Country:  "滨江区",
    Detail:   "阿里巴巴",
}
  • var声明
var addr Address
addr.Province="浙江省"
addr.City="杭州市"
addr.Country="滨江区"
addr.Detail="阿里巴巴"

嵌套

一个结构体也可以包含另一个结构体,例如:

type People struct {
  Name string
  Addr Address
  Age  int
  alias string
}
type Address struct {
  Province string
  City   string
  Country  string
  Detail   string
}

上面的People结构体包含了Address结构体,然后在声明的时候可以这样

zheng:=People{
    Name:  "",
    Addr:  Address{
        Province: "",
        City:     "",
        Country:  "",
        Detail:   "",
    },
    Age:   0,
    alias: "",
}

方法

go的函数的接收器就是对应这个接收器的方法

网络异常,图片无法展示
|

值接收器

使用值接收器时,在方法里对接收器进行修改时,不会影响源接收器的数据

func (p People) Info()  {
}

指针接收器

使用指针接收器时,在方法里对接收器进行修改会影响源接收器的数据

func (p *People) Update()  {
}

多态

当多个方法实现同一个接口的方法时,就可以使用多态了

import "fmt"
func main() {
  var li Lilei
  speak(li)
  var z ZhangSan
  speak(z)
}
// 函数
func speak(say Say)  {
  say.Say()
}
// 定义接口
type Say interface {
  Say()
}
// 结构体
type Lilei struct {
}
type ZhangSan struct {
}
// 实现方法
func (l Lilei) Say()  {
  fmt.Println("我是李雷")
}
func (z ZhangSan) Say()  {
  fmt.Println("我是张三")
}

标签

在我们定义结构体时,同时还可以给字段设置标签。一般常用的标签有jsonxml。然后可以通过反射把字段映射到设置的标签上。

设置标签时 字段首字母要大写

  • 单个标签
type People struct {
    Name string `json:name`
}
  • 多个标签
    同时也可以定义多个标签

两个类型的标签中间用空格隔开

type People struct {
    Name string `json:"province" xml:"province"`
}


目录
相关文章
|
17天前
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
92 71
|
1月前
|
存储 Rust Go
Go nil 空结构体 空接口有什么区别?
本文介绍了Go语言中的`nil`、空结构体和空接口的区别。`nil`是预定义的零值变量,适用于指针、管道等类型;空结构体大小为0,多个空结构体实例指向同一地址;空接口由`_type`和`data`字段组成,仅当两者均为`nil`时,空接口才为`nil`。
Go nil 空结构体 空接口有什么区别?
|
1月前
|
编译器 Go
探索 Go 语言中的内存对齐:为什么结构体大小会有所不同?
在 Go 语言中,内存对齐是优化内存访问速度的重要概念。通过调整数据在内存中的位置,编译器确保不同类型的数据能够高效访问。本文通过示例代码展示了两个结构体 `A` 和 `B`,尽管字段相同但排列不同,导致内存占用分别为 40 字节和 48 字节。通过分析内存布局,解释了内存对齐的原因,并提供了优化结构体字段顺序的方法,以减少内存填充,提高性能。
41 3
|
3月前
|
Go
Go to Learn Go之结构体
Go to Learn Go之结构体
40 5
|
3月前
|
存储 Shell Go
Go语言结构体和元组全面解析
Go语言结构体和元组全面解析
|
3月前
|
存储 Go
Go: struct 结构体类型和指针【学习笔记记录】
本文是Go语言中struct结构体类型和指针的学习笔记,包括结构体的定义、成员访问、使用匿名字段,以及指针变量的声明使用、指针数组定义使用和函数传参修改值的方法。
|
4月前
|
JSON 编译器 Go
Go struct
该文章详细讨论了Go语言中的结构体,包括结构体的字面形式、内存对齐和填充、字段标签的使用、结构体值的赋值和可寻址性、组合字面量的取地址特性、通过指针访问结构体字段的隐式解引用,以及结构体值的比较和类型转换。
22 3
|
4月前
|
Go
Go - struct{} 实现 interface{}
Go - struct{} 实现 interface{}
42 9
|
4月前
|
存储 设计模式 安全
空结构体:Go 语言中的轻量级占位符
【8月更文挑战第31天】
50 0
|
4月前
|
JSON Go 数据格式
Go实现json字符串与各类struct相互转换
文章通过Go语言示例代码详细演示了如何实现JSON字符串与各类struct之间的相互转换,包括结构体对象生成JSON字符串和JSON字符串映射到struct对象的过程。
37 0