در زبان گو مثل سایر زبان های شی گرا امکان overriding مستقیم یک متد وجود ندارد اما در عوض شما می توانید با استفاده از type embedding و پیاده سازی متد یک اینترفیس این تکنیک را انجام دهید و به متدی که override انجام داده Shadow Method می گویند.
به مثال زیر توجه کنید :
package main
import "fmt"
type User interface {
PrintName()
}
type Person struct {
Name string
}
func (p Person) PrintName() {
fmt.Println("My name is", p.Name)
}
type Student struct {
Person
}
func (s Student) PrintName() {
fmt.Println("I am a student and my name is", s.Name)
}
func main() {
p := Person{Name: "John"}
s := Student{Person{Name: "Jane"}}
p.PrintName()
s.PrintName()
}
در کد فوق ما یک اینترفیس User داریم که داخلش یک متد PrintName وجود دارد که این متد نام شخص یا دانش آموز را به همراه توضیحات چاپ می کند. حال ۲ تا ساختار داریم Person و Student که ساختار student فقط Person را جاسازی کرده است. سپس برای این ۲ ساختار متد PrintName را پیاده سازی کردیم با این تفاوت که داخل متد PrintName ساختار Student متن دیگری قرار دادیم. در تابع main ما متغیر p, s را از نوع Person و Student ایجاد و مقدار دهی کردیم. سپس متد PrintName هر دو را فراخوانی کردیم.