구조체 필드에 값을 할당할 때.
으아아아newFlagSet("configure")를 호출하는 것과 같다고 생각합니다. 이런 식으로 글을 쓰면 어떤 장점이 있나요?
소스 코드를 읽을 때 문제가 발생합니다. 그가 왜 이런 글을 썼는지 알아야 합니다.
빠른 검색, 이 코드는 tailscale/tailscale
, cmd/tailscale/cli/configure.go#var configureCmd = &ffcli.Command{}
코드는 함수 리터럴(익명 함수)을 사용한 후 즉시 호출합니다.
이를 즉시 호출 함수 표현식(IIFE)이라고 합니다. 이는 JavaScript와 같은 언어에서 더 일반적이지만 Go에서도 유용할 수 있습니다.
Go에서 IIFE를 사용하면 값을 생성하는 논리 조각을 분리하여 주변 네임스페이스를 오염시키지 않는 변수에 대한 범위 지정 환경을 만들 수 있습니다.
익명 함수(이 경우 fs
)에 사용되는 변수는 주변 코드로 이스케이프되지 않습니다. 이렇게 하면 변수가 필요할 때만 존재하기 때문에 코드를 더 쉽게 추론할 수 있습니다.
하지만 FlagSet: newFlagSet("configure") 是 true,但
相当于 FlagSet: (func() *flag.FlagSet { fs := newFlagSet("configure"); return fs})()
두 번째 형식의 장점은 다음과 같습니다.
newFlagSet("configure")
的修改需要更复杂的操作或计算,这些更改可以轻松地合并到匿名函数中,而无需更改 configureCmd
의 구조가 변경되는 경우. tailscale 코드를 보면 특정 IIFE 사용이 해당 인스턴스 하나로 제한되는 것 같습니다.
위 내용은 포함된 함수 대신 인라인 함수가 즉시 호출되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!