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)条方式分配存储空间,各个成员 ...
随机推荐
- js正则表达式,只允许输入纯数字或‘/’
//输入框,限数字和/----需要多个数量询价,请以/分隔 function onlyonce(obj) {//先把非数字的都替换掉,除了数字和.obj.value = obj.value.repla ...
- 启发式合并CodeForces - 1009F
E - Dominant Indices CodeForces - 1009F You are given a rooted undirected tree consisting of nn vert ...
- 零基础入门学习Python(16)--序列!序列!
前言 你可能发现了,小甲鱼把这个列表,元组,字符串放在一起讲是有道理的,它们有许多共同点: 都可以通过索引得到每一个元素 默认索引值总是从0开始 可以通过分片的方法得到一个范围内的元素的集合 有很多共 ...
- centos6 文件管理
一.文件属性 权限位: - 表示文件 d 表示目录 l 表示软连接 b 表示接口存储设备文件 c 表示串行端口设备 文件的时间属性 [root@web02 ~]# ll /etc/passwd ### ...
- WinMain名词解析
WinMain程序名词解析 int WINAPI WinMain(HINSTANCE hInstance ,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nS ...
- 【03】《论道html5》(全)
[03] <论道html5> 共320页. 魔芋:已看完. 读后感:html5各个新特性的介绍.介绍了canvas,web socket,audio,video,web wor ...
- jmeter接口测试实战简例
1.接口需求文档说明 2.打开jmeter,新建线程组,线程组里面默认配置就可以 3.建立http请求,我这里是http请求,所以我选择这个,跟进实际情况 4.post请求说明,post直接加参数和参 ...
- python接口测试之Http请求(三)
python的强大之处在于提供了很多的标准库,这些标准库可以直接调用,本节部分,重点学习和总结在 接口测试中Python的Http请求的库的学习. 首先来看httplib,官方的解释为:本模块定义了类 ...
- git-svn 简易 操作指南
git-svn 简易 操作指南 本文用以为使用svn的用户提供git操作指导,方便使用git管理用户自己的 本地修改 1:下载 库 下载全部历史记录 git svn clone svn://fhnws ...
- hdu 3038带权并查集
#include<stdio.h> #include<string.h> #define N 200100 struct node { int x,count; }pre[N ...