重温Go语法笔记 | 结构体
- 结构体
多个任意类型聚合成的复合类型
1.字段拥有自己的类型和值
2.字段名必须唯一
3.字段可以是结构体
结构体的定义是一种内存布局的描述
只有实例化才会真正分配内存,必须实例化之后才能使用结构体的字段结构体的实例化
type Point struct {
X int
Y int
}
var p Point
p.X = 10
p.Y = 20
指针类型的结构体
Go访问结构体指针使用了语法糖,将ins.Name形式转化成(*ins).Name
type Point struct {
X int
Y int
}
p := new(Point)
p.X = 10
p.Y = 20
指针类型的结构体与结构体的区别?
取结构体的地址实例化
取地址实例化是最广泛的一种结构体实例化方式
type Person struct {
Name string
Age int
Sex int
} func main() {
person := &Person{}
person.Name = "mkl"
person.Age = 10
person.Sex = 1
}
键值对初始化结构体
type Person struct {
Name string
Age int
Sex int
child *Person
} func main() {
person := &Person{
Name: "mkl",
Age: 20,
Sex: 1,
child: &Person{
Name: "bob",
Age: 10,
Sex: 0,
},
}
fmt.Printf("%#v", person)
}
列表初始化结构体
type Person struct {
Name string
Age int
Sex int
child *Person
} func main() {
person := &Person{"mkl", 10, 1, &Person{"bob", 11, 0, nil}}
fmt.Printf("%#v", person)
}
初始化匿名结构体
func main() {
person := &struct {
id int
data string
}{
id: 1,
data: "hello",
}
fmt.Printf("%#v", person)
}
Go方法和接收器
方法是接收器上的一个函数
方法的作用对象是接收器,函数没有作用对象- 为结构体添加方法
面向过程
type Bag struct {
items []string
} func Insert(b *Bag, item string) {
b.items = append(b.items, item)
} func main() {
bag := Bag{}
Insert(&bag, "foo")
}
面向对象
type Bag struct {
items []string
} func (b *Bag) Insert(item string) {
b.items = append(b.items, item)
} func main() {
bag := new(Bag)
bag.Insert("foo")
}
- 指针接收器
指针接收器
type Property struct {
value int
} // 设置属性值
func (p *Property) Set(v int) {
p.value = v
} // 获取属性值
func (p *Property) Get() int {
return p.value
} func main() {
p := new(Property)
p.Set(10)
fmt.Println(p.Get())
}
- 为结构体添加方法
类型内嵌和结构体内嵌
内嵌的结构体可以直接访问成员变量
内嵌结构体的字段名是它的类型名结构体模拟类的继承
以组合的方式实现继承特性
重温Go语法笔记 | 结构体的更多相关文章
- 标记化结构初始化语法 在结构体成员前加上小数点 如 “.open .write .close ”C99编译器 .
今天在看串口驱动(四)的时候 有这样一个结构体初始化 我很不理解 如下: static struct s3c24xx_uart_port s3c24xx_serial_ports[NR_PORTS] ...
- 瘋子C语言笔记(结构体/共用体/枚举篇)
(一)结构体类型 1.简介: 例: struct date { int month; int day; int year; }; struct student { int num; char name ...
- C语言学习笔记--结构体
结构体定义三种方式: #include<stdio.h> //第一种定义方法 struct point { int x; int y; }; struct point p1,p2; //第 ...
- 初学swift笔记 结构体(八)
import Foundation /* 和类很相似 结构体 -> 封装 属性.方法 结构体是值类型 */ //定义一个LSQ类型的结构体 关键字struct struct LSQ { var ...
- Go笔记-结构体
[定义] type identifier struct{ field1 type1 field2 type2 ... } // 声明 var s identifier identifier.field ...
- go学习笔记-结构体
结构体 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合 定义 格式 type struct_variable_type struct { member definition; member ...
- C语言语法教程-结构体
2018-09-30 结构体中成员变量地址是连续的,结构体用于描述记录. Create a struct //---------------------------- //struct1.c //创建 ...
- C学习笔记-结构体
结构体的定义和初始化 结构体是简单数据类型的综合 struct man { char name[100]; int age; }; struct man m = { "tom", ...
- C学习笔记-结构体与二进制文件增删改查
使用结构体整理数据,然后利用二进制存储文件,这样存储的文件类似于数据库,可以实现文件的增删改查 定义结构体 struct student { unsigned int ID; char name[20 ...
- c语言学习笔记 - 结构体位域
在学习结构体的时候遇到了位域这个概念,位域主要是为了节省内存空间,比如用一个32位,4个字节的int存储一个开关变量时,会造成空间浪费,于是干脆就考虑在这个32划分不同的区域来存储数据,例如划出1位存 ...
随机推荐
- linq+lambda+delegate,从list中查找到满足匹配条件的所有数据索引值
linq的扩展方法中有FindIndex,FindLastIndex两个方法可以查找满足条件的首个和最后一个数据的索引值,利用delegate将匹配条件的方法传入FindAllIndex,查找满足匹配 ...
- 使用wxpython开发跨平台桌面应用,实现程序托盘图标和界面最小化及恢复处理
在前面随笔<基于wxpython的跨平台桌面应用系统开发>介绍了一些关于wxpython开发跨平台桌面应用的总体效果,开发桌面应用,会有很多界面细节需要逐一处理,本篇随笔继续深入该主题,对 ...
- GObject学习笔记(一)类和实例
前言 最近阅读Aravis源码,其中大量运用了GObject,于是打算学习一下. 此系列笔记仅主要面向初学者,不会很深入探讨源码的细节,专注于介绍GObject的基本用法. 此系列笔记参考GObjec ...
- CSP2023总结
CSP2023总结 入门组 比赛开始时,顺序开题. 看完 \(T1\) 后没有立即想出正确解法,有点慌乱,看完 \(T2,T3\) 并思考了一会后过去了大概 \(20\) 分钟,想到了解法便看 \(T ...
- Python脚本消费多个Kafka topic
在Python中消费多个Kafka topic,可以使用kafka-python库,这是一个流行的Kafka客户端库.以下是一个详细的代码示例,展示如何创建一个Kafka消费者,并同时消费多个Kafk ...
- Abp Vnext 中如何统一接口返回值
ABP Vnext Vue 的实现 https://github.com/WangJunZzz/abp-vnext-pro 在使用 abp 的过程中,如果提供给第三方接口要实现返回值统一需要怎么做? ...
- core-js版本过低,需要更新但是更新失败的原因
ore-js@2.6.12: core-js@.3 is no longer maintained and not recommended for usage due to the number of ...
- 用python 将数字每三组分割
def cut_num(n, sep=','): # 第一个参数是要传递的数字,第二个是分隔符 s = str(abs(n))[::-1] groups = [] i = 0 while i < ...
- Java IO 框架整理
昨天笔试时碰到了IO流的题目,很久没接触IO编程了,所以那道题目做的不行. 搜了一下,这篇文章总结的很有条理,果断转载. 转自:http://tanshenghui.javaeye.com/blog/ ...
- Java并发显式锁和显式条件队列
一 显式锁 在类中利用synchronized修饰的方法或者this代码块,均使用的是类的实例锁或者类的锁.这些锁都称为内置锁. 可以利用显式锁进行协调对象的访问.即ReentrantLock.这是一 ...