亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

基礎(chǔ)知識(shí)

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

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

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

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

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

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

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

3、方法是通過"."的方式進(jìn)行調(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運(yùn)行結(jié)果為", a)
	user := User{age: 12, name: "張三"}
	user.function1()
	fmt.Println("結(jié)構(gòu)體user的結(jié)果是", user.age)
}

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

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

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

是否同名

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

package main
import "fmt"
// 函數(shù)和方法
func function1(a *int) {
	*a = 19
}
func function1() {
	fmt.Println("隨便打印一點(diǎn)東西")
}
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
}

仍然是運(yùn)行上訴代碼,查看一下執(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

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

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

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

總結(jié)

含義不同

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

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

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

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

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

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

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

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

相關(guān)文章

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

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

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

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

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

    Go語(yǔ)言開發(fā)redis封裝及簡(jiǎn)單使用詳解

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

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

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

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

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

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

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

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

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

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

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

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

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

    golang定時(shí)任務(wù)cron項(xiàng)目實(shí)操指南

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

最新評(píng)論