当前位置:   article > 正文

golang接口/枚举/结构使用示例

golang接口/枚举/结构使用示例

1.接口定义

  1. // geometry : 定义接口
  2. type geometry interface {
  3. area() float64 //函数名 返回类型
  4. perim() float64 //函数名 返回类型
  5. }

2.结构定义

  1. // 定义结构area
  2. type rect struct {
  3. width, height float64 //同类成员写一行,逗号隔开 / 成员名 类型
  4. }
  5. // 定义结构circle
  6. type circle struct {
  7. radius float64 //成员名 类型
  8. }

3.实现接口方法

在go代码窗口右击弹出菜单,选择Generate ,在弹出的Generate菜单中选择 Implement Methods

先选择结构,后选择接口,然后生成

  1. // area() : 实现接口方法area
  2. func (a rect) area() float64 {
  3. return a.width * a.height
  4. }
  5. // perim :实现接口方法perim
  6. // func (参数名 类型) 函数名() 返回类型
  7. func (a rect) perim() float64 {
  8. return 2*a.width + 2*a.height
  9. }
  10. func (c circle) area() float64 {
  11. return math.Pi * c.radius * c.radius
  12. }
  13. func (c circle) perim() float64 {
  14. return 2 * math.Pi * c.radius
  15. }

4.定义接口调用函数

  1. // 封装接口调用方法
  2. // func 函数名(参数名 类型)
  3. func callInterfaceGeometry(g geometry) {
  4. fmt.Println(g)
  5. fmt.Println("area:", g.area())
  6. fmt.Println("perim:", g.perim())
  7. }

5.在主函数中调用并输出 

  1. func main() {
  2. fmt.Println("Go接口使用示例")
  3. //初始化结构,供接口调用
  4. r := rect{width: 5, height: 5}
  5. c := circle{radius: 5}
  6. //调用接口,传入结构
  7. callInterfaceGeometry(r)
  8. callInterfaceGeometry(c)
  9. //使用枚举
  10. s := 4
  11. switch s {
  12. case StateIdle:
  13. fmt.Println("StateIdle:", 0)
  14. break
  15. case StateConnected:
  16. fmt.Println("StateConnected:", 1)
  17. break
  18. case StateError:
  19. fmt.Println("StateError:", 2)
  20. break
  21. case StateRetrying:
  22. fmt.Println("StateRetrying:", 3)
  23. break
  24. case StateRunning:
  25. fmt.Println("StateRunning:", 4)
  26. break
  27. default:
  28. fmt.Println("StateIdle:", -1)
  29. break
  30. }
  31. fmt.Println("状态:", stateMap[s])
  32. }

输出:

  1. Go接口使用示例
  2. {5 5}
  3. area: 25
  4. perim: 20
  5. {5}
  6. area: 78.53981633974483
  7. perim: 31.41592653589793
  8. StateRunning: 4
  9. 状态: Running

完整示例:

  1. package main
  2. //导入多个包,一行一个
  3. import (
  4. "fmt"
  5. "math"
  6. )
  7. // 枚举定义
  8. const (
  9. StateIdle = iota //iota表示未定义整数,默认为:0
  10. StateConnected
  11. StateError
  12. StateRetrying
  13. StateRunning
  14. )
  15. var stateMap = map[int]string{
  16. StateIdle: "Idle",
  17. StateConnected: "Connected",
  18. StateError: "Error",
  19. StateRetrying: "Retrying",
  20. StateRunning: "Running",
  21. }
  22. // geometry : 定义接口
  23. type geometry interface {
  24. area() float64 //函数名 返回类型
  25. perim() float64 //函数名 返回类型
  26. }
  27. // 定义结构area
  28. type rect struct {
  29. width, height float64 //同类成员写一行,逗号隔开 / 成员名 类型
  30. }
  31. // 定义结构circle
  32. type circle struct {
  33. radius float64 //成员名 类型
  34. }
  35. // area() : 实现接口方法area
  36. func (a rect) area() float64 {
  37. return a.width * a.height
  38. }
  39. // perim :实现接口方法perim
  40. // func (参数名 类型) 函数名() 返回类型
  41. func (a rect) perim() float64 {
  42. return 2*a.width + 2*a.height
  43. }
  44. func (c circle) area() float64 {
  45. return math.Pi * c.radius * c.radius
  46. }
  47. func (c circle) perim() float64 {
  48. return 2 * math.Pi * c.radius
  49. }
  50. // 封装接口调用方法
  51. // func 函数名(参数名 类型)
  52. func callInterfaceGeometry(g geometry) {
  53. fmt.Println(g)
  54. fmt.Println("area:", g.area())
  55. fmt.Println("perim:", g.perim())
  56. }
  57. func main() {
  58. fmt.Println("Go接口使用示例")
  59. //初始化结构,供接口调用
  60. r := rect{width: 5, height: 5}
  61. c := circle{radius: 5}
  62. //调用接口,传入结构
  63. callInterfaceGeometry(r)
  64. callInterfaceGeometry(c)
  65. //使用枚举
  66. s := 4
  67. switch s {
  68. case StateIdle:
  69. fmt.Println("StateIdle:", 0)
  70. break
  71. case StateConnected:
  72. fmt.Println("StateConnected:", 1)
  73. break
  74. case StateError:
  75. fmt.Println("StateError:", 2)
  76. break
  77. case StateRetrying:
  78. fmt.Println("StateRetrying:", 3)
  79. break
  80. case StateRunning:
  81. fmt.Println("StateRunning:", 4)
  82. break
  83. default:
  84. fmt.Println("StateIdle:", -1)
  85. break
  86. }
  87. fmt.Println("状态:", stateMap[s])
  88. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/675926
推荐阅读
  

闽ICP备14008679号