Override Method in go

การ override method ในภาษา go นั้นทำได้ง่ายมากๆ ยกตัวอย่างเช่น

package main

import "fmt"

type car interface {
	color() string
	model() string
}

type toyota struct{}

func (t *toyota) color() string {
	return "silver"
}

func (t *toyota) model() string {
	return "Fortuner"
}


func tell(c car) {
	fmt.Println(c.model(),c.color())
}

type honda struct {
    *toyota
}

func (h *honda) model() string {
   return "CRV"
}

func main() {
	tell(&toyota{})
	tell(&honda{})
}

 

 

ตัวอย่างนี้เราใช้ฟังกชัน tell เป็นตัวทำงานโดยรับ interface ชื่อว่า car ที่มี method ชื่อ color และ model

tell จะบอก model และ color ของ car ให้เราทราบ

จากนั้นเราก็สร้าง toyota โดยมี method color และ model มาใส่ให้ tell เมื่อลองรันดูจะได้คำว่า “Fortuner silver”

ทีนี้เราลองสร้าง honda โดย override ฟังก์ชัน model แล้วเปลี่ยนเป็น CRV แทน

ทีนี้ tell จะแสดงข้อความว่า “CRV silver” ออกมาแทน

ทดสอบได้ที่ http://play.golang.org/p/2yPXjD-GR3