types - 确定 var 是否为自定义类型

标签 types go assertions

如何确定传递给我的 Func 的 var 是否真的是我想要的类型?

我有一个自定义类型

type Name string

和一堆该类型的常量

const Fred Name = "fred"

我有一个函数,我需要禁止除我的自定义类型 ex 之外的任何其他类型的输入:

func MyFunc(name1 Name, name2 Name) (*Person, error) {
//bunch of stuff
}

我如何在我的 func 中检查 name1 和 name2 不是传递给 func 的字符串,而是我已经在我的类型 ex 中定义的 const:

p, err := MyFunc(Fred,Albert) //What i want
p, err := MyFunc("fred","albert") //What i dont want to happen

如果不能回答我的问题,我如何才能像 Golang 中的枚举一样创建一个有意义的类型并限制其他人使用我定义的类型

最佳答案

让你的类型实现一个不导出的接口(interface)

type Name string

type Private interface{
     private()
}

func (n Name) private() {}

func MyFunc(name1, name2 Private) (*Person, error) {
    //bunch of stuff
}

关于types - 确定 var 是否为自定义类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26071173/

相关文章:

Haskell 记录语法和类型类

scala - 为什么确保仅在其他方面起作用?

scala - Scala 的 "type"关键字是什么意思?

Scala - 发现类型不匹配的单元 : required Array[Int]

go - len 方法未定义

json - 相当于Python的json.dumps和json.loads

go - 无法从并行目录同步 Go 包

c# - 检测是否在 WPF 和 Winforms 的 UI 线程上

C++ 前提条件/断言

c# - JSON.NET 反序列化为带有 Type 参数的对象