欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Go函數(shù)和方法之間有什么區(qū)別

 更新時間:2023年07月18日 09:03:30   作者:Mandy的名字被占用了  
這篇文章就簡單和大家聊一聊在Go中函數(shù)與方法之間的區(qū)別,文章通過代碼示例介紹的非常詳細,對我們的學習或工作有一定的幫助,感興趣的小伙伴跟著小編一起來看看吧

基礎(chǔ)知識

在了解兩者不同之前,還是簡單的回顧一下基礎(chǔ)語法知識。下面的實例,定義一個函數(shù)和方法,然后調(diào)用函數(shù)和方法。

package main
import "fmt"
// 函數(shù)和方法
func function1() {
	fmt.Println("我是一個名字叫做function1的函數(shù)")
}
type User struct {
	name string
	age  uint
}
func (u User) function1() {
	fmt.Println("我是一個名字叫做function1的方法")
}
func main() {
	// 調(diào)用函數(shù)
	function1()
	// 調(diào)用方法
	User{}.function1()
}

執(zhí)行上述代碼,go run main,會打印出如下的結(jié)果:

kert@kertdeMBP ~/c/p/w/l/g/b/demo1 (master)> go run demo5.go
我是一個名字叫做function1的函數(shù)
我是一個名字叫做function1的方法

通過上面示例代碼,我們可以大致得出幾點結(jié)論。

1、調(diào)用函數(shù)時,直接使用函數(shù)名即可(如果調(diào)用者和被調(diào)用者都在同一個包名下);調(diào)用方法,需要實例化結(jié)構(gòu)體,然后通過結(jié)構(gòu)體的方式去調(diào)用方法(結(jié)構(gòu)體實例化有多種,示例代碼使用的是字面量的方式)。

2、函數(shù)在定義時,直接使用 func + 函數(shù)名()即可;方法在定義時,需要使用 func (方法的接收者) + 函數(shù)名()才可以。

3、方法是通過"."的方式進行調(diào)用,而函數(shù)是直接使用函數(shù)名。

使用指針

接下來,在函數(shù)和方法中使用指針大佬修改值的效果。

package main
import "fmt"
// 函數(shù)和方法
func function1(a *int) {
	*a = 19
}
type User struct {
	name string
	age  uint
}
func (u *User) function1() {
	u.age = 10
}
func main() {
	a := 10
	function1(&a)
	fmt.Println("函數(shù)function1運行結(jié)果為", a)
	user := User{age: 12, name: "張三"}
	user.function1()
	fmt.Println("結(jié)構(gòu)體user的結(jié)果是", user.age)
}

運行上訴代碼,查看一下執(zhí)行效果。go run main。

kert@kertdeMBP ~/c/p/w/l/g/b/demo1 (master)> go run demo5.go
函數(shù)function1運行結(jié)果為 19
結(jié)構(gòu)體user的結(jié)果是 10

上面代碼中,通過給函數(shù)傳入一個指針,修改形參a的值;通過方法接收一個指針類型的接收者。都能夠修改原值,這一點不管是函數(shù)還是方法,都沒是一樣的。

是否同名

接下來,通過下面的實例代碼,來演示函數(shù)和方法是否支持定義相同的名稱。

package main
import "fmt"
// 函數(shù)和方法
func function1(a *int) {
	*a = 19
}
func function1() {
	fmt.Println("隨便打印一點東西")
}
type User struct {
	name string
	age  uint
}
func (u *User) function1() {
	u.age = 10
}
type Animal struct {
	name string
	age  uint
}
func (u *Animal) function1() {
	u.age = 10
}

仍然是運行上訴代碼,查看一下執(zhí)行結(jié)果是怎么樣的。go run main。

kert@kertdeMBP ~/c/p/w/l/g/b/demo1 (master)> go run demo5.go
# command-line-arguments
./demo5.go:10:6: function1 redeclared in this block
    ./demo5.go:6:6: other declaration of function1

可以通過運行結(jié)果得出如何結(jié)論。

1、函數(shù)的名稱是不能重復的,不管是傳遞的參數(shù)還是返回的參數(shù)是否相同,函數(shù)名稱都不允許重復定義。

2、方法的名稱是可以重復的,前提是方法的接收者不能相同。

總結(jié)

含義不同

1、函數(shù)function是?段具有獨?功能的代碼,可以被反復多次調(diào)?,從?實現(xiàn)代碼復?。??法method是?個類的?為功能,只有該類的對象才能調(diào)?。

?法有接受者,?函數(shù)?接受者

1、Go語?的?法method是?種作?于特定類型變量的函數(shù),這種特定類型變量叫做Receiver(接受者、接收者、接收器); 2、接受者的概念類似于傳統(tǒng)?向?qū)ο笳Z?中的this或self關(guān)鍵字; 3、Go語?的接受者強調(diào)了?法具有作?對象,?函數(shù)沒有作?對象; 4、?個?法就是?個包含了接受者的函數(shù); 5、Go語?中, 接受者的類型可以是任何類型,不僅僅是結(jié)構(gòu)體, 也可以是struct類型外的其他任何類型。

函數(shù)不可以重名,??法可以重名

1、只要接受者不同,則?法名可以?樣。

調(diào)用方式不一樣

1、方法是struct對象通過.點號+名稱來調(diào)用,而函數(shù)是直接使用名稱來調(diào)用。

到此這篇關(guān)于詳解Go函數(shù)和方法之間有什么區(qū)別的文章就介紹到這了,更多相關(guān)Go函數(shù)和方法區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Golang中處理import自定義包出錯問題的解決辦法

    Golang中處理import自定義包出錯問題的解決辦法

    最近開始使用Go/GoLand在import自定義包時出現(xiàn)各種狀況,下面這篇文章主要給大家介紹了關(guān)于Golang中處理import自定義包出錯問題的解決辦法,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-11-11
  • Go語言基礎(chǔ)類型及常量用法示例詳解

    Go語言基礎(chǔ)類型及常量用法示例詳解

    這篇文章主要為大家介紹了Go語言基礎(chǔ)類型及常量的用法及示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11
  • Go語言開發(fā)redis封裝及簡單使用詳解

    Go語言開發(fā)redis封裝及簡單使用詳解

    這篇文章主要為大家介紹了Go語言開發(fā)redis的封裝及簡單使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2021-11-11
  • golang中兩個協(xié)程交替打印數(shù)字和字母的實現(xiàn)

    golang中兩個協(xié)程交替打印數(shù)字和字母的實現(xiàn)

    這篇文章給大家介紹了golang中兩個協(xié)程交替打印數(shù)字和字母的實現(xiàn),文中通過代碼示例講解的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • GO語言基本類型String和Slice,Map操作詳解

    GO語言基本類型String和Slice,Map操作詳解

    這篇文章主要為大家介紹了GO語言基本類型String和Slice,Map操作示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • Go語言中并發(fā)的工作原理

    Go語言中并發(fā)的工作原理

    本文詳細講解了Go語言中并發(fā)的工作原理,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • 淺析Golang中調(diào)度器的關(guān)鍵機制與性能

    淺析Golang中調(diào)度器的關(guān)鍵機制與性能

    Golang的調(diào)度器是其并發(fā)模型的核心組件,負責管理Goroutine的調(diào)度和執(zhí)行,本文將從理論和代碼層面分析Golang調(diào)度器的關(guān)鍵機制,感興趣的可以了解下
    2025-03-03
  • 詳解golang函數(shù)多返回值錯誤處理與error類型

    詳解golang函數(shù)多返回值錯誤處理與error類型

    這篇文章主要為大家詳細介紹了golang中函數(shù)多返回值錯誤處理與error類型的相關(guān)知識,文中的示例代碼簡潔易懂,感興趣的小伙伴快跟隨小編一起學習吧
    2023-10-10
  • go gin中間件關(guān)于 c.next()、c.abort()和return的使用小結(jié)

    go gin中間件關(guān)于 c.next()、c.abort()和return的使用小結(jié)

    中間件的執(zhí)行順序是按照注冊順序執(zhí)行的,中間件可以通過 c.abort() + retrurn 來中止當前中間件,后續(xù)中間件和處理器的處理流程,?這篇文章給大家介紹go gin中間件關(guān)于 c.next()、c.abort()和return的使用小結(jié),感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • golang定時任務cron項目實操指南

    golang定時任務cron項目實操指南

    Go實現(xiàn)的cron 表達式的基本語法跟linux 中的 crontab基本是類似的,下面這篇文章主要給大家介紹了關(guān)于golang定時任務cron項目實操的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-12-12

最新評論