最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解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ǔ)語法知識(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語?的?法method是?種作?于特定類型變量的函數(shù),這種特定類型變量叫做Receiver(接受者、接收者、接收器); 2、接受者的概念類似于傳統(tǒng)?向?qū)ο笳Z?中的this或self關(guān)鍵字; 3、Go語?的接受者強(qiáng)調(diào)了?法具有作?對(duì)象,?函數(shù)沒有作?對(duì)象; 4、?個(gè)?法就是?個(gè)包含了接受者的函數(shù); 5、Go語?中, 接受者的類型可以是任何類型,不僅僅是結(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)文章

  • Go語言變量與類型使用簡(jiǎn)明指南

    Go語言變量與類型使用簡(jiǎn)明指南

    Go語言是靜態(tài)編程語言,在Go語言中數(shù)據(jù)類型用于聲明函數(shù)和變量,這篇文章主要介紹了Go語言變量與類型使用的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-09-09
  • 一文帶你掌握Go語言中文件的寫入操作

    一文帶你掌握Go語言中文件的寫入操作

    這篇文章主要和大家分享一下Go語言中文件的寫入操作,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Go語言有一定的幫助,需要的小伙伴可以參考一下
    2022-12-12
  • Go源碼分析之預(yù)分配slice內(nèi)存

    Go源碼分析之預(yù)分配slice內(nèi)存

    這篇文章主要從Go語言源碼帶大家分析一下預(yù)分配slice內(nèi)存的相關(guān)知識(shí),文中的示例代碼簡(jiǎn)潔易懂,對(duì)我們深入了解go有一定的幫助,需要的可以學(xué)習(xí)一下
    2023-08-08
  • vscode搭建go開發(fā)環(huán)境案例詳解

    vscode搭建go開發(fā)環(huán)境案例詳解

    對(duì)于Visual Studio Code開發(fā)工具,有一款優(yōu)秀的GoLang插件,今天通過本文給大家介紹下vscode搭建go開發(fā)環(huán)境的詳細(xì)教程,感興趣的朋友跟隨小編一起看看吧
    2021-12-12
  • 一文帶你了解Go語言中的指針和結(jié)構(gòu)體

    一文帶你了解Go語言中的指針和結(jié)構(gòu)體

    前面的兩篇文章對(duì)?Go?語言的基礎(chǔ)語法和基本數(shù)據(jù)類型以及幾個(gè)復(fù)合數(shù)據(jù)類型進(jìn)行介紹,本文將對(duì)?Go?里面的指針和結(jié)構(gòu)體進(jìn)行介紹,也為后續(xù)文章做鋪墊,感興趣的可以了解一下
    2022-11-11
  • 深入探討Go語言中的預(yù)防性接口為什么是不必要的

    深入探討Go語言中的預(yù)防性接口為什么是不必要的

    在Go語言中,有一種從其他語言帶來的常見模式:預(yù)防性接口,雖然這種模式在?Java?等語言中很有價(jià)值,但在Go中往往會(huì)成為反模式,本文我們就來深入探討一下原因
    2025-01-01
  • Go協(xié)程和channel的實(shí)現(xiàn)

    Go協(xié)程和channel的實(shí)現(xiàn)

    本文主要介紹了GO利用channel協(xié)調(diào)協(xié)程的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Go并發(fā)與鎖的兩種方式該如何提效詳解

    Go并發(fā)與鎖的兩種方式該如何提效詳解

    如果沒有鎖,在我們的項(xiàng)目中,可能會(huì)存在多個(gè)goroutine同時(shí)操作一個(gè)資源(臨界區(qū)),這種情況會(huì)發(fā)生競(jìng)態(tài)問題(數(shù)據(jù)競(jìng)態(tài)),下面這篇文章主要給大家介紹了關(guān)于Go并發(fā)與鎖的兩種方式該如何提效的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • GO語言中接口和接口型函數(shù)的具體使用

    GO語言中接口和接口型函數(shù)的具體使用

    本文主要介紹了GO語言中接口和接口型函數(shù)的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • 使用go連接clickhouse的實(shí)戰(zhàn)操作

    使用go連接clickhouse的實(shí)戰(zhàn)操作

    這篇文章主要給大家介紹了關(guān)于使用go連接clickhouse的實(shí)戰(zhàn)操作,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用go具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-03-03

最新評(píng)論

翁牛特旗| 雅江县| 平阳县| 香河县| 鲁甸县| 奈曼旗| 厦门市| 醴陵市| 陕西省| 红原县| 龙州县| 桂林市| 阳山县| 神农架林区| 徐汇区| 同江市| 石家庄市| 横峰县| 临朐县| 大石桥市| 广灵县| 子洲县| 措勤县| 永顺县| 闽侯县| 额尔古纳市| 清原| 礼泉县| 洛阳市| 满洲里市| 甘孜县| 盐城市| 萨嘎县| 望江县| 麻栗坡县| 南部县| 乌拉特中旗| 武清区| 京山县| 循化| 井研县|