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)条方式分配存储空间,各个成员 ...
随机推荐
- 修改数据库用户名--CMD环境执行有效
--CMD环境执行有效 --修改数据库用户名 select * from user$ where name='aa'; update user$ set name='bb' where name ...
- iOS 检测文本中的 URL、电话号码等信息
iOS 检测文本中的 URL.电话号码等信息 要检测文本中的 URL.电话号码等,除了用正则表达式,还可以用 NSDataDetector. 用 NSTextCheckingResult.Checki ...
- Java中log4j的使用
前言 距离上一篇文章又过去好长时间了,这段时间一直忙于工作,已经从net彻底转向Java了.工作也慢慢的步入正轨了,自己独自完成了一个小项目,不过工作中遇到了一些问题,还是得到了同学和同事的帮助.本来 ...
- jmeter 使用jmeter 录制 手机APP脚本
1.打开jmeter.鼠标右击工作台.添加HTTP代理服务器 2.设置配置jmeter.手机无线网络.(目标控制器也可以选择加到线程组中) 3.添加查看结果树 4.启动完成后.操作手机.jmeter就 ...
- 20170410 --- Linux备课资料 --- vim的使用
首先我们要了解一下什么是vim? -----> vim是从vi发展出来的一个文本编辑器. 那问题又来了,什么是vi呢? ------> vi 是Unix like (可以理解为linux) ...
- oracle分区表的建立方法(包含已经存在的表要分区)分享,非常好
非原创 Oracle提供了分区技术以支持VLDB(Very Large DataBase).分区表通过对分区列的判断,把分区列不同的记录,放到不同的分区中.分区完全对应用透明. Oracle的分区表可 ...
- 如何禁止火狐onblur时alert()产生类似选中的拖蓝效果
输入框中onblur 然后alert();会产生 复制 选中的效果的效果( 拖蓝) onblur="aa()"function aa(){ alert("--" ...
- 【HDOJ 1215】七夕节
七夕节 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submissio ...
- kafka入门
1.Kafka独特设计在什么地方?2.Kafka如何搭建及创建topic.发送消息.消费消息?3.如何书写Kafka程序?4.数据传输的事务定义有哪三种?5.Kafka判断一个节点是否活着有哪两个条件 ...
- redis 数据库实现
redis 数据库实现 数据库的 server 端和 client 端 server 端 数据库在 server 端的存储 // redisServer 结构 struct redisServer { ...