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

普通電視和智慧電視的差別

普通電視和智慧電視的差別

智慧電視確實風靡全球。憑藉如此多的強大功能和互聯網連接,科技改變了我們觀看電視的方式。

為什麼冷凍室沒有燈,冷藏室有燈?

為什麼冷凍室沒有燈,冷藏室有燈?

冰箱是家庭中常見的家用電器。冰箱通常有 2 個隔間,冷藏室寬敞,並且每次使用者打開時都會自動亮燈,而冷凍室狹窄且沒有燈。

解決 Wi-Fi 速度變慢的網路擁塞問題的 2 種方法

解決 Wi-Fi 速度變慢的網路擁塞問題的 2 種方法

除了路由器、頻寬和乾擾之外,Wi-Fi 網路還受到許多因素的影響,但也有一些智慧的方法可以增強您的網路效能。

如何使用 Tenorshare Reiboot 將 iOS 17 降級到 iOS 16 且不遺失數據

如何使用 Tenorshare Reiboot 將 iOS 17 降級到 iOS 16 且不遺失數據

如果您想在手機上恢復穩定的 iOS 16,這裡是卸載 iOS 17 並從 iOS 17 降級到 16 的基本指南。

每天吃優​​格會對身體產生什麼影響?

每天吃優​​格會對身體產生什麼影響?

酸奶是一種美妙的食物。每天吃優​​格好嗎?每天吃酸奶,你的身體會發生怎樣的變化?讓我們一起來了解一下吧!

哪種米最有益於健康?

哪種米最有益於健康?

本文討論了最有營養的米種類以及如何最大限度地發揮所選米的健康益處。

如何早上準時起床

如何早上準時起床

制定睡眠時間表和就寢習慣、更改鬧鐘以及調整飲食都是可以幫助您睡得更好、早上準時起床的一些措施。

玩 Rent Please! 的提示新手模擬房東

玩 Rent Please! 的提示新手模擬房東

請租用! Landlord Sim 是一款適用於 iOS 和 Android 的模擬手機遊戲。您將扮演一個公寓大樓的房東,開始出租公寓,目標是升級公寓的內部並為租戶做好準備。

最新浴室塔防代碼及代碼輸入方法

最新浴室塔防代碼及代碼輸入方法

取得浴室塔防 Roblox 遊戲代碼並兌換令人興奮的獎勵。它們將幫助您升級或解鎖具有更高傷害的塔。

變壓器的結構、符號和工作原理

變壓器的結構、符號和工作原理

讓我們以最準確的方式了解變壓器的結構、符號和運作原理。

人工智慧讓智慧電視更上一層樓的四種方式

人工智慧讓智慧電視更上一層樓的四種方式

從更好的影像和聲音品質到語音控制等等,這些人工智慧功能讓智慧電視變得更好!

為什麼 ChatGPT 比 DeepSeek 更好

為什麼 ChatGPT 比 DeepSeek 更好

最初,人們對DeepSeek寄予厚望。作為 ChatGPT 強勁競爭對手的 AI 聊天機器人,它承諾提供智慧聊天功能和體驗。

認識 Fireflies.ai:免費的 AI 秘書,幫你節省大量工作時間

認識 Fireflies.ai:免費的 AI 秘書,幫你節省大量工作時間

在記下其他重要事項時很容易錯過重要細節,而在聊天時記筆記可能會分散注意力。 Fireflies.ai 就是解決方案。

如何飼養 Minecraft 中的美西蠑螈,馴服 Minecraft 中的蠑螈

如何飼養 Minecraft 中的美西蠑螈,馴服 Minecraft 中的蠑螈

如果玩家知道如何使用 Axolot Minecraft,它將成為玩家在水下操作時的絕佳助手。

《噤界:前路》PC遊戲配置

《噤界:前路》PC遊戲配置

《寂靜之地:前路》的配置評價相當高,因此您需要在決定下載之前考慮其配置。