>백엔드 개발 >Golang >Go Struct 리터럴의 Bool 포인터에 True를 할당하는 방법은 무엇입니까?

Go Struct 리터럴의 Bool 포인터에 True를 할당하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-08 10:49:10928검색

How to Assign True to a Bool Pointer in Go Struct Literals?

구조체 리터럴의 포인터 할당: 간결한 가이드

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

익명 함수 및 One-Liners

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.