anomalocaristan’s blog

JSやGo、設計などについて学んだことをメモしておくサイトです

goのinterfaceを学ぶ 〜その1〜

Goのインターフェースが結構複雑だったので整理

interfaceの利用手順

インターフェースを用意する

package main

type animal interface {
  raw()  //吠える
}

func main() {

}

構造体と、その構造体に紐づく関数を定義

package main

type animal interface {
  raw()  //吠える
}

func main() {

}

type object struct {
  name string
  age  int
}

func (o *object) row(r string) {
  fmt.Println(r)
}

インターフェース型の引数を受ける関数を用意する

package main

type animal interface {
  raw()  //吠える
}

func main() {
  
}

type object struct {
  name string
  age  int
}

func (o *object) row(r string) {
  fmt.Println(r)
}

func something(interface *animal) {
  interface.row("rowwwwww")
}

↑の関数に構造体を渡す

package main

type animal interface {
  raw()  //吠える
}

func main() {
  var o = object{name: "cat", age: 3}
  something(o)
  // => cat rowwwwww
}

type object struct {
  name string
  age  int
}

func (o *object) row(r string) {
  fmt.Println(r)
}

func something(interface *animal) {
  interface.row("rowwwwww")
}

参考サイト

A Tour of Go