go - 如何在 Go 中为内置类型创建别名的文字 slice

标签 go

我有一些 golang 代码可以操作接口(interface)类型 (Comparable) 的 slice 。为了测试我的代码,我想创建一些假数据并对其进行操作。但是,我在以一种并非非常乏味的方式执行此操作时遇到了麻烦。我唯一能想到做的就是创建一个满足 Comparable 接口(interface)的新测试类型(在本例中是 int 类型的别名),然后为我的测试提供该类型的文字 slice 。我设想它看起来像下面这样:

type Comparable interface {
    LT(Comparable) bool
    AsFloat() float64
} 

type testInt int 

func (self testInt) LT(other Comparable) bool { 
    return float64(self) < other.AsFloat() 
} 

func (self testInt) AsFloat() float64 { 
    return float64(self) 
} 

func TestAFunction(t *testing.T) { 
    FunctionToTest([]Comparable{7, 4, 2, 1})
    ....
}

但是,对于这个例子,编译器会提示类型 int 不能用作 Comparable。我理解为什么会发生这种情况,但我不确定如何解决它。首先,我不知道如何创建 testInt 类型的文字。其次,我必须编写大量这些函数。使用字面整数对我的目的来说要方便得多。

有没有一种方法可以使用内置类型的类型别名,以便编译器可以用最少的代码正确推断出正确的文字类型?

此外,是否有更好的方法来完成我正在尝试做的事情,即生成满足用于测试的接口(interface)的硬数据?

最佳答案

func NewWhatevers(a ...int) (r []Whatever) {
        r = make([]Whatever, len(a))
        for i, v := range a {
                r[i] = Whatever(v)
        }
        return
}

...

myWhatevers := NewWhatevers(7, 4, 2, 1)

关于go - 如何在 Go 中为内置类型创建别名的文字 slice ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18074464/

相关文章:

go - 获取本地HTTP服务器的端口而不劫持连接

go - golang 数学/大库中的奇怪语法

go - 大量 transient 对象 - 避免争用

go - 有没有办法与 golang 中的任何指针对象进行比较?

go - 无法解码简单日期

mongodb - 如何通过 Go 以 UUID 类型保存 Mongo 中的内容?

curl - 使用 GoLang 通过curl 发送多部分请求

go - 将结构的字段 slice 为可变参数

mongodb - 如何将mongodb go driver的primitive.Timestamp类型转换回Golang time.Time类型?

go - 活泼的版本不匹配问题