golang文法總結(二十一):方法method

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。    Go不像其它面相對象語言一樣可以寫個class,然後在class裡面寫一堆方法,但是它也很巧妙的實現了這種效果,我們只需要在普通函數前面加個接受者(receiver,寫在函數名前面的括弧裡面),這樣編譯器就知道這個函數(方法)屬於哪個struct了。
    下面是簡單樣本:
type A struct {Name string} func (a A)foo()  { //接收者寫在函數名前面的括弧裡面fmt.Println("foo")} func main() {a := A{}a.foo() //foo}
    需要注意的是,因為Go不支援函數重載,所以某個接收者(receiver)的某個方法只能對應一個函數,比如下面的就屬於方法重複,編譯無法通過:
func (a A)foo()  {fmt.Println("foo")}func (a A)foo(i int) {fmt.Println(i)}
    這些可以叫做是方法綁定,接收者不僅可以是struct類型,還可以是任意自訂的其它類型,舉個栗子:
type Integer intfunc (integer *Integer)talk()  {fmt.Println("i am ",*integer)}func main() {var i Integer = 250i.talk() //i am  250}
    這下知道方法綁定是多麼的靈活了吧
    注意方法綁定只能綁定當前包裡的類型

    其實有兩種調用方式,上面講的那種官方管它叫method value,還有另一種調用方式,叫method expression:
type Integer intfunc (integer *Integer)talk()  {fmt.Println("i am ",*integer)}func main() {var i Integer = 250(*Integer).talk(&i) //i am  250}
    最後說下存取權限,因為Go是以大小寫來區分是公有還是私人,但都是針對包層級的,所以在包內所有的都能訪問,而方法綁定本身只能綁定包內的類型,所以方法可以訪問接收者所有成員。如果是包外調用某類型的方法,則需要看方法名是大寫還是小寫,大寫能被包外訪問,小寫只能被包內訪問。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.