Go 将数组解包为参数

Go 将数组解包为参数,go,argument-unpacking,Go,Argument Unpacking,因此,在Python和Ruby中有splat操作符(*),用于将数组解压为参数。在Javascript中有.apply()函数。有没有一种方法可以将数组/切片解包为Go中的函数参数?这方面的任何资源都将非常好 大致如下: func my_func(a, b int) (int) { return a + b } func main() { arr := []int{2,4} sum := my_func(arr) } 如果我犯了语法错误,我向你道歉。我是新手。您可以使

因此,在Python和Ruby中有splat操作符(*),用于将数组解压为参数。在Javascript中有.apply()函数。有没有一种方法可以将数组/切片解包为Go中的函数参数?这方面的任何资源都将非常好

大致如下:

func my_func(a, b int) (int) {
    return a + b
}

func main() {
    arr := []int{2,4}
    sum := my_func(arr)
}

如果我犯了语法错误,我向你道歉。我是新手。

您可以使用类似于C的vararg语法:

package main
import "fmt"

func my_func( args ...int) int {
   sum := 0
   for _,v := range args {
      sum = sum + v
   }

   return sum;
}

func main() {
    arr := []int{2,4}
    sum := my_func(arr...)
    fmt.Println("Sum is ", sum)
}
现在你可以把你想要的东西加起来。请注意调用
my_func
函数后的重要
..


运行示例:

否,该语言对此没有直接支持。Python和Ruby,以及您提到的Javascript;都是动态/脚本语言。例如,Go比任何动态语言都更接近C。“应用”功能对于动态语言很方便,但对于C或Go等静态语言几乎没有用处,

要么您的函数是varargs,您可以使用带有
符号的切片,如Hunter McMillen所示,要么您的函数有固定数量的参数,您可以在编写代码时将其解压

如果您真的希望在具有固定数量参数的函数上动态执行此操作,则可以使用反射:

package main
import "fmt"
import "reflect"

func my_func(a, b int) (int) {
    return a + b
}

func main() {
    arr := []int{2,4}
    var args []reflect.Value
    for _, x := range arr {
        args = append(args, reflect.ValueOf(x))
    }
    fun := reflect.ValueOf(my_func)
    result := fun.Call(args)
    sum := result[0].Interface().(int)
    fmt.Println("Sum is ", sum)
}

我有理由从map[string]字符串中解包一些变量,其中一些变量周围有单引号,而另一些变量则没有。下面是它的逻辑,播放链接顶部有完整的工作片段

func unpack(a map[string]string) string {

var stmt, val string
var x, y []string
for k, v := range a {
    x = append(x, k)
    y = append(y, "'"+v+"'")
}

stmt = "INSERT INTO tdo.rca_trans_status (" + strings.Join(x, ", ")
val = ") VALUES (" + strings.Join(y, ",") + ");"

return stmt + val}
对于mssql查询,它清晰地显示为:

INSERT INTO tdo.rca_trans_status (rca_json_body, original_org, md5sum, updated, rca_key) VALUES ('blob','EG','2343453463','2009-11-10 23:00:00','prb-180');

首先,
arr
不是数组。这是一个片段。我很好奇,看看这是如何与varargs方法进行比较的。我认为它的效率会降低,但我必须对此进行研究。@HunterMcMillen你对性能比较有什么见解吗?@AkiRoss可能,但很久以前我就忘了结果了:|哈哈,没什么大不了的:我想它会慢一些,也许我自己会运行一些测试。Thanx@user7610你错了。你所指的情况与所讨论的不同。在最初的问题中,函数声明中并没有可变参数。是的,我想是的。Python/Ruby所做的可以看作是Go支持的反射调用的语法糖…
适用于
切片。对于类型
数组
,我们有类似的东西吗?