首頁 > 後端開發 > Golang > 主體

詳解Go 語言中的方法

藏色散人
發布: 2020-08-27 13:29:44
轉載
2746 人瀏覽過

Golang教學          以下中由Golang教學

專欄為大家一起介紹Go 語言中的方法所理解,而希望對需要的朋友則有所幫助! 詳解Go 語言中的方法

go 方法

#定義

方法是具有特殊接收器參數的函數,即在func 和方法名之間方法接收者。

func (s Student) GetName() string  {
    return s.name}func (s *Student) SetName(name string) {
    s.name = name}
登入後複製

我們可以把接收者類型為指標的成員方法叫做指標方法,把接收者類型為非指標的成員方法叫做值方法。

在你需要修改物件的時候,才必須用指標(引用傳遞),否則將所屬類型宣告為字面量即可(值傳遞)。另外避免在每個方法呼叫上複製該值。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false;">type Integer intfunc (a *Integer) Increase(i Integer) { *a = *a + i}func main() { var a Integer = 2 var b Integer = 2 //a.Increase(b) //(&amp;amp;a).Increase(b) (*Integer).Increase(&amp;amp;a, b) fmt.Println(a)}</pre><div class="contentsignin">登入後複製</div></div>該方法並不屬於Integer 類,而是屬於指向Integer 的指標類型,我們在呼叫方法時,之所以可以直接在a 實例上呼叫Increase 方法,是因為Go 語言編譯階段會自動將a 轉換為對應的指標型別&a,所以真正呼叫的程式碼是

(&a).Increase(b)

其實是語法糖<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false;">type A struct { name string}func (a A) Name() string { a.name = &quot;Hi! &quot; + a.name return a.name}func main() { a := A{name: &quot;test&quot;} fmt.Println(a.Name()) fmt.Println(A.Name(a))}</pre><div class="contentsignin">登入後複製</div></div>a.Name() 其實是

A.Name(a)

的語法糖,變數a 就是所謂的方法接收者。

func NameOfA(a A) string {
  a.name = "Hi! " + a.name  return a.name}func main() {
  t1 := reflect.TypeOf(A.Name)
  t2 := reflect.TypeOf(NameOfA)

  fmt.Println(t1 == t2)// true}
登入後複製
go 語言中函數型別只和參數與回傳值相關,所以這兩個型別相等就能證明

方法本質上就是普通的函數,而接收者就是隱含的第一個參數###。 ###

以上是詳解Go 語言中的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:learnku.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!