Go - Struct
定义
go 语言中的struct与c的很相似,此外,go没有Class,也没有继承。
stuct的格式为:type <name> struct{}
package main import (
"fmt"
) type person struct {
Name string
Age int
} func main() {
p := person{
Name: "Tony",
Age: ,
}
fmt.Println(p)
}
//output
{Tony 23}
Struct是值类型
package main import (
"fmt"
) type person struct {
Name string
Age int
} func ChangeAge(per person) {
per.Age =
fmt.Printf("Call 'Change Age' function, new age is %d \n", per.Age)
} func main() {
p := person{
Name: "Tony",
Age: ,
}
fmt.Println(p)
ChangeAge(p)
fmt.Println(p)
} //output
{Tony }
Call 'Change Age' function, new age is
{Tony }
我们可以看到,age属性只在func内部被修改,因此可以确定struct是值类型(传递给函数的参数为值的一个copy)
如何传递引用?
我们可以将函数的参数类型定义称为“一个指针”,即可
package main import (
"fmt"
) type person struct {
Name string
Age int
} func ChangeAge(per *person) {
per.Age =
fmt.Printf("Call 'Change Age' function, new age is %d \n", per.Age)
} func main() {
p := person{
Name: "Tony",
Age: ,
}
fmt.Println(p)
ChangeAge(&p)
fmt.Println(p)
} //output
{Tony }
Call 'Change Age' function, new age is
{Tony }
struct中的匿名字段
go 语言中,支持在struct中省略字段的名称,只保留其类型(匿名字段)
package main import (
"fmt"
) type person struct {
string
int
} func main() {
p := person{
"Bob",
,
}
fmt.Println(p)
} // output
{Bob }
匿名结构
go语言中,也支持定义匿名结构。
package main import (
"fmt"
) func main() {
p := struct {
Name string
Age int
Sex string
}{
Name: "Joe",
Age: ,
Sex: "female",
}
fmt.Println(p)
} //output
{Joe female}
使用嵌入字段来“模拟”继承关系
package main import (
"fmt"
) type person struct {
Sex string
} type teacher struct {
person
Name string
Age int
} func main() {
t := teacher{
person: person{Sex: "feamle"},
Name: "Jill",
Age: ,
}
fmt.Println(t) t.Age =
t.Name = "Criss"
t.person.Sex = "male"
fmt.Println(t)
} //output
{{feamle} Jill }
{{male} Criss }
Go - Struct的更多相关文章
- 使用struct处理二进制
有的时候需要用python处理二进制数据,比如,存取文件.socket操作时.这时候,可以使用python的struct模块来完成. struct模块中最重要的三个函数是pack(), unpack( ...
- golang struct扩展函数参数命名警告
今天在使用VSCode编写golang代码时,定义一个struct,扩展几个方法,如下: package storage import ( "fmt" "github.c ...
- go-使用 unsafe 修改 struct 中的 field 的值
以下是方法,不要纠结原理,等东西积累多了,你才有能力纠结原理: 首先,你需要有一个这样的函数,这是在 nsq 的源码里直接抄过来的: func unsafeValueOf(val reflect.Va ...
- C语言中struct位域的定义和使用
位域的定义和使用 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位.例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可.为了节省存储空间,并使处理简便,C语言又 ...
- C# Struct结构体里数组长度的指定
typedef struct Point{ unsigned short x; unsigned short y; }mPoint;//点坐标 typedef struct Line{ mPoint ...
- C 语言Struct 实现运行类型识别 RTTI
通过RTTI,能够通过基类的指针或引用来检索其所指对象的实际类型.c++通过下面两个操作符提供RTTI. (1)typeid:返回指针或引用所指对象的实际类型. (2)dynamic_cast: ...
- VC++ : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall std::basic_string<wchar_t,struct std::char_traits<wchar_t>
最近学习Google Breakpad,将其用在了自己的项目中,编译的版本为VS2010,没有什么问题.但是为了和之前的程序兼容,需要使用VS2008版本的程序,于是又编译了VS2008版本的代码,但 ...
- 字节流与数据类型的相互转换---使用struct模块
字节流与数据类型的相互转换---使用struct模块 http://blog.csdn.net/Sunboy_2050/article/details/5974029 Python是一门非常简洁的语言 ...
- 窥探Swift之别具一格的Struct和Class
说到结构体和类,还是那句话,只要是接触过编程的小伙伴们对这两者并不陌生.但在Swift中的Struct和Class也有着令人眼前一亮的特性.Struct的功能变得更为强大,Class变的更为灵活.St ...
- struct 大小计算
结构体是一种复合数据类型,通常编译器会自动的进行其成员变量的对齐,已提高数据存取的效率.在默认情况下,编译器为结构体的成员按照自然对齐(natural alignment)条方式分配存储空间,各个成员 ...
随机推荐
- 关于ng路由的传参问题(传递一个,多个参数)
在ng的页面条转传参数的方法,ui-sref,$state Ui-sref:用于html页面进行单页面的跳转 $state:用于js代码中跳转 重点:明确传递方,接受方 [传递单个参数] 对于传递方: ...
- BloomFilter算法
Bloom filter 是由 Howard Bloom 在 1970 年提出的二进制向量数据结构,它具有很好的空间和时间效率,被用来检测一个元素是不是集合中的一个成员.如果检测结果为是,该元素不一定 ...
- JavaScript高级程序设计---学习笔记(四)
1.全局变量不能通过delete操作符删除,而直接在window对象上定义的属性可以. var age = 29; window.color = "red"; delete age ...
- 1101: 零起点学算法08——简单的输入和计算(a+b)
1101: 零起点学算法08--简单的输入和计算(a+b) Time Limit: 1 Sec Memory Limit: 128 MB 64bit IO Format: %lldSubmitt ...
- Linux 安装SVN服务器 (转)
一. SVN 简介 Subversion(SVN) 是一个开源的版本控制系統, 也就是说 Subversion 管理着随时间改变的数据. 这些数据放置在一个中央资料档案库 (repository) 中 ...
- asp.net core 编译mvc,routing,security源代码进行本地调试
因为各种原因,需要查看asp.net core mvc的源代码来理解运行机制等等,虽说源代码查看已经能很好的理解了.但是能够直接调试还是最直观的.所有就有了本次尝试. 因调试设置源代码调试太辍笔,所以 ...
- 卷积神经网络CNN与深度学习常用框架的介绍与使用
一.神经网络为什么比传统的分类器好 1.传统的分类器有 LR(逻辑斯特回归) 或者 linear SVM ,多用来做线性分割,假如所有的样本可以看做一个个点,如下图,有蓝色的点和绿色的点,传统的分类器 ...
- 生产环境-jvm内存溢出-jprofile问题排查
首先线上开启了dump的参数 dump的内容有2G,先进行压缩打包,传输至本地(scp) tar -czvf dump.tar java_pid4824.hprof 使用Jprofile打开dump ...
- PHP命名空间理解
这玩意就是路径! 这玩意就是路径! 这玩意就是路径! 这玩意就是路径! 这玩意就是路径! use 就是声明要用某个路径的文件(类) 再有namespace的情况下,就类似于已经在一个路径里了 这个时候 ...
- Java中四种遍历List的方法
package com.ietree.basic.collection.loop; import java.util.ArrayList; import java.util.Iterator; imp ...