猿问
回到首页
个人中心
反馈问题
注册登录
下载APP
首页
课程
实战
体系课
手记
专栏
慕课教程
如何从同一函数返回未知数据类型?(哥朗)
我对 Golang 有点陌生,我觉得非常有用的一件事是,如果我可以将未知的值类型返回给函数。
有没有办法使用 Golang 在同一个函数中返回未知的不同类型的值?
肥皂起泡泡
浏览 188
回答 2
2回答
杨__羊羊
我通常使用这样的模式。我创建了一个通用的Result类型,它存储作为接口的Data和作为错误类型的Err 。所以我可以重用 Result 类型来返回不同类型的不同函数。然后使用switch type来确定函数返回什么类型。Go Playground 请查看https://play.golang.org/p/SbwGOP_aXLGpackage mainimport ( "fmt" "errors" "os")func main() { what := "multiple" result := Func(what) if result.Err != nil { fmt.Println(result.Err.Error()) os.Exit(1) } switch res := result.Data.(type) { case Gopher: fmt.Println("Gopher name : ", res.Name) case Gophers: for _, g := range res { fmt.Println("Gopher name : ", g.Name) } }}type Result struct { Data interface{} Err error}type Gopher struct { Name string}type Gophers []Gopherfunc Func(what string) Result { switch what { case "one": return Result{Data: Gopher{"gopher one"}} case "multiple": return Result{Data: Gophers{Gopher{"gopher one"}, Gopher{"gopher two"}}} } return Result{Err: errors.New("invalid what")}}
0
0
0
白衣非少年
像这样的东西?语言规范中描述了类型开关。请参阅https://golang.org/ref/spec#Switch_statements。package mainimport "fmt"func main() { p := BasedOnType(true) fmt.Println(p) //map[bool:true] p = BasedOnType(2) fmt.Println(p) //map[]}func BasedOnType(i interface{}) map[interface{}]interface{} { m := make(map[interface{}]interface{}) switch x := i.(type) { case bool, float64, string: k := fmt.Sprintf("%T", x) v := fmt.Sprintf("%v", x) m[k] = v return m default: return m }}对于 Go 游乐场,请参阅https://play.golang.org/p/0ahpua7ujb2。
0
0
0
打开App,查看更多内容
随时随地看视频
慕课网APP
相关分类
Go
继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续