ex1

  1. /*
  2. https://golangbot.com/structs/
  3. struct 结构
  4. 结构就是一组字段。
  5. */
  6. package main
  7. import "fmt"
  8. // 声明一个结构
  9. type Employee struct {
  10. firstName string
  11. lastName string
  12. age int
  13. }
  14. //// 同类型简化声明
  15. //type Employee struct {
  16. // firstName, lastName string
  17. // age, salary int
  18. //}
  19. func main() {
  20. // 匿名结构, 不给结构名字
  21. var employee struct {
  22. firstName, lastName string
  23. age int
  24. }
  25. employee.age = 33
  26. fmt.Println(employee)
  27. // 结构初始化为零値
  28. fmt.Println("Employee:", Employee{})
  29. }

ex2

  1. // 创建命名结构
  2. package main
  3. import (
  4. "fmt"
  5. )
  6. type Employee struct {
  7. firstName, lastName string
  8. age, salary int
  9. }
  10. func main() {
  11. //使用字段名字创建结构
  12. emp1 := Employee{
  13. firstName: "Sam",
  14. age: 25,
  15. salary: 500,
  16. lastName: "Anderson",
  17. }
  18. //创建结构不使用字段名字
  19. emp2 := Employee{"Thomas", "Paul", 29, 800}
  20. fmt.Println("Employee 1", emp1)
  21. fmt.Println("Employee 2", emp2)
  22. }

ex3

  1. // 创建匿名结构
  2. package main
  3. import (
  4. "fmt"
  5. )
  6. func main() {
  7. emp3 := struct { // 这里定义
  8. firstName, lastName string
  9. age, salary int
  10. }{ // 这里初始化
  11. firstName: "Andreah",
  12. lastName: "Nikola",
  13. age: 31,
  14. salary: 5000,
  15. }
  16. fmt.Println("Employee 3", emp3)
  17. }

ex4

  1. // 结构字段访问
  2. package main
  3. import (
  4. "fmt"
  5. )
  6. type Employee struct {
  7. firstName, lastName string
  8. age, salary int
  9. }
  10. func main() {
  11. emp6 := Employee{"Sam", "Anderson", 55, 6000}
  12. fmt.Println("First Name:", emp6.firstName)
  13. fmt.Println("Last Name:", emp6.lastName)
  14. fmt.Println("Age:", emp6.age)
  15. fmt.Printf("Salary: $%d", emp6.salary)
  16. fmt.Println()
  17. var emp7 Employee
  18. emp7.firstName = "Jack"
  19. emp7.lastName = "Adams"
  20. fmt.Println("Employee 7:", emp7)
  21. }

ex5

  1. // 结构指针
  2. package main
  3. import (
  4. "fmt"
  5. )
  6. type Employee struct {
  7. firstName, lastName string
  8. age, salary int
  9. }
  10. func main() {
  11. // 这里emp8就是一个结构指针
  12. emp8 := &Employee{"Sam", "Anderson", 55, 6000}
  13. fmt.Println("First Name:", (*emp8).firstName) // 通过指针访问结构字段
  14. fmt.Println("Age:", (*emp8).age)
  15. // golang提供另一种可选方法来访问结构字段
  16. fmt.Println("First Name:", emp8.firstName)
  17. fmt.Println("Age:", emp8.age)
  18. }

ex6

  1. // 结构匿名字段
  2. package main
  3. import (
  4. "fmt"
  5. )
  6. // 定义的结构, 包含有匿名字段
  7. type Person struct {
  8. string
  9. int
  10. }
  11. func main() {
  12. // 带匿名字段的结构的实例化
  13. p1 := Person{"Naveen", 50}
  14. fmt.Println(p1)
  15. // 尽管匿名字段没有名字, 它的缺省名字是类型名字
  16. p1.string = "naveen_new"
  17. p1.int = 100
  18. fmt.Println(p1)
  19. }

ex7

  1. // 结构嵌套
  2. package main
  3. import (
  4. "fmt"
  5. )
  6. type Address struct {
  7. city, state string
  8. }
  9. type Person struct {
  10. name string
  11. age int
  12. address Address
  13. }
  14. func main() {
  15. var p Person
  16. p.name = "Naveen"
  17. p.age = 50
  18. p.address = Address {
  19. city: "Chicago",
  20. state: "Illinois",
  21. }
  22. fmt.Println("Name:", p.name)
  23. fmt.Println("Age:",p.age)
  24. fmt.Println("City:",p.address.city)
  25. fmt.Println("State:",p.address.state)
  26. }

ex8

  1. // 结构提升字段
  2. package main
  3. import (
  4. "fmt"
  5. )
  6. type Address struct {
  7. city, state string
  8. }
  9. type Person struct {
  10. name string
  11. age int
  12. Address // 当结构中, 存在一个匿名的结构型字段。 我们把这个字段叫提升字段
  13. }
  14. func main() {
  15. var p Person
  16. p.name = "Naveen"
  17. p.age = 50
  18. p.Address = Address{
  19. city: "Chicago",
  20. state: "Illinois",
  21. }
  22. fmt.Println("Name:", p.name)
  23. fmt.Println("Age:", p.age)
  24. fmt.Println("City:", p.city) //这个字段,直接提升到上一级,可以直接访问
  25. fmt.Println("State:", p.state) //这个字段,直接提升到上一级,可以直接访问
  26. fmt.Println("City:", p.Address.city)
  27. fmt.Println("State:", p.Address.state)
  28. }

ex9

  1. // 结构导出<即外部可访问性>
  2. package main
  3. import (
  4. "fmt"
  5. )
  6. // 当前结构首字母大写, 则外部包可以访问
  7. type Address struct {
  8. // 字段同理
  9. City, state string
  10. }
  11. type Person struct {
  12. name string
  13. age int
  14. Address // 当结构中, 存在一个匿名的结构型字段。 我们把这个字段叫提升字段
  15. }
  16. func main() {
  17. var p Person
  18. p.name = "Naveen"
  19. p.age = 50
  20. p.Address = Address{
  21. City: "Chicago",
  22. state: "Illinois",
  23. }
  24. fmt.Println(p)
  25. }

ex10

  1. // 结构相等
  2. // 结构是值类型,可以直接比较(仅当他们字段可以比较时)
  3. package main
  4. import (
  5. "fmt"
  6. )
  7. type name struct {
  8. firstName string
  9. lastName string
  10. }
  11. type image struct {
  12. data map[int]int // 这个字段是不可比较的
  13. }
  14. func main() {
  15. name1 := name{"Steve", "Jobs"}
  16. name2 := name{"Steve", "Jobs"}
  17. if name1 == name2 {
  18. fmt.Println("name1 and name2 are equal")
  19. } else {
  20. fmt.Println("name1 and name2 are not equal")
  21. }
  22. name3 := name{firstName:"Steve", lastName:"Jobs"}
  23. name4 := name{}
  24. name4.firstName = "Steve"
  25. if name3 == name4 {
  26. fmt.Println("name3 and name4 are equal")
  27. } else {
  28. fmt.Println("name3 and name4 are not equal")
  29. }
  30. // 不可比较情况
  31. //image1 := image{data: map[int]int{
  32. // 0: 155,
  33. //}}
  34. //image2 := image{data: map[int]int{
  35. // 0: 155,
  36. //}}
  37. //// 这里直接报错
  38. //if image1 == image2 {
  39. // fmt.Println("image1 and image2 are equal")
  40. //}
  41. }

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. 利用Python进行数据分析(第二版)电子版书籍分享

    资料下载地址: 链接:https://pan.baidu.com/s/1y1C0bJPkSn7Sv6Eq9G5_Ug 提取码:vscu <利用Python进行数据分析(第二版)>高清中文版 ...

  2. thymeleaf下拉框从后台动态获取集合数据并回显选中

    今天遇到从后台集合中取出对象在前台页面下拉列表展示: <select name="signature" lay-search="" class=" ...

  3. Json 数组传值

    1. var _content = {}; _content[_title] = _oldValue + ' -- > ' + statusVal; 2. var eventData = { T ...

  4. Ubuntu gitlab安装文档及邮件通知提醒配置

    1.安装依赖包,运行命令 sudo apt-get install curl openssh-server ca-certificates postfix 2.由于gitlab官方源可能被“墙”,首先 ...

  5. iOS 底层解析weak的实现原理(包含weak对象的初始化,引用,释放的分析)

    原文 很少有人知道weak表其实是一个hash(哈希)表,Key是所指对象的地址,Value是weak指针的地址数组.更多人的人只是知道weak是弱引用,所引用对象的计数器不会加一,并在引用对象被释放 ...

  6. Python3浮点型(float)运算结果不正确处理办法

    一.问题说明 以前对浮点数运行没有没有太在意.昨天同事要求把百分比结果保存到文件上,然后就以保存1位小数的形式给他保存了. 但是今天同事运行时问能不能统一以一位小数的形式保存,当时觉得很奇怪昨天就是以 ...

  7. keras-yolo3-master

    logs/000/trained_weights_final.h5 放置训练完的权重 keras-yolo3-master Keras/Tensorflow+python+yolo3训练自己的数据集 ...

  8. Java数据库连接池详解

    http://www.javaweb1024.com/java/JavaWebzhongji/2015/06/01/736.html 对于共享资源,有一个很著名的设计模式:资源池(Resource P ...

  9. maven项目的配置

    软件151  王帅 1.增加web.xml Maven项目最重要的配置文件是pom.xml,pom是“项目对象模型”的意思.现在pom.xml中有一个错误,提示缺少web.xml: 展开目录src—m ...

  10. sql排列组合

    一个表中4条记录,如何查询所有可能组成的结果. 例如: 1  2  3  4 四条记录,最后组成(12),(13),(14),(23),(24),(34) 最后sql如下: SELECT a.name ...