首頁 > 後端開發 > Golang > golang方法入門

golang方法入門

WBOY
發布: 2023-05-22 17:03:39
原創
469 人瀏覽過

Golang是一種強型別、靜態型別的程式語言,它在效能、並發性、簡潔性和安全性方面都有著不俗的表現。其中,方法是Golang中一個非常重要的概念,它可以讓程式設計師更方便地對結構體進行操作。本文將為讀者介紹Golang中的方法,包括方法定義、呼叫和繼承等方面的知識,以幫助初學者快速熟悉方法的使用。

一、方法的定義

方法是一種特殊的函數,它必須要有接收器(receiver)才能被呼叫。接收器可以是一個結構體類型,或是一個非結構體類型(如int、float等)。方法可以定義在任何一個套件中,而不僅僅是定義在結構體所在的套件中。

方法的定義格式如下:

func (接收器变量 接收器类型) 方法名(参数列表)(返回值列表){
    // 函数体
}
登入後複製

其中,接收器變數可以是任意合法的變數名,接收器類型是任何類型,但必須是在目前套件內的類型。在方法內部,可以使用接收器變數來存取接收器所包含的欄位和方法。

接收器類型有​​兩種:

  • 值類型接收器(value receiver):使用值類型接收器的方法會在呼叫時對接收器進行一次複製,方法內對接收器的修改不會反映到原始變數上。
  • 指標類型接收器(pointer receiver):使用指標類型接收器的方法不會對接收器進行複製,方法內對接收器的修改會直接反映到原始變數上。

範例程式碼如下:

type Rect struct{
    width, height float64
}

// 定义求面积的方法(值类型接收器)
func (r Rect) area() float64{
    return r.width * r.height
}

// 定义求面积的方法(指针类型接收器)
func (r *Rect) areaPtr() float64{
    return r.width * r.height
}
登入後複製

以上程式碼中,我們定義了兩個求矩形面積的方法,一個使用了值類型接收器,一個使用了指標類型接收器。

二、方法的呼叫

與函數的呼叫類似,方法的呼叫需要使用點操作符。在呼叫方法時,Golang會自動解析方法的接收器類型,並將方法所屬的接收器作為第一個參數傳遞給方法。

範例程式碼如下:

package main

import "fmt"

type Rect struct{
    width, height float64
}

// 定义求面积的方法(值类型接收器)
func (r Rect) area() float64{
    return r.width * r.height
}

// 定义求面积的方法(指针类型接收器)
func (r *Rect) areaPtr() float64{
    return r.width * r.height
}

func main(){
    rect := Rect{10, 20}

    // 调用值类型接收器的方法
    fmt.Println(rect.area())     // 输出:200

    // 调用指针类型接收器的方法
    fmt.Println(rect.areaPtr())  // 输出:200

    // 使用&符号获取指针,再调用指针类型接收器的方法
    fmt.Println((&rect).areaPtr()) // 输出:200
}
登入後複製

在上述程式碼中,我們建立了一個矩形rect,並呼叫了它的兩個方法。

要注意的是,在使用值類型接收器的方法時,如果接收器是結構體的值類型,則它的欄位值不會被修改。而在使用指標類型接收器的方法時,如果接收器是結構體的指標類型,則它的欄位值會被修改。

三、方法的繼承

在Golang中,一個型別可以透過組合其他型別來實現繼承。在繼承的過程中,子類型中的方法可以覆寫(override)父類型中的方法,從而實作自己的邏輯。

範例程式碼如下:

package main

import "fmt"

type Shape interface{
    area() float64
}

type Rect struct{
    width, height float64
}

// 定义矩形类的方法
func (r Rect) area() float64{
    return r.width * r.height
}

type Circle struct{
    radius float64
}

// 定义圆形类的方法
func (c Circle) area() float64{
    return 3.14 * c.radius * c.radius
}

func main(){
    rect := Rect{10, 20}
    circle := Circle{10}

    // 创建形状对象,使用接口类型接收
    var shape Shape

    // 将矩形类型赋值给接口类型
    shape = rect
    fmt.Println(shape.area())   // 输出:200

    // 将圆形类型赋值给接口类型
    shape = circle
    fmt.Println(shape.area())   // 输出:314
}
登入後複製

在上述程式碼中,我們定義了一個Shape接口,包括一個計算面積的方法。接著,我們定義了兩種形狀類型Rect和Circle,分別覆蓋了Shape介面中的area方法。最後,我們透過將Rect和Circle類型分別賦值給Shape介面類型來計算其面積。

總結:

本文介紹了Golang中方法的定義、呼叫和繼承等方面的知識。透過學習本文,讀者可以了解到方法這一重要概念在Golang中的作用,並掌握其基本的使用技巧。以此為基礎,讀者可以進一步深入學習Golang的語法和應用,掌握更高階的方法運用技巧,提升自己的程式設計能力。

以上是golang方法入門的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板