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

Go函數(shù)的使用示例教程

 更新時(shí)間:2024年07月09日 12:30:37   作者:五敷有你  
這篇文章主要介紹了Go函數(shù)的使用示例,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧

函數(shù)返回多個(gè)值

用法如下:

package main
import (
	"fmt"
	"strconv"
)
// 返回多個(gè)返回值,無(wú)參數(shù)名
func MultFunc1(a int, b int) (int, string) {
	a = a + 1
	b = b + 1
	//數(shù)字轉(zhuǎn)字符串
	itoa := strconv.Itoa(b)
	return a, itoa
}
// 返回多個(gè)返回值,有參數(shù)名
func MultFunc2(a int, b int) (r1 int, r2 int) {
	//形參有默認(rèn)值 是0
	fmt.Println("形參r1: ", r1, "r2: ", r2)
	r1 = a + 1
	r2 = b + 1
	return
}
func MultFunc3(a int, b int) (int, int) {
	a = a + 1
	b = b + 1
	return a, b
}
func main() {
	var a, b = MultFunc1(1, 2)
	fmt.Println("a=", a, "b=", b)
	var c, d = MultFunc2(3, 4)
	fmt.Println("c=", c, "d=", d)
	var e, f = MultFunc3(5, 6)
	fmt.Println("e=", e, "f=", f)
}

形參是有默認(rèn)值的 0 ""(空串) false 

init函數(shù)和import

init函數(shù)

init函數(shù)可以在package main 中,可在其他package中,可在同一個(gè)package中出現(xiàn)多次

main函數(shù)

main 函數(shù)只能在package main中。

執(zhí)行順序

golang中有兩個(gè)保留的函數(shù):init函數(shù)(能夠應(yīng)用于所有的package)和main函數(shù)(只能用于package main)。這兩個(gè)函數(shù)在定義的時(shí)候不能有任何的返回值和參數(shù)

雖然package里面可以寫(xiě)任意多個(gè)init函數(shù),但這無(wú)論是對(duì)于可讀性還是以后的可維護(hù)性來(lái)說(shuō)都是不方便的,所以建議用戶在一個(gè)package中每個(gè)文件只寫(xiě)一個(gè)init函數(shù)。

程序的初始化和執(zhí)行都始于main包

如果main包還導(dǎo)入了其它的包,那么就會(huì)在編譯時(shí)將它們依次導(dǎo)入。有時(shí)一個(gè)包會(huì)被多個(gè)包同時(shí)導(dǎo)入,那么它只會(huì)被導(dǎo)入一次(例如很多包可能都會(huì)用到fmt包,但它只會(huì)被導(dǎo)入一次,因?yàn)闆](méi)有必要導(dǎo)入多次)。

當(dāng)一個(gè)包被導(dǎo)入時(shí),如果該包還導(dǎo)入了其它的包,那么會(huì)先將其它包導(dǎo)入進(jìn)來(lái),然后再對(duì)這些包中的包級(jí)常量和變量進(jìn)行初始化,接著執(zhí)行init函數(shù)(如果有的話),依次類推。

等所有被導(dǎo)入的包都加載完畢了,就會(huì)開(kāi)始對(duì)main包中的包級(jí)常量和變量進(jìn)行初始化,然后執(zhí)行main包中的init函數(shù)(如果存在的話),最后執(zhí)行main函數(shù)。下圖詳細(xì)地解釋了整個(gè)執(zhí)行過(guò)程:

測(cè)試?yán)?/p>

代碼結(jié)構(gòu)如下

Lib1.go

package lib1
import "fmt"
func init() {
	fmt.Print("我是lib1")
}
func Lib1Test() {
	fmt.Println("lib1Test")
}

Lib2.go

package lib2
import (
	"fmt"
)
func init() {
	fmt.Print("我是Lib2")
}
func Lib2Test() {
	fmt.Println("lib2Test")
}

main.go

注意:如果文中沒(méi)有使用,就需要家一個(gè)_

package main
 
import (
	"fmt"
	"goProject/aaa/lib1"
	"goProject/aaa/lib2"
)
 
func init() {
	fmt.Print("我是Lib3.go")
}
 
func main() {
	lib1.Lib1Test()
	lib2.Lib2Test()
 
}

注意看打印的結(jié)果

輸出的順序與我們上面圖給出的順序是一致的

函數(shù)的參數(shù)

函數(shù)如果使用參數(shù),該變量可稱為函數(shù)的形參

形參就像是定義在函數(shù)體內(nèi)的局部變量

調(diào)用函數(shù),可以通過(guò)兩種方式傳遞參數(shù):

值傳遞

值傳遞是指在調(diào)用函數(shù)的時(shí)候?qū)?shí)際的參數(shù)復(fù)制一份傳遞到函數(shù)中,這樣在函數(shù)中如果對(duì)參數(shù)進(jìn)行修改,則不會(huì)影響到實(shí)際的參數(shù)。

默認(rèn)情況下,Go 語(yǔ)言使用的是值傳遞,即在調(diào)用過(guò)程中不會(huì)影響到實(shí)際參數(shù)。

下面使用一個(gè)經(jīng)典的案例:兩數(shù)交換

package main
import "fmt"
// 值傳遞
func Swap1(a int, b int) {
	var temp = a
	a = b
	b = temp
}
// 引用傳遞
func Swap2(a *int, b *int) {
	var temp = *a
	*a = *b
	*b = temp
}
func main() {
	a := 1
	b := 2
	Swap1(a, b)
	fmt.Println("值傳遞 a=", a, "b=", b)
	Swap2(&a, &b)
	fmt.Println("引用傳遞 a=", a, "b=", b)
}

執(zhí)行結(jié)果如下:

第一種值傳遞的方式交換失敗,是因?yàn)楦北究截?/p>

第一種是引用傳遞,他是傳遞地址,那么引出了指針

引用傳遞(指針)

指針在C++中有用到。引用傳遞是指在調(diào)用函數(shù)時(shí)將實(shí)際參數(shù)的地址傳遞到函數(shù)中,那么在函數(shù)中對(duì)參數(shù)所進(jìn)行的修改,將影響到實(shí)際參數(shù)。

詳情,可以去看看C++,我也去看看!

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

相關(guān)文章

  • go1.21中slog日志包用法入門(mén)

    go1.21中slog日志包用法入門(mén)

    go1.21中,slog這一被Go語(yǔ)言團(tuán)隊(duì)精心設(shè)計(jì)的結(jié)構(gòu)化日志包正式落地,本文將帶領(lǐng)讀者上手slog,體會(huì)其與傳統(tǒng)log的差異,感興趣的小伙伴快跟隨小編一起學(xué)習(xí)一下吧
    2023-09-09
  • 如何在Go語(yǔ)言中高效使用Redis的Pipeline

    如何在Go語(yǔ)言中高效使用Redis的Pipeline

    在 Redis 中,Pipeline 就像一條流水線,它允許我們將多個(gè)命令一次性發(fā)送到服務(wù)器,下面我們就來(lái)看看如何在Go語(yǔ)言中高效使用Redis的Pipeline吧
    2024-11-11
  • gRPC的發(fā)布訂閱模式及REST接口和超時(shí)控制

    gRPC的發(fā)布訂閱模式及REST接口和超時(shí)控制

    這篇文章主要為大家介紹了gRPC的發(fā)布訂閱模式及REST接口和超時(shí)控制,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 詳解Golang中字符串的使用

    詳解Golang中字符串的使用

    這篇文章主要為大家詳細(xì)介紹了Golang中字符串的使用,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Golang有一定的幫助,感興趣的小伙伴可以了解一下
    2022-10-10
  • Go strconv包實(shí)現(xiàn)字符串和基本數(shù)據(jù)類型轉(zhuǎn)換的實(shí)例詳解

    Go strconv包實(shí)現(xiàn)字符串和基本數(shù)據(jù)類型轉(zhuǎn)換的實(shí)例詳解

    在Go語(yǔ)言(Golang)的編程實(shí)踐中,strconv包是一個(gè)非常重要的標(biāo)準(zhǔn)庫(kù),它提供了在基本數(shù)據(jù)類型(如整型、浮點(diǎn)型、布爾型)和字符串之間的轉(zhuǎn)換功能,本文給大家介紹了關(guān)于Go語(yǔ)言字符串轉(zhuǎn)換strconv,需要的朋友可以參考下
    2024-09-09
  • GO語(yǔ)言(golang)基礎(chǔ)知識(shí)

    GO語(yǔ)言(golang)基礎(chǔ)知識(shí)

    這篇文章主要介紹了GO語(yǔ)言(golang)基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-01-01
  • 詳解Go語(yǔ)言如何實(shí)現(xiàn)中文簡(jiǎn)繁轉(zhuǎn)換和拼音轉(zhuǎn)換

    詳解Go語(yǔ)言如何實(shí)現(xiàn)中文簡(jiǎn)繁轉(zhuǎn)換和拼音轉(zhuǎn)換

    這篇文章主要為大家詳細(xì)介紹了在Go語(yǔ)言如何實(shí)現(xiàn)中文簡(jiǎn)繁轉(zhuǎn)換和拼音轉(zhuǎn)換功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-02-02
  • 基于Go語(yǔ)言實(shí)現(xiàn)分金幣游戲

    基于Go語(yǔ)言實(shí)現(xiàn)分金幣游戲

    這篇文章主要為大家詳細(xì)介紹了如何利用Go語(yǔ)言實(shí)現(xiàn)分金幣游戲,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Golang實(shí)現(xiàn)SSH、SFTP操作小結(jié)

    Golang實(shí)現(xiàn)SSH、SFTP操作小結(jié)

    在日常的一些開(kāi)發(fā)場(chǎng)景中,我們需要去和遠(yuǎn)程服務(wù)器進(jìn)行一些通信,本文主要介紹了Golang實(shí)現(xiàn)SSH、SFTP操作小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-04-04
  • Go?Error?嵌套實(shí)現(xiàn)創(chuàng)建方式

    Go?Error?嵌套實(shí)現(xiàn)創(chuàng)建方式

    這篇文章主要介紹了Go?Error?嵌套到底是怎么實(shí)現(xiàn)的?大家都知道創(chuàng)建error有兩種方式分別是errors.new()另一種是fmt.errorf(),本文通過(guò)詳細(xì)例子給大家介紹,需要的朋友可以參考下
    2022-01-01

最新評(píng)論