Go에서는 구조체 리터럴 내의 포인터에 값을 할당하는 것이 까다로울 수 있습니다. 특히, 부울 포인터를 true로 설정하려면 해결 방법이 필요할 수 있습니다.
부울 포인터를 허용하는 다음 함수를 고려하세요.
import "fmt" func main() { fmt.Println("Hello, playground") check(handler{is: new(bool)}) } type handler struct{ is *bool } func check(is handler){}
구조체 리터럴에서 is 필드를 true로 할당하려면, 간단한 표기법이 존재한다고 가정할 수도 있습니다.
handler{is: &true} // This is invalid
안타깝게도 이는 유효한 Go 구문이 아닙니다. bool 포인터를 true로 설정하려면 해결 방법이 필요합니다.
한 가지 방법은 true라는 단일 bool 값을 포함하는 슬라이스를 생성하고 첫 번째 요소의 색인을 생성하는 것입니다.
h := handler{is: &[]bool{true}[0]} fmt.Println(*h.is) // Prints true
이를 통해 포인터를 true로 설정할 수 있지만, 주소가 첫 번째 주소가 될 때까지 메모리에 남아 있는 슬라이스 배열을 불필요하게 생성합니다. 요소가 삭제되었습니다.
더 깔끔한 해결책은 true로 초기화된 bool 변수에 대한 포인터를 반환하는 도우미 함수를 만드는 것입니다.
func newTrue() *bool { b := true return &b }
이것은 함수는 구조체 리터럴에서 사용할 수 있습니다:
h := handler{is: newTrue()} fmt.Println(*h.is) // Prints true
포인터를 true로 설정하는 다른 옵션에는 익명 함수가 포함됩니다.
h := handler{is: func() *bool { b := true; return &b }()} fmt.Println(*h.is) // Prints true
또는 변형:
h := handler{is: func(b bool) *bool { return &b }(true)}
이는 간결한 구문을 허용하지만 도우미 함수 접근 방식보다 가독성이 떨어집니다.
설정하는 동안 구조체 리터럴에서 true에 대한 bool 포인터는 간단한 작업처럼 보일 수 있으며 특정 구문이나 해결 방법을 사용해야 합니다. 이러한 방법을 알면 Go 프로그래머가 다양한 상황에서 포인터에 값을 효과적으로 할당할 수 있습니다.
위 내용은 Go Struct 리터럴의 Bool 포인터에 True를 할당하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!