github.com/nibnait/go-learn@v0.0.0-20220227013611-dfa47ea6d2da/src/test/chapter/ch2/18_polymorphism_test.go (about) 1 package ch2 2 3 import ( 4 "fmt" 5 "testing" 6 ) 7 8 type Code string 9 type Programmer interface { 10 writeHelloWorld() Code 11 } 12 13 type GoProgrammer struct { 14 } 15 16 func (p *GoProgrammer) writeHelloWorld() Code { 17 return "fmt.Println(\"Hello World!\")" 18 } 19 20 type JavaProgrammer struct { 21 } 22 23 func (p *JavaProgrammer) writeHelloWorld() Code { 24 return "System.out.Println(\"Hello World!\")" 25 } 26 27 func writeFirstProgram(p Programmer) { 28 fmt.Printf("p.type: %T\nret: %v\n\n", p, p.writeHelloWorld()) 29 } 30 31 func TestPolymorphism(t *testing.T) { 32 goProg := &GoProgrammer{} 33 javaProg := new(JavaProgrammer) 34 writeFirstProgram(goProg) 35 writeFirstProgram(javaProg) 36 }