tft每日頭條

 > 科技

 > go語言變量和函數

go語言變量和函數

科技 更新时间:2025-01-24 03:08:15

go語言變量和函數?在Python中,在函數參數不确定數量的情況下,可以使用如下方式動态在函數内獲取參數,args實質上是一個list,而kwargs是一個dict,今天小編就來說說關于go語言變量和函數?下面更多詳細答案一起來看看吧!

go語言變量和函數(Go語言中函數可變參數)1

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

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

  • 與上面的代碼大部分邏輯相同,這裡利用切片arg[1:]獲取部分可變參數的值
  • 在傳輸給子函數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

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved