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

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

Susan Sarandon
풀어 주다: 2024-12-08 10:49:10
원래의
923명이 탐색했습니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿