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

Go可變參數(shù)函數(shù)的實(shí)現(xiàn)

 更新時(shí)間:2023年12月14日 11:36:31   作者:kobe_OKOK_  
可變參數(shù)函數(shù)是指函數(shù)參數(shù)的某個(gè)參數(shù)可有可無(wú),即這個(gè)參數(shù)的個(gè)數(shù)可以為0會(huì)多個(gè),可變參數(shù)函數(shù)參數(shù)在日常編程中大量使用,本文主要介紹了Go可變參數(shù)函數(shù)的實(shí)現(xiàn),感興趣的可以了解一下

1 定義

可變參數(shù)函數(shù)是一種參數(shù)個(gè)數(shù)可變的函數(shù)。

2 語(yǔ)法

語(yǔ)法

//關(guān)鍵字 函數(shù)名(參數(shù)1, elems為T(mén)類(lèi)型的可變參數(shù)) 返回值類(lèi)型
func name(params type, elems ...T) returntype{
	// 函數(shù)體
}

slice的append就是一個(gè)可變參數(shù)的內(nèi)部函數(shù)

func append(slice []Type, elems ...Type) []Type

可變參數(shù)示例1

package main

import "fmt"

func find(target int, group ...int) int {
	ishit := false
	index := 0
	for i, v := range group {
		if target == v {
			fmt.Printf("找到元素值:%d,在索引位置:%d\n", v, i)
			ishit = true
			index = i
		}
	}
	if !ishit {
		return -1
	} else {
		return index
	}

}

func main() {
	find(7, 1, 2, 3, 4, 5)
}

可變參數(shù)示例2

package main

import "fmt"

func add(base int, group ...int) {
	total := 0
	for _, v := range group {
		total += v
	}
	total += base
	fmt.Println("total = ", total)
}

func main() {
	add(100, 1, 2, 3, 4, 5)
}

可變參數(shù)函數(shù)的工作原理是把可變參數(shù)轉(zhuǎn)換為一個(gè)新的切片,然后被傳入函數(shù)中。

3 給可變函數(shù)參數(shù)傳入切片

package main

import "fmt"

func find(a int, elems ...int) {
	for i, v := range elems {
		if v == a {
			fmt.Printf("found value %d, at index %d", v, i)
			break
		}
	}
}

func main() {
	a := []int{1, 2, 3, 4, 5}
	find(1, a)  // cannot use a (type []int) as type int in argument to find


}

將切片直接傳遞給可變參數(shù)明顯是不可以的,但是可以通過(guò)一個(gè)語(yǔ)法糖解決這個(gè)問(wèn)題。

將切片傳入函數(shù)的可變參數(shù)位置報(bào)錯(cuò)的原因分析

多變參數(shù),將接收到的參數(shù)做為一個(gè)切片,如果直接傳遞一個(gè)切片會(huì)出現(xiàn)下面這種情況:

// 1 函數(shù)原型 
func find(a int, elems ...int) 

// 2 函數(shù)參數(shù) 為切片a 傳遞到find 等同于 []int{a} 
// 因?yàn)榍衅蟮脑仡?lèi)型為int,傳入的確是一個(gè)[]int,所以報(bào)錯(cuò)
cannot use a (type []int) as type int in argument to find
// 3 go給出的報(bào)錯(cuò)信息很友好

如何能夠?qū)⑶衅苯觽鬟f給可變參數(shù)函數(shù)?
有一個(gè)可以直接將切片傳入可變參數(shù)函數(shù)的語(yǔ)法糖,你可以在在切片后加上 … 后綴。如果這樣做,切片將直接傳入函數(shù),不再創(chuàng)建新的切片

修改上面的函數(shù)

package main

import "fmt"

func find(a int, elems ...int) {
	for i, v := range elems {
		if v == a {
			fmt.Printf("found value %d, at index %d", v, i)
			break
		}
	}
}

func main() {
	a := []int{1, 2, 3, 4, 5}
	find(1, a...) // cannot use a (type []int) as type int in argument to find

}

4 修改可變參數(shù)函數(shù)中的切片

如果使用切片…,那么會(huì)將切片直接傳遞給函數(shù),不會(huì)再創(chuàng)建新的切片,這也意味著,如果再可變參數(shù)函數(shù)內(nèi)部修改了切片,會(huì)影響到創(chuàng)建切片的位置,這可能比較抽象,直接看一個(gè)例子就好了。

示例一

package main

import "fmt"

func changeTest(s ...string) {
	s[0] = "上樹(shù)捉鳥(niǎo)"
	s[1] = "下河洗澡"
}

func main() {
	s := []string{"好好學(xué)習(xí)", "天天向上"}
	fmt.Println("傳遞前: ", s)
	changeTest(s...) // 將切片傳遞過(guò)去,changeTest不會(huì)再創(chuàng)建切片
	fmt.Println("傳遞后: ", s)
}

示例一執(zhí)行結(jié)果:

傳遞前:  [好好學(xué)習(xí) 天天向上]
傳遞后:  [上樹(shù)捉鳥(niǎo) 下河洗澡]

示例2

package main

import "fmt"

func changeTest1(s ...string) {
	s[0] = "上樹(shù)捉鳥(niǎo)"
	s[1] = "下河洗澡"
	s = append(s, "窈窕淑女", "君子好逑")
	fmt.Println("in changeTest: ", s)
}

func main() {
	s := []string{"好好學(xué)習(xí)", "天天向上"}
	fmt.Println("傳遞前: ", s)
	changeTest1(s...) // 將切片傳遞過(guò)去,changeTest不會(huì)再創(chuàng)建切片
	fmt.Println("傳遞后: ", s)
}

示例2執(zhí)行結(jié)果:

傳遞前:  [好好學(xué)習(xí) 天天向上]
in changeTest:  [上樹(shù)捉鳥(niǎo) 下河洗澡 窈窕淑女 君子好逑]
傳遞后:  [上樹(shù)捉鳥(niǎo) 下河洗澡]

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

相關(guān)文章

  • Go語(yǔ)言單元測(cè)試基礎(chǔ)從入門(mén)到放棄

    Go語(yǔ)言單元測(cè)試基礎(chǔ)從入門(mén)到放棄

    這篇文章主要介紹了Go單元測(cè)試基礎(chǔ)從入門(mén)到放棄為大家開(kāi)啟Go語(yǔ)言單元測(cè)試第一篇章,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • go?doudou開(kāi)發(fā)單體RESTful服務(wù)快速上手教程

    go?doudou開(kāi)發(fā)單體RESTful服務(wù)快速上手教程

    這篇文章主要為大家介紹了go?doudou開(kāi)發(fā)單體RESTful服務(wù)快速上手教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Go?container包的介紹

    Go?container包的介紹

    這篇文章主要介紹了Go?container包,go語(yǔ)言container包中有List和Element容器ist和Element都是結(jié)構(gòu)體類(lèi)型。結(jié)構(gòu)體類(lèi)型有一個(gè)特點(diǎn),那就是它們的零值都會(huì)是擁有其特定結(jié)構(gòu),但沒(méi)有任何定制化內(nèi)容的值,相當(dāng)于一個(gè)空殼,下面一起進(jìn)文章來(lái)了解具體內(nèi)容吧
    2021-12-12
  • Go使用select切換協(xié)程入門(mén)詳解

    Go使用select切換協(xié)程入門(mén)詳解

    這篇文章主要為大家介紹了Go使用select切換協(xié)程入門(mén)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • go for range遍歷二維數(shù)組的示例

    go for range遍歷二維數(shù)組的示例

    今天小編就為大家分享一篇關(guān)于go for range遍歷二維數(shù)組的示例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-04-04
  • golang API開(kāi)發(fā)過(guò)程的中的自動(dòng)重啟方式(基于gin框架)

    golang API開(kāi)發(fā)過(guò)程的中的自動(dòng)重啟方式(基于gin框架)

    這篇文章主要介紹了golang API開(kāi)發(fā)過(guò)程的中的自動(dòng)重啟方式(基于gin框架),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • 詳解Go多協(xié)程并發(fā)環(huán)境下的錯(cuò)誤處理

    詳解Go多協(xié)程并發(fā)環(huán)境下的錯(cuò)誤處理

    這篇文章主要介紹了詳解Go多協(xié)程并發(fā)環(huán)境下的錯(cuò)誤處理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Golang實(shí)現(xiàn)程序優(yōu)雅退出的方法詳解

    Golang實(shí)現(xiàn)程序優(yōu)雅退出的方法詳解

    項(xiàng)目開(kāi)發(fā)過(guò)程中,隨著需求的迭代,代碼的發(fā)布會(huì)頻繁進(jìn)行,在發(fā)布過(guò)程中,Golang如何讓程序做到優(yōu)雅的退出?本文就來(lái)詳細(xì)為大家講講
    2022-06-06
  • Go中使用單調(diào)時(shí)鐘獲得準(zhǔn)確的時(shí)間間隔問(wèn)題

    Go中使用單調(diào)時(shí)鐘獲得準(zhǔn)確的時(shí)間間隔問(wèn)題

    這篇文章主要介紹了Go中使用單調(diào)時(shí)鐘獲得準(zhǔn)確的時(shí)間間隔,在go語(yǔ)言中,沒(méi)有直接調(diào)用時(shí)鐘的函數(shù),可以通過(guò)?time.Now()?獲得帶單調(diào)時(shí)鐘的?Time?結(jié)構(gòu)體,并通過(guò)Since和Until獲得相對(duì)準(zhǔn)確的時(shí)間間隔,需要的朋友可以參考下
    2022-06-06
  • 基于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-09-09

最新評(píng)論

高碑店市| 通山县| 连州市| 资兴市| 潞城市| 马公市| 梁河县| 芦溪县| 宜兰市| 台州市| 昭平县| 泾阳县| 通化市| 崇仁县| 黔江区| 东辽县| 巴东县| 蒲江县| 千阳县| 佛学| 平南县| 神木县| 兴化市| 绥芬河市| 蓬安县| 隆昌县| 兴仁县| 和静县| 民丰县| 息烽县| 大姚县| 尼木县| 金阳县| 南乐县| 淮安市| 和林格尔县| 东辽县| 离岛区| 元江| 贵州省| 宁明县|