go10---struct
package main import (
"fmt"
) type test struct{} //空的结构体 type person struct {
name string
age int
} type student struct { //结构体嵌套
name string
age int
contact struct {
phone, city string
num int
}
} type teacher struct { //匿名字段
string
int
} func main() {
a := test{}
fmt.Println(a) //{} p := person{}
fmt.Println(p) //{ 0}
p.name = "joi"
p.age =
fmt.Println(p) //{joi 19}
fmt.Println(p.name) //joi p1 := person{
name: "lll",
age: ,
}
fmt.Println(p1) // {lll 32}
fmt.Println(p1.name) //lll A(p1)
fmt.Println(p1.age) //32,值拷贝,不是引用传递 A1(&p1)
fmt.Println(p1.age) //888,指针传递, p2 := &person{ //p2就是指向结构体的地址了,以后和传递就是指针传递了,
name: "kkk",
age: ,
} A1(p2)
p2.name = "OK" //p2是一个地址,这里不需要用*p2 = "OK"
fmt.Println(p2.name) //OK, b := struct { //匿名结构体
name string
age int
}{
name: "uuu",
age: ,
}
fmt.Println(b) //{uuu 19} //匿名结构体
c := &struct {
name string
age int
}{
name: "eee",
age: ,
}
fmt.Println(c) //&{eee 29} d := student{}
fmt.Println(d) //{ 0 { 0}}
d = student{
name: "dd",
age: ,
}
d.contact.city = "sity"
d.contact.num =
d.contact.phone = "phone" //里面的结构体只能够分部赋值
fmt.Println(d) //{dd 1 {phone sity 9}} e := teacher{"tec", } //依靠顺序传值
fmt.Println(e) //{tec 52}
var e1 teacher
e1 = e
fmt.Println(e1) //{tec 52},结构体可以直接赋值
} func A(per person) {
per.age =
fmt.Println(per.age) //
} func A1(per *person) {
per.age =
fmt.Println(per.age) //
}
package main /*
结构struct Go 中的struct与C中的struct非常相似,并且Go没有class,
struct代替了class的位置但是没有代替class的功能,因为go没有继承的概念
使用 type <Name> struct{} 定义结构,名称遵循可见性规则
支持指向自身的指针类型成员
支持匿名结构,可用作成员或定义成员变量
匿名结构也可以用于map的值
可以使用字面值对结构进行初始化
允许直接通过指针来读写结构成员
相同类型的成员可进行直接拷贝赋值
支持 == 与 !=比较运算符,但不支持 > 或 <
支持匿名字段,本质上是定义了以某个类型名为名称的字段
嵌入结构作为匿名字段看起来像继承,但不是继承
可以使用匿名字段指针 */ import (
"fmt"
) //实现继承,嵌入结构(组合)
type human struct {
sex int
} type teacher struct {
human
name string
age int
} type student struct {
human
name string
age int
} func main() {
a := teacher{name: "teac", age: }
b := student{name: "stud", age: }
fmt.Println(a, b) //{{0} teac 32} {{0} stud 18} a1 := teacher{name: "teac", age: , human: human{sex: }}
b1 := student{name: "stud", age: , human: human{sex: }}
fmt.Println(a1, b1) //{{1} teac 32} {{1} stud 18}
a1.age =
a1.human.sex = //a1.sex = 200也可以,因为human的字段就已经是teacher和student的属性了,
fmt.Println(a1, b1) //{{100} teac 88} {{1} stud 18}
}
go语言没有class,struct就是go语言的class.
go10---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)条方式分配存储空间,各个成员 ...
随机推荐
- mac apache 配置
mac系统自带apache这无疑给广大的开发朋友提供了便利,接下来是针对其中的一些说明 一.自带apache相关命令 1. sudo apachectl start 启动服务,需要权限,就是你计算机的 ...
- 升级openssh踩得坑
升级背景: 项目中使用的系统为CentOS6.8,经过漏洞扫描后发现openssh高危漏洞,具体描述如下:OpenSSH 7.2p2之前版本, sshd/ session.c/ do_setup_en ...
- centos6 文件管理
一.文件属性 权限位: - 表示文件 d 表示目录 l 表示软连接 b 表示接口存储设备文件 c 表示串行端口设备 文件的时间属性 [root@web02 ~]# ll /etc/passwd ### ...
- 2. Java中的垃圾收集 - GC参考手册
标记-清除(Mark and Sweep)是最经典的垃圾收集算法.将理论用于生产实践时, 会有很多需要优化调整的地点, 以适应具体环境.下面通过一个简单的例子, 让我们一步步记录下来, 看看如何才能保 ...
- Far Relative’s Problem (贪心 计算来的最多客人)
Description Famil Door wants to celebrate his birthday with his friends from Far Far Away. He has n ...
- IIS 注册.NET Framework 4.0 命令
cmd执行以下命令 32位Windows:C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i 64位Windows:C ...
- em的理解
em 版本:CSS1 说明: 自己的理解: 注意地方: 浏览器默认大小为16px. 谷歌浏览器最小字体为12px. font-size;有继承性. 判断步骤: []看该元素本身有没有设置字体大小: 有 ...
- jQuery入门--- 非常好
jQuery入门------https://blog.csdn.net/dkh_321/article/details/78093788
- Leetcode 137.只出现一次的数字II
只出现一次的数字II 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? ...
- two strings
A1484. two strings(罗干) 时间限制:1.0s 内存限制:256.0MB [问题描述] 给定两个字符串A和B,有五种操作,操作1为在A串开头添加一个字符,操作2为在A串结尾添加一 ...