constants_iota.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. // iota_cheatsheet.go
  2. package main
  3. import "fmt"
  4. /*
  5. -------------------------------------------------
  6. 1) 顺序枚举(最常用)
  7. Sunday=0, Monday=1, ..., Saturday=6
  8. -------------------------------------------------
  9. */
  10. const (
  11. Sunday = iota // 0
  12. Monday // 1
  13. Tuesday
  14. Wednesday
  15. Thursday
  16. Friday
  17. Saturday
  18. )
  19. /*
  20. -------------------------------------------------
  21. 2) 位掩码(flags)
  22. 每个常量占 1 个二进制位,可用于权限/选项
  23. -------------------------------------------------
  24. */
  25. const (
  26. Read = 1 << iota // 0b0001
  27. Write // 0b0010
  28. Exec // 0b0100
  29. )
  30. /*
  31. -------------------------------------------------
  32. 3) 自定义步长或公式
  33. 生成 1KB, 1MB, 1GB ... 的精确字节数
  34. -------------------------------------------------
  35. */
  36. const (
  37. _ = iota // 0 丢掉
  38. KB = 1 << (10 * iota) // 1 << 10 = 1024
  39. MB // 1 << 20 = 1048576
  40. GB // 1 << 30 = 1073741824
  41. )
  42. /*
  43. -------------------------------------------------
  44. 4) 跳号 + 中途改公式
  45. 演示跳过某个值、后续再换算法
  46. -------------------------------------------------
  47. */
  48. const (
  49. A = iota // 0
  50. B // 1
  51. _ // 2 被跳过
  52. C // 3
  53. D = iota + 10 // 4+10 = 14
  54. E // 5+10 = 15
  55. )
  56. func main() {
  57. fmt.Println("Weekday:", Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday)
  58. fmt.Println("Flags :", Read, Write, Exec)
  59. fmt.Println("Storage:", KB, MB, GB)
  60. fmt.Println("Misc :", A, B, C, D, E)
  61. }