Go 方法 學習筆記

衣舞晨風發表於2017-08-12

方法method

  • Go 中雖沒有class,但依舊有method
  • 通過顯示說明receiver來實現與某個型別的組合
  • 只能為同一個包中的型別定義方法
  • Receiver 可以是型別的值或者指標
  • 不存在方法過載
  • 可以使用值或指標來呼叫方法,編譯器會自動完成轉換
  • 從某種意義上來說,方法是函式的語法糖,因為receiver其實就是方法所接收的第1個引數(Method Value vs. Method Expression)
  • 如果外部結構和嵌入結構存在同名方法,則優先呼叫外部結構的方法
  • 型別別名不會擁有底層型別所附帶的方法
  • 方法可以呼叫結構中的非公開欄位

1、init函式

package main

import (
    "fmt"
)

var I int

func main() {

}

func init() {
    I = 0
    fmt.Println("Call mypackage init1")
}

func init() {
    I = 1
    fmt.Println("Call mypackage init2")
}

輸出結果:
這裡寫圖片描述

2、方法與函式

package main

import (
    "fmt"
)

type A struct {
    name string
}

type B struct {
    name string
}

// int都可以進行擴充
type DD int8

func main() {
    // a := A{}
    // a.print()
    // // (*a).print()
    // fmt.Println(a)

    // b := B{}
    // b.print()
    // fmt.Println(b)

    //呼叫方法的兩種方式
    var d DD
    d.print()
    (DD).print(d)
}

func (a *A) print() {
    a.name = "a_name"
    fmt.Println("A")
}

func (b B) print() {
    b.name = "b_name"
    fmt.Println("B")
}

func (d DD) print() {
    fmt.Println("D")
}

本文參考整理自:《Go 程式設計基礎》

個人微信公眾號:
這裡寫圖片描述

作者:jiankunking 出處:http://blog.csdn.net/jiankunking

相關文章