dongliaojing0554 2018-12-03 03:23
浏览 36

Golang泛型-简单用例

Say I have 3 structs:

type A struct{
   Foo map[string]string
}

type B struct{
   Foo map[string]string
}

type C struct{
   Foo map[string]string
}

and then I want to create a function that can accept any of those structs:

func handleFoo (){

}

Is there any way to do this with Golang? Something like:

type ABC = A | B | C

func handleFoo(v ABC){
   x: = v.Foo["barbie"] // this would be nice!
}

OK, so let's try an interface:

type FML interface {
  Bar() string
}

func handleFoo(v FML){
   z := v.Bar() // this will compile
   x: = v.Foo["barbie"] // this won't compile - can't access properties like Foo from v
}

In a language which encourages/forces composition, I cannot understand why you can't access properties like Foo.

  • 写回答

3条回答 默认 最新

  • dsasd12314 2018-12-03 03:57
    关注

    Because A, B, and C are are all assignable to the same underlying type, you can use a function with an argument of that underlying type: func handleFoo(v struct{ Foo map[string]string })

    Run it on the playground.

    A limitation of this approach is that methods on A, B and C (even with the same name and signature), are not available in handleFoo.

    评论

报告相同问题?

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度