英文:
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)))
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论