Interfaces and Errors
Interface Basics
Interfaces describe behavior by listing methods.
interface
An interface is satisfied by any type that has the required methods.
Interface Basics
interface_intro.go
Replay: real traced execution (multi-file project)
package main
import "fmt"
type Speaker interface {
Speak() string
}
type Person struct {
Name string
}
func (p Person) Speak() string {
return "hello from " + p.Name
}
func main() {
var name = "Ada"
var speaker Speaker = Person{Name: name}
message := speaker.Speak()
fmt.Println("name=", name)
fmt.Println("message=", message)
}
package main
import "fmt"
type Speaker interface {
Speak() string
}
type Person struct {
Name string
}
func (p Person) Speak() string {
return "hello from " + p.Name
}
func main() {
var name = "Matz"
var speaker Speaker = Person{Name: name}
message := speaker.Speak()
fmt.Println("name=", name)
fmt.Println("message=", message)
}
package main
import "fmt"
type Speaker interface {
Speak() string
}
type Person struct {
Name string
}
func (p Person) Speak() string {
return "hello from " + p.Name
}
func main() {
var name = "Grace"
var speaker Speaker = Person{Name: name}
message := speaker.Speak()
fmt.Println("name=", name)
fmt.Println("message=", message)
}
name ← "Ada", speaker ← main.Person{Name:"Ada"}
17func main() {18 var name→ "Ada" = "Ada" //@name="Matz", "Grace"19 var speaker→ main.Person{Name:"Ada"} Speaker = Person{Name: name→ "Ada"}20 message := speakermain.Person{Name:"Ada"}.Speak()func (p Person) Speak() string
13func (p Person) Speak() string {14 return "hello from " + p.Name"Ada"15}message ← "hello from Ada"
19 var speaker Speaker = Person{Name: name}20 message→ "hello from Ada" := speakermain.Person{Name:"Ada"}.Speak()2122 fmt.Println("name=", name"Ada")23 fmt.Println("message=", message"hello from Ada")24}outputname= Ada message= hello from Ada
name ← "Matz", speaker ← main.Person{Name:"Matz"}
17func main() {18 var name→ "Matz" = "Matz"19 var speaker→ main.Person{Name:"Matz"} Speaker = Person{Name: name→ "Matz"}20 message := speakermain.Person{Name:"Matz"}.Speak()func (p Person) Speak() string
13func (p Person) Speak() string {14 return "hello from " + p.Name"Matz"15}message ← "hello from Matz"
19 var speaker Speaker = Person{Name: name}20 message→ "hello from Matz" := speakermain.Person{Name:"Matz"}.Speak()2122 fmt.Println("name=", name"Matz")23 fmt.Println("message=", message"hello from Matz")24}outputname= Matz message= hello from Matz
name ← "Grace", speaker ← main.Person{Name:"Grace"}
17func main() {18 var name→ "Grace" = "Grace"19 var speaker→ main.Person{Name:"Grace"} Speaker = Person{Name: name→ "Grace"}20 message := speakermain.Person{Name:"Grace"}.Speak()func (p Person) Speak() string
13func (p Person) Speak() string {14 return "hello from " + p.Name"Grace"15}message ← "hello from Grace"
19 var speaker Speaker = Person{Name: name}20 message→ "hello from Grace" := speakermain.Person{Name:"Grace"}.Speak()2122 fmt.Println("name=", name"Grace")23 fmt.Println("message=", message"hello from Grace")24}outputname= Grace message= hello from Grace