Go 언어의 nil 상세 설명
1853 단어 Go 언어 기초
1.일반적인 struct(비 포인터 형식)의 대상 은 nil 로 할당 할 수 없고 nil 과 판단 할 수 없습니다(==).즉,다음 코드 입 니 다.*s==nil(컴 파일 오류)을 판단 할 수 없고 쓸 수 없습니다:var s Student=nil.
s := new(Student) // new *Student
fmt.Println("s == nil", s == nil) //false
//fmt.Println(*s == nil) // :cannot convert nil to type Student
fmt.Printf("%T
", s) //*test.Student
fmt.Printf("%T
", *s) //test.Student
type Student struct{}
func (s *Student) speak() {
fmt.Println("I am a student.")
}
type IStudent interface {
speak()
}
그러나 struct 의 지침 대상 은 nil 로 할당 하거나 nil 과 판단 할 수 있다.그러나*Student 유형의 s3==nil 에 도 s3 를 출력 할 수 있 는 유형:*Student//var s3 Student = nil // :cannot use nil as type Student in assignment
var s3 *Student = nil
fmt.Println("s3 == nil", s3 == nil) //true
fmt.Printf("%T
", s3) //*test.Student
2.인터페이스 대상 과 인터페이스 대상 의 지침 은 모두 nil 또는 nil 판 등(==)으로 할당 할 수 있 습 니 다.여기 서 말 하 는 인 터 페 이 스 는 interface{}일 수도 있 고 위 코드 의 ISTudent 와 같은 사용자 정의 인터페이스 일 수도 있 습 니 다.new 를 사용 하여*interface{}형식의 s2 를 만 든 후 이 포인터 대상 s2!=nil,하지만 이 포인터 대상 이 가리 키 는 내용*s2==nil
사용자 정의 인 터 페 이 스 는 다음 과 같다.이때 s4!=nil,그러나*s4==nil,따라서 s4.speak()방법 을 호출 할 때 컴 파일 오류 가 발생 할 수 있 습 니 다.
4.567913.3.포인터 대상 을 nil 로 할당 한 다음 에 이 포인터 대상 을 인터페이스 에 할당 합 니 다(물론 이 포인터 유형 은 이 인 터 페 이 스 를 실현 해 야 합 니 다).이때 이 인터페이스 대상 은 nil 이 아 닙 니 다.s2 := new(interface{})
fmt.Println("s2 == nil", s2 == nil) //false
fmt.Println("*s2 == nil", *s2 == nil) //true
fmt.Printf("%T
", s2) //*interface {}
fmt.Printf("%T
", *s2) //
왜 닐 하나 가 이렇게 복잡 할 까?대신 과 함께 소통 하고 토론 해 보 길~
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Go 언어의 nil 상세 설명Go 언어의 nil 은 자바 의 null 보다 훨씬 이해 하고 파악 하기 어렵다. 1.일반적인 struct(비 포인터 형식)의 대상 은 nil 로 할당 할 수 없고 nil 과 판단 할 수 없습니다(==).즉,다음 코...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.