91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Go語言中函數可變參數實例分析

發布時間:2022-07-18 13:41:43 來源:億速云 閱讀:106 作者:iii 欄目:開發技術

本篇內容主要講解“Go語言中函數可變參數實例分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Go語言中函數可變參數實例分析”吧!

基本語法

在Python中,在函數參數不確定數量的情況下,可以使用如下方式動態在函數內獲取參數,args實質上是一個list,而kwargs是一個dict

def myFun(*args, **kwargs):

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

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

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

其實本質上三個點的表達方式就是利用數組這一特性,實現可變參數。來看一下定義格式:

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

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

示例一:函數中獲取可變參數

循環獲取可變參數,并且將部分arguments傳入子函數

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")
}

對上面的例子進行分析:

可變參數arg類型為[]string

通過for進行循環并獲取值

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

示例二:將切片傳給可變參數

我們在上面程序的基礎上實現一個新的函數mySubFunc,嘗試將切片(Slice)傳遞給該函數

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:]獲取部分可變參數的值

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

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

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

示例三:多參數

我們再來看一個多參數的例子

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)
}

來分析一下這個代碼:

函數參數一個為整型變量num,和可變變量arg

主函數中第一個參數為num,而后面的則存儲于arg中

所以輸出結果如下

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

到此,相信大家對“Go語言中函數可變參數實例分析”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

芒康县| 金沙县| 凌云县| 江口县| 台东市| 西吉县| 五华县| 扎鲁特旗| 宝应县| 汪清县| 长白| 伊川县| 玛多县| 蕉岭县| 洛浦县| 浦江县| 德庆县| 类乌齐县| 乐清市| 辉县市| 社会| 闸北区| 汉川市| 合江县| 香格里拉县| 贺州市| 枣阳市| 淮安市| 山东省| 乡宁县| 花莲县| 色达县| 台州市| 健康| 石屏县| 阳江市| 安溪县| 庄河市| 麻栗坡县| 汤原县| 县级市|