回答:
Cと同様の可変引数構文を使用できます。
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
。
実行例:http : //ideone.com/8htWfx
関数はvarargsであり...
、ハンターマクミレンが示すように、表記でスライスを使用できます。または、関数には固定数の引数があり、コードを記述するときにそれらをアンパックできます。
これを固定数の引数の関数で動的に実行したい場合は、リフレクションを使用できます。
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)
}
https://play.golang.org/p/2nN6kjHXIsd
いくつかのvarをmap [string] 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');
いいえ、この言語での直接的なサポートはありません。PythonとRuby、そしてあなたが言及しているJavaScript。すべて動的/スクリプト言語です。Goは、動的言語よりも、たとえばCに非常に近いです。「適用」機能は動的言語には便利ですが、CやGoなどの静的言語にはほとんど役に立ちません。
arr
、配列ではありません。それはスライス。