در زبان گو مثل سایر زبان های شی گرا امکان overriding مستقیم یک متد وجود ندارد اما در عوض شما می توانید با استفاده از type embedding و پیاده سازی متد یک اینترفیس این تکنیک را انجام دهید و به متدی که override انجام داده Shadow Method می گویند.
به مثال زیر توجه کنید :
1package main
2
3import "fmt"
4
5type User interface {
6 PrintName()
7}
8
9type Person struct {
10 Name string
11}
12
13func (p Person) PrintName() {
14 fmt.Println("My name is", p.Name)
15}
16
17type Student struct {
18 Person
19}
20
21func (s Student) PrintName() {
22 fmt.Println("I am a student and my name is", s.Name)
23}
24
25func main() {
26 p := Person{Name: "John"}
27 s := Student{Person{Name: "Jane"}}
28
29 p.PrintName()
30 s.PrintName()
31}
در کد فوق ما یک اینترفیس User داریم که داخلش یک متد PrintName وجود دارد که این متد نام شخص یا دانش آموز را به همراه توضیحات چاپ می کند. حال ۲ تا ساختار داریم Person و Student که ساختار student فقط Person را جاسازی کرده است. سپس برای این ۲ ساختار متد PrintName را پیاده سازی کردیم با این تفاوت که داخل متد PrintName ساختار Student متن دیگری قرار دادیم. در تابع main ما متغیر p, s را از نوع Person و Student ایجاد و مقدار دهی کردیم. سپس متد PrintName هر دو را فراخوانی کردیم.