내장은 구조체를 다른 구조체 안에 내장하는 방법이고 상속과는 별개이다
예제코드를 보면 Bark 메서드를 오버라이드를 하여 상속한것처럼 보이지만 Dog객체를 인수로 받는 DogVoice메서드에 다른 객체인 BullDog, ShibaInu객체를 변수로 대입할 수 없다. 왜냐하면 내장은 상속과 다르기 때문이다.
package main
import "fmt"
type Dog struct{}
func (d *Dog) Bark() string {return "Bow"}
type BullDog struct{Dog}
type ShibaInu struct{Dog}
/*오버라이드*/
func (s *ShibaInu) Bark() string {return "멍"}
/*Dog객체를 인수로 받아 나중에 DogVoice()메서드가 호출될때 다른 객체의 인자를 받지 못한다*/
func DogVoice(d *Dog) string {return d.Bark()}
func main() {
bd := &BullDog{}
fmt.Println(bd.Bark())
si := &ShibaInu{}
fmt.Println(si.Bark())
/*Error*/
fmt.Println(DogVoice(si))
}
내장은 다형성,공변성,반공변성을 충족하지 못해 에러가 출력된다. 사진을 보면 다른 객체를 넣으니 에러가 뜬다.
에러 내용: cannot use si (variable of type *ShibaInu) as *Dog value in argument to DogVoicecompilerIncompatibleAssign

https://m.yes24.com/Goods/Detail/124624242
Go 언어로 배우는 웹 애플리케이션 개발 - 예스24
베테랑 고퍼가 알려주는 Go 언어 핸즈온 가이드Go 언어로 REST API 웹 애플리케이션을 개발할 때 반드시 알아야 할 지식을 알려준다. 전반부에는 웹 애플리케이션을 개발하기 전에 알아야 할 Go 언
m.yes24.com
'Golang' 카테고리의 다른 글
채널 SELECT 활용 (0) | 2024.02.16 |
---|