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的更多相关文章

  1. 使用struct处理二进制

    有的时候需要用python处理二进制数据,比如,存取文件.socket操作时.这时候,可以使用python的struct模块来完成. struct模块中最重要的三个函数是pack(), unpack( ...

  2. golang struct扩展函数参数命名警告

    今天在使用VSCode编写golang代码时,定义一个struct,扩展几个方法,如下: package storage import ( "fmt" "github.c ...

  3. go-使用 unsafe 修改 struct 中的 field 的值

    以下是方法,不要纠结原理,等东西积累多了,你才有能力纠结原理: 首先,你需要有一个这样的函数,这是在 nsq 的源码里直接抄过来的: func unsafeValueOf(val reflect.Va ...

  4. C语言中struct位域的定义和使用

    位域的定义和使用 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位.例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可.为了节省存储空间,并使处理简便,C语言又 ...

  5. C# Struct结构体里数组长度的指定

    typedef struct Point{ unsigned short x; unsigned short y; }mPoint;//点坐标 typedef struct Line{ mPoint ...

  6. C 语言Struct 实现运行类型识别 RTTI

    通过RTTI,能够通过基类的指针或引用来检索其所指对象的实际类型.c++通过下面两个操作符提供RTTI. (1)typeid:返回指针或引用所指对象的实际类型.    (2)dynamic_cast: ...

  7. 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版本的代码,但 ...

  8. 字节流与数据类型的相互转换---使用struct模块

    字节流与数据类型的相互转换---使用struct模块 http://blog.csdn.net/Sunboy_2050/article/details/5974029 Python是一门非常简洁的语言 ...

  9. 窥探Swift之别具一格的Struct和Class

    说到结构体和类,还是那句话,只要是接触过编程的小伙伴们对这两者并不陌生.但在Swift中的Struct和Class也有着令人眼前一亮的特性.Struct的功能变得更为强大,Class变的更为灵活.St ...

  10. struct 大小计算

    结构体是一种复合数据类型,通常编译器会自动的进行其成员变量的对齐,已提高数据存取的效率.在默认情况下,编译器为结构体的成员按照自然对齐(natural alignment)条方式分配存储空间,各个成员 ...

随机推荐

  1. 四种方案解决ScrollView嵌套ListView问题 [复制链接]

    以下文章转自@安卓泡面 在工作中,曾多次碰到ScrollView嵌套ListView的问题,网上的解决方法有很多种,但是杂而不全.我试过很多种方法,它们各有利弊. 在这里我将会从使用ScrollVie ...

  2. h5 中MP3 播放暂停 jq

    <!--音乐--> <div id="music"> <img src="../img/music.gif" class=&quo ...

  3. Go:数组

    package main import "fmt" func main() { // 定义数组的方式 var array1 [3]int array2 := [3]int{} fm ...

  4. 如何自己实现session功能

    session字如其意,它的存在就是为了保持会话状态.PHP中的$_SESSION让我们很方便的使用它,但是如果PHP本身不提供这个功能,我们该如何实现呢?且听我慢慢忽悠. session的实现原理 ...

  5. 监听服务器 重启apache

    import requests import os import time url = 'http://www.ydyigo.com/findPwd.php' def get_server_statu ...

  6. 19-看图理解数据结构与算法系列(Radix树)

    Radix树 Radix树,即基数树,也称压缩前缀树,是一种提供key-value存储查找的数据结构.与Trie不同的是,它对Trie树进行了空间优化,只有一个子节点的中间节点将被压缩.同样的,Rad ...

  7. 九度oj 题目1072:有多少不同的面值组合?(set集合)

    题目1072:有多少不同的面值组合? 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3627 解决:1852 题目描述: 某人有8角的邮票5张,1元的邮票4张,1元8角的邮票6张,用这些邮 ...

  8. node框架express里面静态文件中间件express.static,根据路径名查找文件

    - 是express框架下的一个方法,可以根据请求路径名查找某个文件下文件名字和路径名相同的文件 - 3.X里面有20多个中间件,但是在4.X里面 只保留了express.static - 语法 ex ...

  9. 【CodeChef】KNGHTMOV(方案数DP)

    题意: 考虑一张无限大的方格棋盘.我们有一个“骑士”,它必须从(0,0)格开始,按照如下规则,移动至(X,Y)格:每一步,它只能从(u,v)格移动至(u+Ax,v+Ay)或者(u+Bx,v+By).注 ...

  10. [bzoj4698][Sdoi2008]Sandy的卡片_后缀数组_二分/单调队列_双指针

    Sandy的卡片 bzoj-4698 Sdoi-2008 题目大意:题目链接. 注释:略. 想法: 这个题跟一个Usaco的题特别像.我们把这些串差分 现在我们要求的就是公共子串且出现次数不少于$k$ ...