>백엔드 개발 >Golang >포함된 함수 대신 인라인 함수가 즉시 호출되는 이유는 무엇입니까?

포함된 함수 대신 인라인 함수가 즉시 호출되는 이유는 무엇입니까?

王林
王林앞으로
2024-02-06 08:06:031096검색

포함된 함수 대신 인라인 함수가 즉시 호출되는 이유는 무엇입니까?

질문 내용

구조체 필드에 값을 할당할 때.

으아아아

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제