Item, Rental, DiscountItem, Items는 모두 Cost() 메서드와 String() 메서드를 가지므로 Itemer 인터페이스로 사용될 수 있다. 즉, Order 구조체의 Itemer 필드에는 여러 값을 Items로 묶어 할당할 수도 있고, Item, Rental, DiscountItem를 직접 할당할 수도 있다.
func main() { shirt := Item{"Men's Slim-Fit Shirt", 25000, 3} video := Rental{"Interstellar", 1000, 3, Days} eventShoes := DiscountItem{ Item{"Women's Walking Shoes", 50000, 3}, 10.00, } order1 := Order{Items{shirt, eventShoes}, 10.00} order2 := Order{video, 5.00} fmt.Println(order1) fmt.Println(order2) }
실행 결과
Total price: 231000(tax rate: 10.00) Order details: 2 items. total: 210000 - [Mhuen's Slim-Fit Shirt] 75000 - [Women's Walking Shoes] 150000 => 135000(10% DC) Total price: 3150(tax rate: 5.00) Order details: [Interstellar] 3000
Note Go 기본 라이브러리에서 인터페이스 임베딩이 사용된 예
• io 패키지의 ReadWriter 인터페이스
type ReadWriter interface { Reader Writer }
• io 패키지의 ReadWriteCloser 인터페이스
type ReadWriteCloser interface { Reader Writer Closer }