işaretli semantik temsil etmek için herhangi bir deyim varsa merak ediyorum. kapsamlı olarak kastettiğim şu:Golang'da deyimsel anlamlandırılmış semantik var mı?
- (oneliner yerine açık Lock + deffered Unlock),
- günlüğü işlevinin (veya herhangi bir kod bloğu) giriş ve çıkış,
- ölçme yürütme zamanı muteks'i kapsamlı. İlk iki mermi
örnek kod:
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
Temelde biz bir işlev çağrısı sadece şimdi (örn muteks kilidi) yapmak gerekir, ve bir çağrı ertelendi edilmelidir ertelemek (örneğin mutex unlock). Burada sadece adlandırılmamış işlevi döndürmeyi öneriyorum, ancak kolayca adlandırılabilir (işlev alanına sahip struct).
Tek bir sorun var: kullanıcı ilk aramanın sonucunu 'aramayı' unutabilir.
Bu kod (olabilir) deyimsel mi?
."Deyimsel" yolu açıkça 'lock()' ve sonra 'defer unlock()' –
'u çağırmaktır. Bu yaklaşım [Effective Go trace örneğinde kullanılır. (Https://golang.org/doc/effective_go.html# erteleme). –