Go 언어에서는 상위 유형 객체의 하위 유형 속성에 액세스해야 하는 상황에 자주 직면합니다. 이는 구조를 정의할 때 중첩된 구조를 사용하기 때문일 수 있습니다. 하지만 Go 언어에는 상속 개념이 없기 때문에 상위 유형 객체를 통해 하위 유형 속성에 직접 접근할 수 없습니다. 그렇다면 Go에서 이 요구사항을 어떻게 구현할까요? 아래에서는 일반적으로 사용되는 몇 가지 방법을 소개하겠습니다.
파일 저장소를 만드는 중입니다. 다양한 종류의 파일을 만들려고 합니다. 이를 시뮬레이션하기 위해 다음 코드를 사용합니다.
으아악다음과 같은 결과가 나올 것으로 예상됩니다.
으아악하지만 Go 컴파일러에서 다음 오류가 발생했습니다.
./main.go:38:44: v.Duration이 정의되지 않았습니다(파일 유형에 필드나 메소드 Duration이 없음)
./main.go:40:39: v.Width 정의되지 않음(파일 유형에는 필드나 너비 메서드가 없음)
./main.go:40:48: v.Height가 정의되지 않았습니다(파일 유형에는 필드 또는 메소드 Height가 없음)
오류를 수정하는 방법은 무엇인가요?
<code>package main import ( "fmt" "time" ) type File interface{} type Audio struct { File Duration time.Duration } type Image struct { File Width uint Height uint } func main() { var files = map[string]File{ "1": Audio{ Duration: 14 * time.Second, }, "2": Image{ Height: 9989, Width: 1111, }, "3": Image{ Width: 1234, Height: 5678, }, } for k, v := range files { switch v.(type) { case Audio: fmt.Printf("%s: Audio %d seconds", k, v.Duration / time.Second) case Image: fmt.Printf("%s: Image %dx%d", k, v.Width, v.Height) } } } </code>
당신이 기대하는 유형으로 새로운 v
을 선언할 것입니다.
위 내용은 Go에서 상위 유형 객체의 하위 유형 속성에 액세스하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!