使用接口的通用函数

huangapple go评论110阅读模式
英文:

Generic function using an interface

问题

由于我有两种不同数据类型的相似功能:

func GetStatus(value uint8) (string) {...}
func GetStatus(name string) (string) {...}

我希望使用一种更简单的方式:

func GetStatus(value interface{}) (string) {...}

是否可以使用接口创建一个通用函数?
可以使用reflect.Typeof(value)来检查数据类型。

英文:

Since I've a similar function for 2 different data types:

func GetStatus(value uint8) (string) {...}
func GetStatus(name string) (string) {...}

I would want to use a way more simple like:

func GetStatus(value interface{}) (string) {...}

Is possible to create a generic function using an interface?
The data type could be checked using reflect.Typeof(value)

答案1

得分: 2

你想要做的事情是否需要使用 reflect 包的复杂性和开销?你考虑过使用简单的 switch 语句的 type 开关吗?

package main

import (
	"fmt"
)

func GetStatus(value interface{}) string {
	var s string
	switch v := value.(type) {
	case uint8:
		v %= 85
		s = string(v + (' ' + 1))
	case string:
		s = v
	default:
		s = "error"
	}
	return s
}

func main() {
	fmt.Println(GetStatus(uint8(2)), GetStatus("string"), GetStatus(float(42.0)))
}
英文:

Does what you want to do need the complexity and overhead of the reflect package? Have you considered a simple switch statement type switch?

package main

import (
	"fmt"
)

func GetStatus(value interface{}) string {
	var s string
	switch v := value.(type) {
	case uint8:
		v %= 85
		s = string(v + (' ' + 1))
	case string:
		s = v
	default:
		s = "error"
	}
	return s
}

func main() {
	fmt.Println(GetStatus(uint8(2)), GetStatus("string"), GetStatus(float(42.0)))
}

huangapple
  • 本文由 发表于 2010年5月9日 18:10:01
  • 转载请务必保留本文链接:https://go.coder-hub.com/2797297.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定