MST

星途 面试题库

面试题:Go语言空接口在错误处理和多态实现中的高级应用

设计一个简单的插件系统,使用空接口实现不同类型插件的统一调用入口。插件有两种,一种是计算两个数之和的`Adder`插件,一种是计算两个数之积的`Multiplier`插件。每个插件都实现一个`Execute`方法,接受两个`float64`类型参数并返回计算结果。`Execute`方法的参数通过空接口传递,在调用时需要根据实际插件类型进行正确的类型断言和计算。请给出相关的代码实现。
10.9万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import (
	"fmt"
)

// 定义插件接口
type Plugin interface {
	Execute(args interface{}) (float64, error)
}

// Adder插件
type Adder struct{}

func (a Adder) Execute(args interface{}) (float64, error) {
	arg, ok := args.([]float64)
	if!ok || len(arg) != 2 {
		return 0, fmt.Errorf("参数类型错误或参数个数不正确")
	}
	return arg[0] + arg[1], nil
}

// Multiplier插件
type Multiplier struct{}

func (m Multiplier) Execute(args interface{}) (float64, error) {
	arg, ok := args.([]float64)
	if!ok || len(arg) != 2 {
		return 0, fmt.Errorf("参数类型错误或参数个数不正确")
	}
	return arg[0] * arg[1], nil
}

func main() {
	// 使用Adder插件
	adder := Adder{}
	result, err := adder.Execute([]float64{2.0, 3.0})
	if err != nil {
		fmt.Println("执行Adder插件错误:", err)
	} else {
		fmt.Println("Adder插件执行结果:", result)
	}

	// 使用Multiplier插件
	multiplier := Multiplier{}
	result, err = multiplier.Execute([]float64{2.0, 3.0})
	if err != nil {
		fmt.Println("执行Multiplier插件错误:", err)
	} else {
		fmt.Println("Multiplier插件执行结果:", result)
	}
}