1.类型声明与方法
从一个现有的非 interface 类型创建新类型时,并不会继承原有的方法:
// 定义 Mutex 的自定义类型
type myMutex sync.Mutex
func main() {
var mtx myMutex
mtx.Lock()
mtx.UnLock()
}
mtx.Lock undefined (type myMutex has no field or method Lock)…
如果你需要使用原类型的方法,可将原类型以匿名字段的形式嵌到你定义的新 struct 中:
// 类型以字段形式直接嵌入
type myLocker struct {
sync.Mutex
}
func main() {
var locker myLocker
locker.Lock()
locker.Unlock()
}
interface 类型声明也保留它的方法集:
type myLocker sync.Locker
func main() {
var locker myLocker
locker.Lock()
locker.Unlock()
}
2.跳出 for-switch 和 for-select 代码块
没有指定标签的 break 只会跳出 switch/select 语句,若不能使用 return 语句跳出的话,可为 break 跳出标签指定的代码块:
// break 配合 label 跳出指定代码块
func main() {
loop:
for {
switch {
case true:
fmt.Println("breaking out...")
//break // 死循环,一直打印 breaking out...
break loop
}
}
fmt.Println("out...")
}
goto 虽然也能跳转到指定位置,但依旧会再次进入 for-switch,死循环。
最后编辑: kuteng 文档更新时间: 2024-04-01 10:58 作者:kuteng