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)条方式分配存储空间,各个成员 ...
随机推荐
- 庆祝POPTEST签约企业培训
庆祝POPTEST签约企业培训 POPTEST与众多培训企业进行技术PK,由于企业认可POPTEST的技术实力,从众多竞争对手中脱颖而出,成功中标清华控股子公司性能测试培训.
- js对象个人理解及记录
什么是对象 对象的定义是:无序属性的集合,其属性可以包括基本值.对象或函数. var car = {}; //比如我们拿一块铁造了一辆车,这的名字叫car /建一个空对象 car.length = ...
- Java事物基础总结
1.什么是事物? 事物是逻辑上的的一种操作,这个操作过程中的每一个元素要么全部成功,要么全部失败.例如,银行转账过程视为一个事物,转出过程和转入过程要求全部成功或全部失败,通过提交事物或者回滚事物实现 ...
- java复习(4)---数字处理类
java本身自带一些封装好的类方便数字问题的处理,review下方便以后使用 DecimalFormat类 可格式化数字格式,控制输出格式 Math类 提供三角函数.指数函数.取整函数.最大最小函数. ...
- 【转载】static关键字详解
上一篇博客中,因为一个static关键字没有设置好,导致浪费了大量的时间来寻找程序的错误,归根结底,就是大一的时候c语言没有学好. 现在总算知道了,你现在所学的每一个知识点在不就的以后可能及时你的救命 ...
- React-Native 之 redux 与 react-redux
前言 本文 有配套视频,可以酌情观看. 文中内容因各人理解不同,可能会有所偏差,欢迎朋友们联系我讨论. 文中所有内容仅供学习交流之用,不可用于商业用途,如因此引起的相关法律法规责任,与我无关,如文中内 ...
- 一、AspNet Core通过控制台编译程序的基本指令:
1.先创建文件夹 mkdir "文件夹"2.在对应的文件夹里边 用 dotnet new 命令创建了Program.cs和project.json俩个文件3.使用 dotnet r ...
- Spring+SpringMVC+Mybaties整合之配置文件如何配置及内容解释--可直接拷贝使用--不定时更改之2017/4/27
以下配置可直接使用,只需更改包名. 关于内部标签的解释及用法,都以注解形式在代码内部说明.个人原创,转载需注明出处. 1,web.xml.添加jar包后首先需要配置WEB-INF下的web.xml文件 ...
- JQuery 中关于插入新元素的方法
关于JQuery插入新内容的方法: append() - 在被选元素的结尾插入内容 prepend() - 在被选元素的开头插入内容 after() - 在被选元素之后插入内容 before() - ...
- Redis 基本安全规范文档
温馨提示:我在一家手游的公司工作,因为经常用到redis,特为此整理文档(借鉴过大神的文章): 一.什么是redis(出自百度百科)? redis是一个key-value存储系统.和Memcached ...