登录
首页 >  Golang >  Go问答

Golang 常用模式:传递多个参数类型的方式

来源:stackoverflow

时间:2024-02-09 21:00:25 279浏览 收藏

小伙伴们对Golang编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《Golang 常用模式:传递多个参数类型的方式》,就很适合你,本篇文章讲解的知识点主要包括。在之后的文章中也会多多分享相关知识点,希望对大家的知识积累有所帮助!

问题内容

我是 go 的新手,对于定义可能是两种类型之一的参数有疑问。 取代码:

type Thing struct {
  a int
  b int
  c string
  d string
}

type OtherThing struct {
  e int
  f int
  c string
  d string
}

func doSomething(t Thing/OtherThing) error {
  fmt.println(t.d)
  return nil
}

由于结构没有函数,我目前无法为它们编写接口。 那么 go 惯用的做法是什么呢?是否只是将随机函数附加到结构并编写接口或其他内容?

感谢您的帮助...


正确答案


声明一个具有两种类型通用功能的接口。使用接口类型作为参数类型。

// der gets d values.
type der interface {
  d() string
}

type thing struct {
  a int
  b int
  c string
  d string
}

func (t thing) d() string { return t.d }

type otherthing struct {
  e int
  f int
  c string
  d string
}

func (t otherthing) d() string { return t.d }


func dosomething(t der) error {
  fmt.println(t.d())
  return nil
}

您可以使用 interface{} 参数和 reflect 包来访问公共字段。很多人会说这种做法不符合习惯。

func doSomething(t interface{}) error {
    d := reflect.ValueOf(t).FieldByName("d").String()
    fmt.Println(d)
    return nil
}

Try an example on the playground

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>