Go에서 Null 인터페이스를 포인터로 변환
Go에서 nil 인터페이스를 특정 유형의 포인터로 변환하면 오류가 발생할 수 있습니다. . 제공된 샘플 코드에서:
type Nexter interface { Next() Nexter } type Node struct { next Nexter } func (n *Node) Next() Nexter {...} func main() { var p Nexter var n *Node fmt.Println(n == nil) // prints true n = p.(*Node) // fails }
정적 인터페이스(Nexter)가 nil을 포함한 다양한 동적 유형의 값을 보유할 수 있기 때문에 이는 실패합니다. nil 인터페이스 값에 대해 유형 주장(p.(*Node))을 수행할 수 없습니다.
그러나 특정 유형의 포인터에 nil 값을 직접 할당하는 것은 가능합니다:
n = (*Node)(nil)
동적 유형 *Node를 사용하여 nil 값을 n에 할당합니다.
nil 인터페이스 값을 처리하려면 이를 확인할 수 있습니다. 명시적으로:
if p != nil { n = p.(*Node) // only succeeds if p contains a value of type *Node }
또는 "comma-ok" 형식을 사용합니다.
if n, ok := p.(*Node); ok { // n is not nil and holds a value of type *Node }
"comma-ok" 형식을 사용하면 어설션이 절대 실패하지 않고 나타내는 부울 값이 반환됩니다. 패닉을 일으키지 않고 주장이 유효한지 여부. 이를 통해 nil 및 non-nil 인터페이스 값을 모두 안전하게 처리할 수 있습니다.
위 내용은 Go에서 Nil 인터페이스를 포인터로 안전하게 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!