ex1

/*
https://golangbot.com/structs/
struct 结构
结构就是一组字段。
*/ package main import "fmt" // 声明一个结构
type Employee struct {
firstName string
lastName string
age int
}
//// 同类型简化声明
//type Employee struct {
// firstName, lastName string
// age, salary int
//} func main() { // 匿名结构, 不给结构名字
var employee struct {
firstName, lastName string
age int
}
employee.age = 33
fmt.Println(employee) // 结构初始化为零値
fmt.Println("Employee:", Employee{})
}

ex2

// 创建命名结构
package main import (
"fmt"
) type Employee struct {
firstName, lastName string
age, salary int
} func main() { //使用字段名字创建结构
emp1 := Employee{
firstName: "Sam",
age: 25,
salary: 500,
lastName: "Anderson",
} //创建结构不使用字段名字
emp2 := Employee{"Thomas", "Paul", 29, 800} fmt.Println("Employee 1", emp1)
fmt.Println("Employee 2", emp2)
}

ex3

// 创建匿名结构
package main import (
"fmt"
) func main() {
emp3 := struct { // 这里定义
firstName, lastName string
age, salary int
}{ // 这里初始化
firstName: "Andreah",
lastName: "Nikola",
age: 31,
salary: 5000,
} fmt.Println("Employee 3", emp3)
}

ex4

// 结构字段访问
package main import (
"fmt"
) type Employee struct {
firstName, lastName string
age, salary int
} func main() {
emp6 := Employee{"Sam", "Anderson", 55, 6000}
fmt.Println("First Name:", emp6.firstName)
fmt.Println("Last Name:", emp6.lastName)
fmt.Println("Age:", emp6.age)
fmt.Printf("Salary: $%d", emp6.salary)
fmt.Println()
var emp7 Employee
emp7.firstName = "Jack"
emp7.lastName = "Adams"
fmt.Println("Employee 7:", emp7)
}

ex5

// 结构指针
package main import (
"fmt"
) type Employee struct {
firstName, lastName string
age, salary int
} func main() {
// 这里emp8就是一个结构指针
emp8 := &Employee{"Sam", "Anderson", 55, 6000}
fmt.Println("First Name:", (*emp8).firstName) // 通过指针访问结构字段
fmt.Println("Age:", (*emp8).age) // golang提供另一种可选方法来访问结构字段
fmt.Println("First Name:", emp8.firstName)
fmt.Println("Age:", emp8.age)
}

ex6

// 结构匿名字段
package main import (
"fmt"
) // 定义的结构, 包含有匿名字段
type Person struct {
string
int
} func main() {
// 带匿名字段的结构的实例化
p1 := Person{"Naveen", 50}
fmt.Println(p1)
// 尽管匿名字段没有名字, 它的缺省名字是类型名字
p1.string = "naveen_new"
p1.int = 100
fmt.Println(p1)
}

ex7

// 结构嵌套
package main import (
"fmt"
) type Address struct {
city, state string
}
type Person struct {
name string
age int
address Address
} func main() {
var p Person
p.name = "Naveen"
p.age = 50
p.address = Address {
city: "Chicago",
state: "Illinois",
}
fmt.Println("Name:", p.name)
fmt.Println("Age:",p.age)
fmt.Println("City:",p.address.city)
fmt.Println("State:",p.address.state)
}

ex8

// 结构提升字段
package main import (
"fmt"
) type Address struct {
city, state string
}
type Person struct {
name string
age int
Address // 当结构中, 存在一个匿名的结构型字段。 我们把这个字段叫提升字段
} func main() {
var p Person
p.name = "Naveen"
p.age = 50
p.Address = Address{
city: "Chicago",
state: "Illinois",
}
fmt.Println("Name:", p.name)
fmt.Println("Age:", p.age)
fmt.Println("City:", p.city) //这个字段,直接提升到上一级,可以直接访问
fmt.Println("State:", p.state) //这个字段,直接提升到上一级,可以直接访问
fmt.Println("City:", p.Address.city)
fmt.Println("State:", p.Address.state)
}

ex9

// 结构导出<即外部可访问性>
package main import (
"fmt"
) // 当前结构首字母大写, 则外部包可以访问
type Address struct {
// 字段同理
City, state string
}
type Person struct {
name string
age int
Address // 当结构中, 存在一个匿名的结构型字段。 我们把这个字段叫提升字段
} func main() {
var p Person
p.name = "Naveen"
p.age = 50
p.Address = Address{
City: "Chicago",
state: "Illinois",
}
fmt.Println(p) }

ex10

// 结构相等
// 结构是值类型,可以直接比较(仅当他们字段可以比较时)
package main import (
"fmt"
) type name struct {
firstName string
lastName string
} type image struct {
data map[int]int // 这个字段是不可比较的
} func main() {
name1 := name{"Steve", "Jobs"}
name2 := name{"Steve", "Jobs"}
if name1 == name2 {
fmt.Println("name1 and name2 are equal")
} else {
fmt.Println("name1 and name2 are not equal")
} name3 := name{firstName:"Steve", lastName:"Jobs"}
name4 := name{}
name4.firstName = "Steve"
if name3 == name4 {
fmt.Println("name3 and name4 are equal")
} else {
fmt.Println("name3 and name4 are not equal")
} // 不可比较情况
//image1 := image{data: map[int]int{
// 0: 155,
//}}
//image2 := image{data: map[int]int{
// 0: 155,
//}}
//// 这里直接报错
//if image1 == image2 {
// fmt.Println("image1 and image2 are equal")
//}
}

golang struct的更多相关文章

  1. Golang Struct 声明和使用

    Golang Struct 声明和使用 Go可以声明自定义的数据类型,组合一个或多个类型,可以包含内置类型和用户自定义的类型,可以像内置类型一样使用struct类型 Struct 声明 具体的语法 t ...

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

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

  3. golang struct tag

    golang可以在struct中的每个字段,写上一个tag.这个tag可以通过反射的机制获取到,最常用的场景就是json序列化和反序列化 package main import ( "enc ...

  4. [Golang] struct Tag说明

    在处理json格式字符串的时候,经常会看到声明struct结构的时候,属性的右侧还有小米点括起来的内容.形如 type User struct { UserId int `json:"use ...

  5. golang struct组合,转型问题请教

    type Action interface { OnHurt2(other Action) GetDamage() int } type Base struct { atk, hp int } fun ...

  6. golang struct 转map 及 map[string]*Struct 初始化和遍历

    package main import ( "encoding/json" "errors" "fmt" "reflect&quo ...

  7. 【GoLang】GoLang struct 使用

    代码示例: package main import "fmt" type Human struct { name string age int weight int } type ...

  8. Golang struct结构

    结构struct Go中的struct与C中的struct非常相似,并且Go没有class,代替了class的位置,但并没有代替class的功能 使用type struct{} 定义结构,名称遵循可见 ...

  9. golang struct 和 byte互转

    相比于encoding, 使用unsafe性能更高 type MyStruct struct { A int B int } var sizeOfMyStruct = int(unsafe.Sizeo ...

随机推荐

  1. 在Windows Server 2012下安装 php memcache模块

    一.环境描述 操作系统:Windows Server 2012 R2 Datacenter Web服务提供软件:Microsoft IIS 8.5.9600.16384 IIS调用PHP方法:增加处理 ...

  2. [luogu P3806] 【模板】点分治1

    [luogu P3806] [模板]点分治1 题目背景 感谢hzwer的点分治互测. 题目描述 给定一棵有n个点的树 询问树上距离为k的点对是否存在. 输入输出格式 输入格式: n,m 接下来n-1条 ...

  3. 记一次阿里云ECS服务器图片资源迁移至 阿里云 oss

    系统用户上传的图片资源放在ECS服务器,图片要做cdn加速,图片量越来越大(第一年200G,还在用户再增加图片量疯狂增长)备份是个问题. 决定迁移至 oss.前端直接上传oss 后台做签名,回调入库图 ...

  4. Windows编译安装使用cephfs客户端

    本文介绍如何将cephfs映射到windows的一个盘上,以磁盘映射的方式访问cephfs. 1.下载必要安装包 tdm-gcc:(安装时选32位)https://sourceforge.net/pr ...

  5. Python3+Scapy安装使用教程

    一.说明 之前写DoS程序的时候(见"拒绝服务(DoS)理解.防御与实现"),数据包完全是自己构造的,这其中的难处一是要清楚各层协议的字段.字段长度.字段是数值还是字符.大头还是小 ...

  6. Linux Shell基线配置高级操作

    一.输入解析类 1.1 echo解析tab和换行 问题描述:echo默认是原样输出字符串,并不解析\t和\n等反斜杠字符,如下图所示.我们希望echo能解析\t和\n等字符. 处理办法:可以使用-e指 ...

  7. 微信小程序实战练习(仿五洲到家微信版)

    github地址(欢迎star):https://github.com/xiaobinwu/dj 版本:0.15.152900(暂未升级原因:升级后需要图片无法本地引用,必须使用image或是远程路径 ...

  8. FastDFS 与 Nginx 实现分布式图片服务器

    FastDFS 与 Nginx 实现分布式图片服务器 本人的 Ubuntu18.04 用户名为 jj 点我下载所有所需的压缩包文件 一.FastDFS安装 1.安装 fastdfs 依赖包 ① 解压 ...

  9. UML之顺序图

    一 定义 顺序图是将交互关系表示为一个二维图.纵向是时间轴(生命线),时间沿竖线向下延伸.横向轴代表了在协作中各独立对象的类元角色.类元角色用生命线表示.当对象存在时,角色用一条虚线表示,当对象的过程 ...

  10. OSI,TCP/IP,五层协议的体系结构,以及各层协议

    OSI分层 (7层):物理层.数据链路层.网络层.传输层.会话层.表示层.应用层. TCP/IP分层(4层):网络接口层. 网际层.运输层. 应用层. 五层协议 (5层):物理层.数据链路层.网络层. ...