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

Go語言中函數(shù)可變參數(shù)(Variadic Parameter)詳解

 更新時(shí)間:2022年07月18日 11:22:39   作者:孫琦Ray  
在Python中,在函數(shù)參數(shù)不確定數(shù)量的情況下,可以動(dòng)態(tài)在函數(shù)內(nèi)獲取參數(shù)。在Go語言中,也有類似的實(shí)現(xiàn)方式,本文就來為大家詳細(xì)講解一下

基本語法

在Python中,在函數(shù)參數(shù)不確定數(shù)量的情況下,可以使用如下方式動(dòng)態(tài)在函數(shù)內(nèi)獲取參數(shù),args實(shí)質(zhì)上是一個(gè)list,而kwargs是一個(gè)dict

def myFun(*args, **kwargs):

在Go語言中,也有類似的實(shí)現(xiàn)方式,只不過Go中只能實(shí)現(xiàn)類似*args的數(shù)組方式,而無法實(shí)現(xiàn)**kwargs的方式。實(shí)現(xiàn)這種方式,其實(shí)也是利用數(shù)組的三個(gè)點(diǎn)表達(dá)方式,我們這里來回憶一下。

關(guān)于三個(gè)點(diǎn)(…)Ellipsis的說明

我們經(jīng)常在Go中看到這種方式,首先三個(gè)點(diǎn)的英文是Ellipsis,翻譯成中文叫做“省略”,可能各位看到這個(gè)詞就比較好理解三個(gè)點(diǎn)的作用了。在不同的位置上有不同的作用,比如在上述數(shù)組的定義中,省略了數(shù)組長度的聲明,而是根據(jù)數(shù)組初始化值來決定。在函數(shù)定義中,我們還會(huì)看到類似的使用方法,我們再進(jìn)行詳細(xì)的說明。

其實(shí)本質(zhì)上三個(gè)點(diǎn)的表達(dá)方式就是利用數(shù)組這一特性,實(shí)現(xiàn)可變參數(shù)。來看一下定義格式:

// arg will be [...]int
func myfunc(arg ...int) {}

// paras will be [...]string
func myfunc(arg, paras ... string) {}

示例一:函數(shù)中獲取可變參數(shù)

循環(huán)獲取可變參數(shù),并且將部分arguments傳入子函數(shù)

package main

import "fmt"

func myfunc(arg ... string) {
    fmt.Printf("arg type is %T\n", arg)
    for index, value := range arg {
        fmt.Printf("And the index is: %d\n", index)
        fmt.Printf("And the value is: %v\n", value)
    }
}

func main() {
    myfunc("1st", "2nd", "3rd")
}

對(duì)上面的例子進(jìn)行分析:

可變參數(shù)arg類型為[]string

通過for進(jìn)行循環(huán)并獲取值

arg type is []string
And the index is: 0
And the value is: 1st
And the index is: 1
And the value is: 2nd
And the index is: 2
And the value is: 3rd

示例二:將切片傳給可變參數(shù)

我們在上面程序的基礎(chǔ)上實(shí)現(xiàn)一個(gè)新的函數(shù)mySubFunc,嘗試將切片(Slice)傳遞給該函數(shù)

package main

import "fmt"

func myfunc(arg ... string) {
    fmt.Printf("arg type is %T\n", arg)
    for index, value := range arg {
        fmt.Printf("And the index is: %d\n", index)
        fmt.Printf("And the value is: %v\n", value)
    }

    // Call sub funcation with arguments
    fmt.Printf("Pass arguments: %v to mySubFunc\n", arg[1:])
    mySubFunc(arg[1:] ...)
}

func mySubFunc(arg ... string) {
    for index, value := range arg {
        fmt.Printf("SubFunc: And the index is: %d\n", index)
        fmt.Printf("SubFunc: And the value is: %v\n", value)
    }
}

func main() {
    myfunc("1st", "2nd", "3rd")
}

我們來分析一下這段代碼:

1.與上面的代碼大部分邏輯相同,這里利用切片arg[1:]獲取部分可變參數(shù)的值

2.在傳輸給子函數(shù)mySubFunc()時(shí),使用了這樣的表達(dá)方式mySubFunc(arg[1:] …),這里補(bǔ)充一下…對(duì)于切片用法的說明

… signifies both pack and unpack operator but if three dots are in the tail position, it will unpack a slice.

在末尾位置的三個(gè)點(diǎn)會(huì)unpack一個(gè)切片

示例三:多參數(shù)

我們再來看一個(gè)多參數(shù)的例子

package main

import "fmt"

func myfunc(num int, arg ... int) {
    fmt.Printf("num is %v\n", num)
    for _, value := range arg {
        fmt.Printf("arg value is: %d\n", value)
    }
}

func main() {
    myfunc(1, 2, 3)
}

來分析一下這個(gè)代碼:

函數(shù)參數(shù)一個(gè)為整型變量num,和可變變量arg

主函數(shù)中第一個(gè)參數(shù)為num,而后面的則存儲(chǔ)于arg中

所以輸出結(jié)果如下

num is 1
arg value is: 2
arg value is: 3

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

相關(guān)文章

  • Go語言中map集合的具體使用

    Go語言中map集合的具體使用

    本文主要介紹了Go語言中map集合的具體使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • 深入了解Go的HttpClient超時(shí)機(jī)制

    深入了解Go的HttpClient超時(shí)機(jī)制

    在寫?Go?的過程中經(jīng)常對(duì)比這Java和GO語言的特性,踩了不少坑,也發(fā)現(xiàn)了不少有意思的地方,今天就來聊聊?Go?自帶的?HttpClient?的超時(shí)機(jī)制
    2022-11-11
  • Go語言題解LeetCode705設(shè)計(jì)哈希集合

    Go語言題解LeetCode705設(shè)計(jì)哈希集合

    這篇文章主要為大家介紹了Go語言題解LeetCode705設(shè)計(jì)哈希集合,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Go語言并發(fā)編程基礎(chǔ)上下文概念詳解

    Go語言并發(fā)編程基礎(chǔ)上下文概念詳解

    這篇文章主要為大家介紹了Go語言并發(fā)編程基礎(chǔ)上下文示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 一文理解Go 中的可尋址和不可尋址

    一文理解Go 中的可尋址和不可尋址

    如果字典的元素不存在,則返回零值,而零值是不可變對(duì)象,如果能尋址問題就大了。而如果字典的元素存在,考慮到 Go 中 map 實(shí)現(xiàn)中元素的地址是變化的,這意味著尋址的結(jié)果也是無意義的。下面我們就圍繞這個(gè)話題寫一篇文章吧,需要的朋友可以參考一下
    2021-10-10
  • Go語言錯(cuò)誤處理異常捕獲+異常拋出

    Go語言錯(cuò)誤處理異常捕獲+異常拋出

    這篇文章主要介紹了Go語言錯(cuò)誤處理異常捕獲和異常拋出,Go語言的作者認(rèn)為java等語言的錯(cuò)誤處理底層實(shí)現(xiàn)較為復(fù)雜,就實(shí)現(xiàn)了函數(shù)可以返回錯(cuò)誤類型以及簡單的異常捕獲,雖然簡單但是也非常精妙,大大的提高了運(yùn)行效率,下文需要的朋友可以參考一下
    2022-02-02
  • 一文帶你了解Go語言中的I/O接口設(shè)計(jì)

    一文帶你了解Go語言中的I/O接口設(shè)計(jì)

    I/O?操作在編程中扮演著至關(guān)重要的角色,它涉及程序與外部世界之間的數(shù)據(jù)交換,下面我們就來簡單了解一下Go語言中的?I/O?接口設(shè)計(jì)吧
    2023-06-06
  • Golang 高效排序數(shù)據(jù)詳情

    Golang 高效排序數(shù)據(jù)詳情

    本文我們介紹了怎么使用 Golang 語言標(biāo)準(zhǔn)庫 sort 包排序數(shù)據(jù),需要注意的是,除了本文使用的類型之外,其它任意類型只要實(shí)現(xiàn) sort.Interface 的三個(gè)方法,都可以調(diào)用 sort.Sort() 函數(shù)排序數(shù)據(jù)。
    2021-11-11
  • Go語言使用字符串的幾個(gè)技巧分享

    Go語言使用字符串的幾個(gè)技巧分享

    這篇文章中小編將給出一些Go語言在處理字符串方面的技巧,對(duì)大家學(xué)習(xí)Go語言具有一定的參考借鑒價(jià)值,下面一起看看吧。
    2016-09-09
  • windows下使用vscode搭建golang環(huán)境并調(diào)試的過程

    windows下使用vscode搭建golang環(huán)境并調(diào)試的過程

    這篇文章主要介紹了在windows下使用vscode搭建golang環(huán)境并進(jìn)行調(diào)試,主要包括安裝方法及環(huán)境變量配置技巧,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09

最新評(píng)論

牟定县| 洛宁县| 黎川县| 麻城市| 凤阳县| 曲水县| 修文县| 绍兴市| 陆河县| 台东市| 安岳县| 大化| 肇源县| 南投市| 固镇县| 凉山| 武强县| 旌德县| 清镇市| 红原县| 阿勒泰市| 临泽县| 桂林市| 邛崃市| 饶平县| 昌黎县| 尖扎县| 六安市| 卓资县| 吉隆县| 皋兰县| 九龙县| 当阳市| 奈曼旗| 万盛区| 大连市| 邵阳县| 天气| 利川市| 新宾| 双桥区|