1. 程式人生 > >golang interface

golang interface

介面定義

      Interface型別可以定義一組方法,但是這些不需要實現。並且interface不能 包含任何變數。

type Interface interface {
  test1(a, b int) bool
  test2()
}

interface型別預設是一個指標

 空介面(a interface{})可以被任何型別所實現,如動物可以被貓、狗、人等實現,反之人不一定能實現動物

func main() {
  var a interface{}

  var b int
  a = b

  fmt.Printf("%T\n", a)

  var s string
  a = s

  fmt.Printf("%T", a)
}

介面只是一種規範,並沒有實現,不能直接呼叫
type testInterface int

func (t testInterface) test1(a, b int) bool {
	return a < b
}

func (t testInterface) test2() {
	fmt.Println("test2")
}

func main() {
	var a Interface
	a.test2()
}

 

介面實現

Golang中的介面,不需要顯示的實現。只要一個變數,含有介面型別中的所有方法,那麼這個變數就實現這個介面。因此,golang中沒有implement 類似的關鍵字。

type testInterface int

func (t testInterface) test1(a, b int) bool {
  return a < b
}

func (t testInterface) test2() {
  fmt.Println("test2")
}

func main() {
  var a testInterface
  fmt.Printf("%T\n", a.test1(1, 2))
  a.test2()
}

如果一個變數含有了多個interface型別的方法,那麼這個變數就實現了多個 介面。