天天看點

Go語言的面向對象結構的定義參數前後差別使用指針作為方法接收者值接收者 V.S 指針接收者

go語言僅支援封裝,不支援繼承和多态。

go語言沒有class,隻有struct。

結構的定義

Go語言的面向對象結構的定義參數前後差別使用指針作為方法接收者值接收者 V.S 指針接收者
  • go 語言即使是指針,不像 C語言使用

    ->

    也可一直使用

    .

    引用下去
Go語言的面向對象結構的定義參數前後差別使用指針作為方法接收者值接收者 V.S 指針接收者
  • go 沒有構造器,但可使用工廠函數
Go語言的面向對象結構的定義參數前後差別使用指針作為方法接收者值接收者 V.S 指針接收者

那麼這到底建立在了堆還是棧呢?

不需要知道。如果傳回了沒人用就在棧上

如果傳回了有人用,就在堆,并參與到 GC。

是以沒必要知道,編譯器自己都知道。

參數前後差別

  • 參數定義在函數名前後有啥差別呢?
Go語言的面向對象結構的定義參數前後差別使用指針作為方法接收者值接收者 V.S 指針接收者
  • 使用差別
Go語言的面向對象結構的定義參數前後差別使用指針作為方法接收者值接收者 V.S 指針接收者

Go都是值傳遞,記住了,和 Java 一樣。

使用指針作為方法接收者

Go語言的面向對象結構的定義參數前後差別使用指針作為方法接收者值接收者 V.S 指針接收者
  • 隻有使用指針才可以改變結構内容
  • nil 指針也可調用方法(Go 很特殊)

值接收者 V.S 指針接收者

  • 要改變内容必須使用指針接收者
  • 結構過大也考慮使用指針接收者
  • 一緻性:如有指針接收者,最好都是指針接收者

值接收者才是go語言特有的!

值/指針接收者均可接收值/指針