我想知道是否有一种习惯用语来表示“作用域”语义。所谓作用域,指的是以下情况:
只有一个问题:用户可能会忘记“调用”第一次调用的结果。
这段代码(可以)算是惯用写法吗?
- 作用域互斥锁(一行代码代替显式的锁定和延迟解锁),
- 记录函数(或任何代码块)的进入和退出,
- 测量执行时间。
package main
import "log"
import "sync"
func Scoped(m *sync.Mutex) func() {
m.Lock()
return func() {
m.Unlock()
}
}
func Log(what string) func() {
log.Println(what, "started")
return func() {
log.Println(what, "done")
}
}
func main() {
defer Log("testing")()
m := &sync.Mutex{} // obviously mutex should be from other source in real life
defer Scoped(m)()
// use m
}
https://play.golang.org/p/33j-GrBWSq
基本上,我们需要进行一次函数调用(例如互斥锁),并且其中一次调用应该被延迟执行(例如互斥解锁)。我建议在这里只返回一个未命名的函数,但也可以轻松地给它命名(返回一个带有函数字段的结构体)。只有一个问题:用户可能会忘记“调用”第一次调用的结果。
这段代码(可以)算是惯用写法吗?
lock()
然后defer unlock()
。 - Not_a_Golfer