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

1.接口定义

// geometry : 定义接口
type geometry interface {
	area() float64  //函数名  返回类型
	perim() float64 //函数名  返回类型
}

2.结构定义

// 定义结构area
type rect struct {
	width, height float64 //同类成员写一行,逗号隔开 / 成员名 类型
}

// 定义结构circle
type circle struct {
	radius float64 //成员名 类型
}

3.实现接口方法

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

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

// area() : 实现接口方法area
func (a rect) area() float64 {
	return a.width * a.height
}

// perim :实现接口方法perim
// func (参数名 类型) 函数名() 返回类型
func (a rect) perim() float64 {
	return 2*a.width + 2*a.height
}

func (c circle) area() float64 {
	return math.Pi * c.radius * c.radius
}

func (c circle) perim() float64 {
	return 2 * math.Pi * c.radius
}

4.定义接口调用函数

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

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


func main() {
	fmt.Println("Go接口使用示例")
	//初始化结构,供接口调用
	r := rect{width: 5, height: 5}
	c := circle{radius: 5}
	//调用接口,传入结构
	callInterfaceGeometry(r)
	callInterfaceGeometry(c)
	//使用枚举
	s := 4
	switch s {
	case StateIdle:
		fmt.Println("StateIdle:", 0)
		break
	case StateConnected:
		fmt.Println("StateConnected:", 1)
		break
	case StateError:
		fmt.Println("StateError:", 2)
		break
	case StateRetrying:
		fmt.Println("StateRetrying:", 3)
		break
	case StateRunning:
		fmt.Println("StateRunning:", 4)
		break
	default:
		fmt.Println("StateIdle:", -1)
		break
	}
	fmt.Println("状态:", stateMap[s])
}

输出:

Go接口使用示例
{5 5}
area: 25
perim: 20
{5}
area: 78.53981633974483
perim: 31.41592653589793
StateRunning: 4
状态: Running

完整示例:

package main

//导入多个包,一行一个
import (
	"fmt"
	"math"
)

// 枚举定义
const (
	StateIdle = iota //iota表示未定义整数,默认为:0
	StateConnected
	StateError
	StateRetrying
	StateRunning
)

var stateMap = map[int]string{
	StateIdle:      "Idle",
	StateConnected: "Connected",
	StateError:     "Error",
	StateRetrying:  "Retrying",
	StateRunning:   "Running",
}

// geometry : 定义接口
type geometry interface {
	area() float64  //函数名  返回类型
	perim() float64 //函数名  返回类型
}

// 定义结构area
type rect struct {
	width, height float64 //同类成员写一行,逗号隔开 / 成员名 类型
}

// 定义结构circle
type circle struct {
	radius float64 //成员名 类型
}

// area() : 实现接口方法area
func (a rect) area() float64 {
	return a.width * a.height
}

// perim :实现接口方法perim
// func (参数名 类型) 函数名() 返回类型
func (a rect) perim() float64 {
	return 2*a.width + 2*a.height
}

func (c circle) area() float64 {
	return math.Pi * c.radius * c.radius
}

func (c circle) perim() float64 {
	return 2 * math.Pi * c.radius
}

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

func main() {
	fmt.Println("Go接口使用示例")
	//初始化结构,供接口调用
	r := rect{width: 5, height: 5}
	c := circle{radius: 5}
	//调用接口,传入结构
	callInterfaceGeometry(r)
	callInterfaceGeometry(c)
	//使用枚举
	s := 4
	switch s {
	case StateIdle:
		fmt.Println("StateIdle:", 0)
		break
	case StateConnected:
		fmt.Println("StateConnected:", 1)
		break
	case StateError:
		fmt.Println("StateError:", 2)
		break
	case StateRetrying:
		fmt.Println("StateRetrying:", 3)
		break
	case StateRunning:
		fmt.Println("StateRunning:", 4)
		break
	default:
		fmt.Println("StateIdle:", -1)
		break
	}
	fmt.Println("状态:", stateMap[s])
}

相关推荐

  1. golang接口//结构使用示例

    2024-06-07 00:54:07       10 阅读
  2. golang实现

    2024-06-07 00:54:07       18 阅读
  3. golang结构接口方法实现与交互使用示例

    2024-06-07 00:54:07       11 阅读
  4. 数据结构-算法

    2024-06-07 00:54:07       13 阅读
  5. 类简单使用

    2024-06-07 00:54:07       37 阅读
  6. 接口 VS ,如何管理常量?

    2024-06-07 00:54:07       30 阅读
  7. 【Rust】结构体与

    2024-06-07 00:54:07       31 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-07 00:54:07       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-07 00:54:07       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-07 00:54:07       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-07 00:54:07       20 阅读

热门阅读

  1. GBDT的优势:为什么选择梯度提升决策树

    2024-06-07 00:54:07       9 阅读
  2. 后端开发面经系列 -- 中望C++一面面经

    2024-06-07 00:54:07       8 阅读
  3. Kubernetes 之 StatefulSet基本原理

    2024-06-07 00:54:07       12 阅读
  4. flutter 自动生成静态资源的引用

    2024-06-07 00:54:07       10 阅读
  5. GPT-4o全面解析:版本对比、技术革新与个人见解

    2024-06-07 00:54:07       10 阅读
  6. x264 参考帧管理原理:reference_build_list 函数

    2024-06-07 00:54:07       7 阅读
  7. Hadoop_hdfs介绍

    2024-06-07 00:54:07       10 阅读
  8. 通过Redis实现防止接口重复提交功能

    2024-06-07 00:54:07       10 阅读