【发布时间】:2013-08-06 07:47:46
【问题描述】:
我有一些操作接口类型切片的 golang 代码(可比较)。为了测试我的代码,我想创建一些假数据并对其进行操作。但是,我在以一种并不乏味的方式执行此操作时遇到了麻烦。我唯一能想到的就是创建一个满足 Comparable 接口的用于测试的新类型(在本例中为 int 类型的别名),然后为我的测试提供该类型的文字切片。我设想它看起来像下面这样:
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 类型的文字。其次,我必须编写大量这些函数。对我而言,使用字面量整数要方便得多。
有没有办法使用内置类型的类型别名,以便编译器可以用最少的代码正确推断出正确的文字类型?
此外,是否有更好的方法来完成我正在尝试做的事情,即生成满足用于测试的接口的硬数据?
【问题讨论】:
-
你的代码看起来像 Java (
Comparable,self)。为什么不直接使用 Java 而不是在 Go 中编写 Java? -
@jnml 因为他在学习。教他围棋成语。
标签: go