main.go 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package main
  2. import "fmt"
  3. func main() {
  4. // 1. 数组:长度固定,所有元素类型相同,索引从 0 开始。
  5. fmt.Println("=== 数组 ===")
  6. var scores [3]int = [3]int{80, 90, 75}
  7. fmt.Printf("成绩:%v,长度:%d\n", scores, len(scores))
  8. fmt.Printf("第一个成绩:%d\n", scores[0])
  9. scores[2] = 85
  10. fmt.Printf("修改后的成绩:%v\n", scores)
  11. // 2. range 遍历数组:得到索引和值。
  12. fmt.Println("\n=== 遍历与求和 ===")
  13. sum := 0
  14. for index, score := range scores {
  15. fmt.Printf("第 %d 个成绩:%d\n", index+1, score)
  16. sum += score
  17. }
  18. average := float64(sum) / float64(len(scores))
  19. fmt.Printf("总分:%d,平均分:%.2f\n", sum, average)
  20. // 3. 切片:类型写作 []int,不指定数组长度。
  21. // append 返回新的切片值,必须接收返回值。
  22. fmt.Println("\n=== 切片与追加 ===")
  23. numbers := []int{10, 20, 30}
  24. numbers = append(numbers, 40, 50)
  25. fmt.Printf("切片:%v,长度:%d\n", numbers, len(numbers))
  26. // 4. 截取切片:左闭右开,包含索引 1,不包含索引 3。
  27. // 子切片和原切片共享底层数组,修改元素可能影响彼此。
  28. fmt.Println("\n=== 截取与共享 ===")
  29. middle := numbers[1:3]
  30. fmt.Printf("numbers[1:3]:%v\n", middle)
  31. middle[0] = 200
  32. fmt.Printf("修改子切片后,原切片:%v\n", numbers)
  33. // 5. 使用 make 和 copy 创建独立副本。
  34. // make([]int, n) 创建长度为 n、元素初值为 0 的切片。
  35. fmt.Println("\n=== 复制切片 ===")
  36. backup := make([]int, len(numbers))
  37. copied := copy(backup, numbers)
  38. backup[0] = 999
  39. fmt.Printf("复制了 %d 个元素,副本:%v\n", copied, backup)
  40. fmt.Printf("原切片保持不变:%v\n", numbers)
  41. // 6. 切片零值是 nil,长度与容量都是 0,可以直接 append。
  42. fmt.Println("\n=== 从空切片开始 ===")
  43. var tasks []string
  44. fmt.Printf("追加前:nil=%t,长度=%d,容量=%d\n", tasks == nil, len(tasks), cap(tasks))
  45. tasks = append(tasks, "复习循环", "学习切片")
  46. for _, task := range tasks {
  47. fmt.Printf("任务:%s\n", task)
  48. }
  49. // 7. 数组赋值会复制整个数组,与切片赋值的共享行为不同。
  50. fmt.Println("\n=== 数组赋值是复制 ===")
  51. otherScores := scores
  52. otherScores[0] = 100
  53. fmt.Printf("数组副本:%v,原数组:%v\n", otherScores, scores)
  54. }