Golang 中的方法

Golang中的方法 類似於函數,但有一個主要區別:它們有一個接收器參數,允許存取接收器的屬性。接收器可以是結構體類型,也可以是非結構體類型,但兩者必須位於同一個套件中。無法為其他套件中定義的類型建立方法,包括intstring等內建類型;否則,編譯器將報告錯誤。

Golang 中的方法

例如:

package main

import "fmt"

// Định nghĩa một struct
type person struct {
    name string
    age  int
}

// Định nghĩa một phương thức với struct receiver
func (p person) display() {
    fmt.Println("Name:", p.name)
    fmt.Println("Age:", p.age)
}

func main() {
    // Tạo một phiên bản của struct
    a := person{name: "a", age: 25}
    
    // Gọi phương thức
    a.display()
}

結果:

Name: a
Age: 25

句法

func(receiver_name Type)  method_name(parameter_list) (return_type) { 
// Code
}

接收器:可以使用此方法存取。

接收器為結構體類型的方法

在 Go 中,您可以定義接收器類型為 struct 的方法。接收器可以在方法內部存取。前面的範例使用結構類型的接收器說明了這種方法。

接收器的方法不是結構類型

Go 也允許方法具有非結構接收器,只要接收器類型和方法定義在同一個套件中。您不能定義具有來自另一個套件的接收器類型的方法(例如 int、string)。

例如:

package main

import "fmt"

// Tạo một kiểu tùy biến dựa trên int
type number int

// Định nghĩa một phương thức với receiver không phải struct
func (n number) square() number {
    return n * n
}

func main() {
    a := number(4)
    b := a.square()

    fmt.Println("Square of", a, "is", b)
}

結果:

Square of 4 is 16

帶有接收者指標的方法

在 Go 中,方法可以有指標接收器。這使得方法中所做的更改能夠反映在呼叫者中,而這對於值接收器來說是不可能的。

句法:

func (p *Type) method_name(...Type) Type {    // Code}

例如:

package main

import "fmt"

// Defining a struct
type person struct {
    name string
}

// Phương thức với receiver pointer để chỉnh sửa dữ liệu
func (p *person) changeName(newName string) {
    p.name = newName
}

func main() {
    a := person{name: "a"}
    
    fmt.Println("Before:", a.name)
    
    // Gọi phương thức này để thay đổi tên
    a.changeName("b")
    
    fmt.Println("After:", a.name)
}

結果:

Before: a
After: b

方法接受指標和值

與函數不同,Go 方法可以接受值和指標接收器。您可以傳遞指標或值,方法將相應地處理。

例如:

package main
import "fmt"

type person struct {
    name string
}
// Phương thức với receiver pointer
func (p *person) updateName(newName string) {
    p.name = newName
}

// Phương thức với receiver value 
func (p person) showName() {
    fmt.Println("Name:", p.name)
}

func main() {
    a := person{name: "a"}
    
    // Gọi phương thức con trỏ cùng giá trị
    a.updateName("b")
    fmt.Println("After pointer method:", a.name)
    
    // Gọi phương thức giá trị với con trỏ
    (&a).showName()
}

結果:

After pointer method: b
Name: b

方法和函數之間的區別

方法
包含接收器 不包含接收器
可以定義具有相同名稱但不同類型的方法。 不允許使用具有相同名稱但不同類型的函數。
不能用作最高級 可用作上級對象
Sign up and earn $1000 a day ⋙

Leave a Comment

為什麼要單膝跪地求婚?

為什麼要單膝跪地求婚?

中世紀的騎士(以及《權力的遊戲》中的瓊恩·雪諾)以跪姿而聞名,這可能影響了今天的求婚方式。這就是為什麼男人要單膝跪地向女友求婚。

正向的引言、快樂的狀態、簡短的樂觀和正向的狀態

正向的引言、快樂的狀態、簡短的樂觀和正向的狀態

哪種開朗樂觀的狀態最能幫助您振奮精神?文章將為你總結一些簡短、有意義、快樂、樂觀的狀態,讓你快速恢復精神。

維生素 B12 缺乏的健康風險

維生素 B12 缺乏的健康風險

您的紅血球、神經和大腦都依賴維生素 B12。但有些人攝取的這種營養素不足,維生素 B12 缺乏會導致許多健康問題。

如果每天都戴胸罩,你的身體會發生什麼變化?

如果每天都戴胸罩,你的身體會發生什麼變化?

除了為您的服裝提供基礎並讓您看起來更漂亮之外,胸罩還可以透過其他多種方式為您帶來好處。

ChatGPT 全球崩潰

ChatGPT 全球崩潰

11月22日上午,OpenAI的ChatGPT聊天機器人出現大面積問題,全球眾多用戶無法使用這款AI應用。

如何使用WiFi分析儀來提升您的Wi-Fi連接

如何使用WiFi分析儀來提升您的Wi-Fi連接

僅僅購買新的 Wi-Fi 路由器並不足以增強您的網路。為了充分利用您的 Wi-Fi,您需要確保獲得最佳的範圍、訊號和頻率。

身體與我們溝通的方式常常被忽視

身體與我們溝通的方式常常被忽視

我們的身體就像機器,不斷發出訊號和訊息,但我們很少注意它們。讓我們看看我們的身體想透過下面的訊號告訴我們什麼。

世界上最高的陸地動物

世界上最高的陸地動物

世界上最高的動物是?本文將為您總結陸地上最大的動物。

計算機中的基本測量單位

計算機中的基本測量單位

位元 (Bit) 是二進位數字 (Binary Digit) 的縮寫,是電腦記憶體中最小單位的術語,可以儲存兩種資訊狀態之一:0 或 1(可以理解為電腦中電晶體的開啟或關閉狀態)。

如何利用提醒功能改善你的筆記習慣

如何利用提醒功能改善你的筆記習慣

良好的記憶習慣始於提醒——它們在正確的時間出現,捕捉那些轉瞬即逝的想法。

7 款免費應用,幫助你瞬間提升手機拍照質量

7 款免費應用,幫助你瞬間提升手機拍照質量

仍有許多免費且功能強大的攝影工具可用於增強您的照片。

讓 Google 搜尋小工具更實用的技巧

讓 Google 搜尋小工具更實用的技巧

Google 搜尋小工具可讓您快速存取 Google 搜尋和發現提要,以及語音搜尋和 Google Lens。

如何登入並關閉密碼過期提醒

如何登入並關閉密碼過期提醒

如果您在 Windows 登入畫面上看到「您的密碼已過期,必須變更」訊息,這是因為 Windows 本機帳戶的密碼預設每 42 天過期一次。

如何在 Chrome、Coc Coc 上將 WebP 圖片轉換為 PNG、JPG

如何在 Chrome、Coc Coc 上將 WebP 圖片轉換為 PNG、JPG

要將 WebP 圖像轉換為 PNG 和 JPG 格式,我們可以透過多種不同的方式來完成,例如直接在圖像 URL 上進行轉換或使用圖像轉換工具。

ChatGPT 畫布模式的 4 種使用方法

ChatGPT 畫布模式的 4 種使用方法

ChatGPT 的新 Canvas 模式為世界領先的生成式 AI 引擎中的寫作和編輯增添了新的維度。