【问题标题】:How to make a function received different type as a string如何使函数接收不同类型的字符串
【发布时间】:2019-10-20 13:58:04
【问题描述】:

在我的代码中,我有一些字符串类型,例如:

type StringTypeOne string
type StringTYpeOwn string

我知道我可以在阅读后将它们转换为字符串: Converting a custom type to string in Go

但是我想写一个函数来接受所有这些类型的结构,例如

func handleString(s StringType)

其中 s 可以是 StringTypeOne 或 StringTypeTwo 或任何其他带有字符串字段的类型。

这在 golang 中可行吗?

【问题讨论】:

  • @hqt:downvotes 不需要 cmets,请求它们既无聊又不合适。
  • 这看起来像是一个 XY 问题。您所要求的确切内容无法在 Go 中完成。但是你能解释一下你试图解决的更大的问题吗?如果是这样,肯定有替代解决方案。

标签: go


【解决方案1】:

不,你不能。但是为了您的目的,您应该实现一个自定义接口。

// define an interface that do something you need
type Doer interface {
   DoSomething();
}

然后定义自定义类型并实现已定义接口的所有必要功能:

type StringTypeOne string
type StringTypeTwo string


func (s StringTypeOne) DoSomething() {
}

func (s StringTypeTwo) DoSomething() {
}

然后你可以创建接收接口作为参数的函数:

func handleString(s Doer) {
}

此方法可以接收StringTypeOne 或StringTypeTwo 作为参数。

【讨论】:

  • 这不符合“其中 s 可以是 StringTypeOne 或 StringTypeTwo 或任何其他具有字符串字段的类型”中的“具有字符串字段的任何类型”的约束。 (或具有基础类型字符串的任何类型的可能意图)。
  • @Volker 嗯...Stringer 接口怎么样...func String()string?
  • @Volker 在您的情况下,您基本上将所有作为字符串的下属类型视为字符串。因此,您可以将函数接受的参数编写为字符串。例如:func handleString(s String) {} 然后您可以从自定义类型中获取字符串值。例如:a := StringTypeTwo("example") ; handleString(a.String())
【解决方案2】:

这在 golang 中可行吗?

没有。

新类型的全部目的在于它是一个不同的类型。

【讨论】:

    【解决方案3】:

    如果你真的需要这个功能,你可以创建一个新的接口类型,然后为你的每个 StringTypes 实现,你的函数将把该接口类型的一个实例作为它的参数。

    【讨论】:

    • 我认为这是正确的答案,如果您提供一些代码示例会更好
    猜你喜欢
    • 2021-10-12
    • 2012-10-28
    • 2021-10-28
    • 2022-01-21
    • 2021-09-20
    • 2017-05-05
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多