범위를 표현하는 관용적 방법이 있다면의 의미가 있는지 궁금합니다. 범위까지 내가 좋아하는 일을 의미 :golang에 관용 영역 유효성 검사가 있습니까?
- 이 (oneliner 대신 명시 적으로 잠금 + DEFFERED 잠금 해제의),
- 로깅 기능 (또는 코드 블록) 입구와 출구,
- 측정 실행 시간 뮤텍스를 범위. 처음 두 개의 글 머리 기호에 대한
예제 코드 :
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()'을 호출하는 것입니다. –
이 접근법은 [Effective Go trace example] (https://golang.org/doc/effective_go.html##)에서 사용됩니다. 연기). –