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)条方式分配存储空间,各个成员 ...
随机推荐
- cacheStorage缓存及离线开发
案例地址:https://zhangxinxu.github.io/https-demo/cache/start.html 我们直接看一个例子吧,如下HTML和JS代码: <h3>一些提示 ...
- 1257 背包问题 V3(二分)
1257 背包问题 V3 3 秒 131,072 KB 80 分 5 级题 题意 : 从n个物品中选出k个,使单位体积价值最大 思路: 一开始正面想,试过很多种,排序什么的..总是结果不对,最后想到二 ...
- 简述FTP主动模式与被动模式
1 FTP工作模式 2 不同模式FTP面临的问题 3 主动模式的FTP连接建立连接主要步骤 客户端打开一个随机的端口(端口号大于1024,在这里,我们称它为x),同时一个FTP进程连接至服务器的21号 ...
- Buffer.isBuffer()详解
Buffer.isBuffer(obj) obj {Object} 返回:{Boolean} 如果 obj 是一个 Buffer 则返回 true.
- Memcache 分布式存储 【一致性Hash】crc32
class memcacheHash { private $_node = array(); private $_nodeData = array(); private $_keyNode = 0; ...
- 《机器学习实战》-逻辑(Logistic)回归
目录 Logistic 回归 本章内容 回归算法 Logistic 回归的一般过程 Logistic的优缺点 基于 Logistic 回归和 Sigmoid 函数的分类 Sigmoid 函数 Logi ...
- LeetCode(60) Permutation Sequence
题目 The set [1,2,3,-,n] contains a total of n! unique permutations. By listing and labeling all of th ...
- jquery给span赋值
span是最简单的容器,可以当作一个形式标签,其取值赋值方法有别于一般的页面元素. //赋值 $("#spanid").html(value) //取值 $("#span ...
- 转 POJ分类
OJ上的一些水题(可用来练手和增加自信) (poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094)初期: 一. ...
- P2819 图的m着色问题 洛谷
https://www.luogu.org/problem/show?pid=2819 题目背景 给定无向连通图G和m种不同的颜色.用这些颜色为图G的各顶点着色,每个顶点着一种颜色.如果有一种着色法使 ...