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

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

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

基本語法

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

def myFun(*args, **kwargs):

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

關(guān)于三個點(…)Ellipsis的說明

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

其實本質(zhì)上三個點的表達(dá)方式就是利用數(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")
}

對上面的例子進(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ǔ)上實現(xiàn)一個新的函數(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()時,使用了這樣的表達(dá)方式mySubFunc(arg[1:] …),這里補充一下…對于切片用法的說明

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

在末尾位置的三個點會unpack一個切片

示例三:多參數(shù)

我們再來看一個多參數(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)
}

來分析一下這個代碼:

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

主函數(shù)中第一個參數(shù)為num,而后面的則存儲于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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go語言Gin框架實現(xiàn)HTML頁面渲染

    Go語言Gin框架實現(xiàn)HTML頁面渲染

    Web開發(fā)中,我們經(jīng)常要面對如何將數(shù)據(jù)渲染到前端的問題,這就涉及到了模板引擎的知識,Go語言的Gin框架就提供了強大的HTML模板渲染功能,本文就來為大家介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2024-01-01
  • golang?gorm的預(yù)加載及軟刪硬刪的數(shù)據(jù)操作示例

    golang?gorm的預(yù)加載及軟刪硬刪的數(shù)據(jù)操作示例

    這篇文章主要介紹了golang?gorm的預(yù)加載及軟刪硬刪的數(shù)據(jù)操作示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • Go語言如何實現(xiàn)TCP通信詳解

    Go語言如何實現(xiàn)TCP通信詳解

    go里面實現(xiàn)tcp沒有像之前寫的C++那些那么麻煩,在C++里面要先創(chuàng)建套接字,然后綁定ip地址,go里面直接就一個函數(shù)建立套接字,然后在進(jìn)行通信就可以了,下面這篇文章主要給大家介紹了關(guān)于Go語言如何實現(xiàn)TCP通信的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • GoLang 逃逸分析的機(jī)制詳解

    GoLang 逃逸分析的機(jī)制詳解

    這篇文章主要介紹了GoLang-逃逸分析的機(jī)制詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • Go語言應(yīng)用閉包之返回函數(shù)

    Go語言應(yīng)用閉包之返回函數(shù)

    這篇文章主要介紹了Go語言應(yīng)用閉包之返回函數(shù),對于非常底層的純 Go 語言代碼或者包而言,在各個操作系統(tǒng)平臺上的可移植性是非常強的,只需要將源碼拷貝到相應(yīng)平臺上進(jìn)行編譯即可,或者可以使用交叉編譯來構(gòu)建目標(biāo)平臺的應(yīng)用程序,需要的朋友可以參考下
    2023-07-07
  • Go語言線程安全之互斥鎖與讀寫鎖

    Go語言線程安全之互斥鎖與讀寫鎖

    這篇文章主要介紹了Go語言線程安全之互斥鎖與讀寫鎖,互斥鎖是為了并發(fā)的安全,在多個goroutine共同工作的時候,對于共享的數(shù)據(jù)十分不安全,而讀寫鎖效率革命,使用鎖的時候,安全與效率往往需要互相轉(zhuǎn)換,下文詳細(xì)內(nèi)容,需要的小伙伴可以參考一下
    2022-02-02
  • go語言的初始化順序,包,變量,init詳解

    go語言的初始化順序,包,變量,init詳解

    這篇文章主要介紹了go語言的初始化順序,包,變量,init詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • GO Cobra Termui庫開發(fā)終端命令行小工具輕松上手

    GO Cobra Termui庫開發(fā)終端命令行小工具輕松上手

    這篇文章主要為大家介紹了GO語言開發(fā)終端命令行小工具,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • 詳解go-micro微服務(wù)consul配置及注冊中心

    詳解go-micro微服務(wù)consul配置及注冊中心

    這篇文章主要為大家介紹了go-micro微服務(wù)consul配置及注冊中心示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Go語言讀取YAML 配置文件的兩種方式分享

    Go語言讀取YAML 配置文件的兩種方式分享

    在日常開發(fā)中,YAML 格式的文件基本上被默認(rèn)為是配置文件,其內(nèi)容因為縮進(jìn)帶來的層級感看起來非常直觀和整潔。本文分享了讀取YAML 配置文件的兩種方式,需要的可以參考一下
    2022-12-12

最新評論