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. 解决mysql时区问题以及SSL问题

    看了下网上的教程,觉得都太麻烦啦,这里推荐个简单的! 解决时区问题 只需要加上serverTimezone=UTC即可,如下: spring.datasource.url=jdbc:mysql://1 ...

  2. Linux命令整理(2018/9/9-2018/9/15)

    根据本周的Linux学习进度,整理了部分Linux知识及常用命令,待完善…… 1.显示默认启动方式(默认启动目标): systemctl get-default 2.设置默认启动方式(默认启动目标): ...

  3. LeetCode (45) Jump Game II

    题目 Given an array of non-negative integers, you are initially positioned at the first index of the a ...

  4. 第七章习题G题

    题意 给出如图案例,要你从某一点开始走,一直走到极限(即无法再进行扩展),这时你走过的点会连成一个数,不同的走法当然会有不同的数,要求是输出最大的数(注意每个方块走过一次就不能再走) 思路 •1.枚举 ...

  5. 精帖转载(关于stock problem)

    Note: this is a repost(重新投寄) of my original post here with updated solutions(解决方案) for this problem ...

  6. 3.2.8 sed 的运作

        sed 的工作方式相当直接.命令行上的每个文件会依次打开与读取.如果没有文件,则使用标准输入,文件名“-”(单个破折号)可用于表示标准输入.       [many@avention Desk ...

  7. Python安装配置

    Python下载 官网下载地址:https://www.python.org/downloads/windows/ 下载安装包: python-3.5.0-amd64(64位).exe python- ...

  8. Linux下汇编语言学习笔记56 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  9. 03-js变量强制转换

    <html> <head> <title>js中的变量强转</title> <meta charset="UTF-8"/> ...

  10. Redis官方文档资源

    官方文档: 如果要深入研究时,官方提供的文档是最权威的. 英文: https://redis.io/documentation 中文: http://www.redis.cn/documentatio ...