• Go语言基础笔记(二)数组、切片、映射与结构体


    1、数组

    Go的数组与Java的数组基本上相同。

    1. func main() {
    2. makeArray()
    3. }
    4. // 创建并给数组赋值
    5. func makeArray() {
    6. //声明一个长度为2的字符串数组
    7. var sports [2]string
    8. fmt.Println(sports)
    9. //给数组的赋值
    10. sports[0] = "football"
    11. sports[1] = "basketball"
    12. fmt.Println(sports)
    13. }

    打印出来的效果:

    2、切片

     切片可以理解为可以添加值的数组。

    2.1、创建切片并赋值:

    1. func main() {
    2. makeSlice()
    3. }
    4. // 创建切片
    5. func makeSlice() {
    6. //初始化切片
    7. var sports = make([]string, 2)
    8. sports[0] = "football"
    9. sports[1] = "basketball"
    10. fmt.Println(sports)
    11. }

    打印出来的效果:

     2.2、创建切片并通过append插入切片:

    1. func main() {
    2. sports := appendSlice()
    3. fmt.Println(sports)
    4. }
    5. // 创建切片通过append赋值
    6. func appendSlice() []string {
    7. //初始化切片
    8. var sports = make([]string, 0)
    9. //fmt.Println(sports)
    10. //添加元素
    11. sports = append(sports, "football")
    12. sports = append(sports, "basketball")
    13. sports = append(sports, "volleyball", "table-tennis")
    14. return sports
    15. }

    2.3、删除指定位置的元素:

    1. func main() {
    2. sports := appendSlice()
    3. fmt.Println(sports)
    4. fmt.Println(removeSlice(1,sports))
    5. }
    6. // 删除指定位置的元素
    7. /**
    8. delIndex:删除位置
    9. slice:待删除的切片
    10. */
    11. func removeSlice(delIndex int, slice []string) []string {
    12. slice = append(slice[:delIndex], slice[delIndex+1:]...)
    13. return slice
    14. }

    打印出来的效果:

    2.4、拷贝切片,修改拷贝后的切片里的元素,不会影响原来的切片:

    1. func main() {
    2. copySlice()
    3. }
    4. // 切片拷贝
    5. func copySlice() {
    6. sports := make([]string, 2)
    7. sports[0] = "football"
    8. sports[1] = "basketball"
    9. newSports := make([]string, 2)
    10. copy(newSports, sports)
    11. fmt.Println(newSports)
    12. }

     打印出来的效果:

     3、映射

    映射与Java中的map基本相同,以键值对形式存储数据。

    3.1、 创建映射并赋值:

    1. func main() {
    2. makeMap()
    3. }
    4. // 映射,map键值对
    5. func makeMap() {
    6. var players = make(map[string]int)
    7. players["James"] = 6
    8. players["Tatum"] = 0
    9. players["Brown"] = 7
    10. fmt.Println(players["Tatum"])
    11. fmt.Println(players["Brown"])
    12. fmt.Println(players)
    13. }

    打印出来的效果:

    3.2、根据键名删除映射中的元素:

    1. func main() {
    2. deleteMapEle()
    3. }
    4. // 删除映射中的元素
    5. func deleteMapEle() {
    6. var players = make(map[string]int)
    7. players["James"] = 6
    8. players["Tatum"] = 0
    9. players["Brown"] = 7
    10. fmt.Println(players)
    11. delete(players, "James")
    12. fmt.Println(players)
    13. }

    打印出来的效果:

    4、结构体

    结构体类似于Java的对象

     4.1、创建一个结构体: 

    1. // Player 创建一个结构体
    2. //
    3. // type 类型名 struct {
    4. // 字段名 字段类型
    5. // 字段名 字段类型
    6. // …
    7. // }
    8. type Player struct {
    9. Name string
    10. Age string
    11. Height string
    12. }

    4.2、声明结构体的三个方式:

    1. func main() {
    2. newStruct1()
    3. newStruct2()
    4. newStruct3()
    5. }
    6. // 声明结构体1
    7. func newStruct1() {
    8. player := Player{
    9. Name: "Tatum",
    10. Age: "24y",
    11. Height: "2.03m",
    12. }
    13. fmt.Println(player)
    14. fmt.Println(player.Name)
    15. fmt.Println(player.Age)
    16. fmt.Println(player.Height)
    17. }
    18. // 声明结构体2
    19. func newStruct2() {
    20. var player Player
    21. player.Name = "Brown"
    22. player.Age = "25y"
    23. player.Height = "1.98m"
    24. fmt.Println(player)
    25. fmt.Println(player.Name)
    26. fmt.Println(player.Age)
    27. fmt.Println(player.Height)
    28. }
    29. // 声明结构体3
    30. func newStruct3() {
    31. player := new(Player)
    32. player.Name = "Smart"
    33. player.Age = "28y"
    34. player.Height = "1.93m"
    35. fmt.Println(player)
    36. }

    打印出来的效果:

    4.3、修改结构体的值:

    1. func main() {
    2. changeValue()
    3. }
    4. // 修改结构体的值
    5. func changeValue() {
    6. var player Player
    7. player.Name = "Brown"
    8. player.Age = "25y"
    9. player.Height = "1.98m"
    10. fmt.Println(player.Age)
    11. player.Age = "26y"
    12. fmt.Println(player.Age)
    13. }

     打印出来的效果:

    4.4、嵌套结构体:

    1. func main() {
    2. nestingStruct()
    3. }
    4. // 嵌套结构体
    5. func nestingStruct() {
    6. type Team struct {
    7. Name string
    8. Home string
    9. }
    10. type Player struct {
    11. Name string
    12. Age string
    13. Team Team
    14. }
    15. var player Player
    16. player.Name = "Tatum"
    17. player.Age = "24y"
    18. player.Team.Home = "Boston"
    19. player.Team.Name = "Celtics"
    20. fmt.Println(player)
    21. }

     打印出来的效果:

     4.5、比较两个结构体:

    只有两个结构体的所有值相等,才算相等

    1. func main() {
    2. compareStruct()
    3. }
    4. // 比较两个结构体是否相等
    5. func compareStruct() {
    6. var player1 Player
    7. player1.Name = "James"
    8. player1.Age = "38y"
    9. var player2 Player
    10. player2.Name = "James"
    11. player2.Age = "38y"
    12. var player3 Player
    13. player3.Name = "James"
    14. player3.Age = "37y"
    15. if player1 == player2 {
    16. fmt.Println("player1 and player2 are the same")
    17. fmt.Println("player1:", player1)
    18. fmt.Println("player2:", player2)
    19. }
    20. if player1 == player3 {
    21. fmt.Println("player1 and player3 are the same")
    22. } else {
    23. fmt.Println("player1 and player3 are not the same")
    24. }
    25. fmt.Println("player1:", player1)
    26. fmt.Println("player3:", player3)
    27. }

    打印出来的效果:

    4.6、值引用

    值引用不会改变原来结构体的值:

    1. func main() {
    2. valueReference()
    3. }
    4. // 值引用
    5. func valueReference() {
    6. var player1 Player
    7. player1.Name = "James"
    8. player1.Age = "38y"
    9. player2 := player1
    10. player2.Age = "37y"
    11. fmt.Println("player1", player1)
    12. fmt.Println("player2", player2)
    13. }

    打印出来的效果:

    4.7、指针引用

    指针引用会改变原来结构体的值:

    1. func main() {
    2. pointReference()
    3. }
    4. // 指针引用
    5. func pointReference() {
    6. var player1 Player
    7. player1.Name = "James"
    8. player1.Age = "38y"
    9. player2 := &player1
    10. player2.Age = "37y"
    11. fmt.Println("player1", player1)
    12. fmt.Println("player2", player2)
    13. }

     打印出来的效果:

  • 相关阅读:
    竞赛选题 深度学习 python opencv 实现人脸年龄性别识别
    ssh简介以及 windows 安装ssh教程
    spark sql之巧用group by
    SpringEvent事件监听、事件驱动,观察者模式
    Stata 数据处理系列:日期与时间数据
    [ML从入门到入门] 支持向量机:从SVM的推导过程到SMO的收敛性讨论
    [附源码]java毕业设计停车场管理系统
    Java使用FileChannel进行文件拷贝(提升拷贝效率)
    MySQL字符串提取
    【力扣每日一题】2023.9.28 花期内花的数目
  • 原文地址:https://blog.csdn.net/superyu1992/article/details/127565573