1 回答
TA贡献1797条经验 获得超4个赞
您可以为单独的代码集使用单独的包,并使用单个包来定义与代码关联的更高级别的功能,并为该更高级别的包编写测试。
我还没有编译或测试任何这些:
例如对于代码集:
package product // or whatever namespace is associated with the codeset
type Const int
const (
ONE Const = iota
TWO
...
INVALID = -1
)
func (c Const) Code() string {
return intToCode(int(c)) // internal implementation
}
type Code string
const (
STR_ONE Code = "ONE"
...
)
func (c Code) Const() int {
return codeToInt(string(c)) // internal implementation
}
例如对于更高级别的函数包:
// codes.go
package codes
type Coder interface{
Code() string
}
type Conster interface{
Const() int
}
func DoSomething(c Coder) string {
return "The code is: " + c.Code()
}
// codes_product_test.go
package codes
import "product"
func TestProductCodes(t *testing.T) {
got := DoSomething(product.ONE) // you can pass a product.Const as a Coder
want := "The code is: ONE"
if got != want {
t.Error("got:", got, "want:", want)
}
}
编辑:
要检索特定代码的常量,您可以执行以下操作
product.Code("STRCODE").Const()
也许最好Const()返回 aCoder以便product.Code("ONE").Const()可以是 a product.Const。我认为如果你玩弄它,有几种选择,并且在某个地方会有一个很好的选择。
- 1 回答
- 0 关注
- 169 浏览
添加回答
举报