例如,当您在 IntelliJ 中为给定类生成测试类时,class Foo
它将生成一个测试类internal class FooTest
。为什么它默认为internal class
?使用内部类作为测试类有什么好处?
我生成测试类的方法是:将光标放在类名称上Foo
,按Option/Alt
+ Enter
,选择“创建测试”。
我有一个Foo
带有方法的结构print
:
type Foo struct {
Bar string
}
func (f Foo) print() {
fmt.Println(f.Bar)
}
Run Code Online (Sandbox Code Playgroud)
如果我想打印一个切片Foo
,规范的方法可能是编写一个for
循环,并有一个函数来封装它:
func printFoos(fs []Foo) {
for _, f := range fs {
f.print()
}
}
printFoos([]Foo{})
Run Code Online (Sandbox Code Playgroud)
来自 OOP 背景,我发现这种方法有点不吸引人。
我想做的是printFoos
与[]Foo
:
// Invalid Go code
func (fs []Foo) print() {
for _, f := range fs {
f.print()
}
}
Run Code Online (Sandbox Code Playgroud)
以上不起作用,因为在 Go 中,未命名类型不能用作方法接收器,如Google Group thread 中所述。
为了规避它,可以写:
type Foos []Foo
func (fs …
Run Code Online (Sandbox Code Playgroud) 比较不区分大小写的字符串的常见做法是首先显式检查长度:
if len(a) == len(b) && strings.EqualFold(a, b) { ... }
Run Code Online (Sandbox Code Playgroud)
这似乎是一种解决方法,因为当前的实现仅在耗尽两个输入字符串中的任何一个时才进行长度检查。
是否有理由不首先进行长度检查,无论是性能方面还是其他方面?