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. ORACLE IN 与NOT IN 的性能区别

    业务问题大概可以这样描述,一个父表,一个子表,查询的结果是找到子表中没有使用父表id的记录,这种情况估计很多系统都会牵涉得到.让我们来举一个例子: 表一: 父表 parent 表二: 子表 child ...

  2. Android中notifyDataSetInvalidated()和notifyDataSetChanged()有什么区别

     看下源码中对于这两个方法   public void notifyDataSetChanged () 该方法内部实现了在每个观察者上面调用onChanged事件.每当发现数据集有改变的情况,或者读取 ...

  3. WC2007 石头剪刀布 数学+最小费用最大流

    题面: 有N个人参加一场比赛,赛程规定任意两个人之间都要进行一场比赛:这样总共有N*(N-1)/2场比赛.比赛已经进行了一部分,我们想知道在极端情况下,比赛结束后最多会发生多少剪刀石头布情况.即给出已 ...

  4. Codeforces Beta Round #1 补题题解

    A Theatre Square(数学) 算出每行能装多少乘以每列能装多少就行 公式 ans=ceil(n/a)+ceil(m/a) 代码 #include <bits/stdc++.h> ...

  5. [LUOGU] P1466 集合 Subset Sums

    题目描述 对于从1到N (1 <= N <= 39) 的连续整数集合,能划分成两个子集合,且保证每个集合的数字和是相等的.举个例子,如果N=3,对于{1,2,3}能划分成两个子集合,每个子 ...

  6. buf.toString()

    buf.toString([encoding[, start[, end]]]) encoding {String} 默认:'utf8' start {Number} 默认:0 end {Number ...

  7. pyton学习之路

    文件操作 打开文件的模式有: r,只读模式(默认). w,只写模式.[不可读:不存在则创建:存在则删除内容:] a,追加模式.[可读:   不存在则创建:存在则只追加内容:] "+" ...

  8. stm8l定时器中的ARPE

    • Auto-reload preload enabled (ARPE bit set in the TIM1_CR1 register). In this mode,when data is wri ...

  9. Inspector's Dilemma(欧拉通路)

    In a country, there are a number of cities. Each pair of city is connected by a highway, bi-directio ...

  10. 什么是CPU密集型、IO密集型?(转发)

    CPU密集型(CPU-bound) CPU密集型也叫计算密集型,指的是系统的硬盘.内存性能相对CPU要好很多,此时,系统运作大部分的状况是CPU Loading 100%,CPU要读/写I/O(硬盘/ ...