7
私の現在のプロジェクトでは、条件付きでfmt.Printlnを呼び出すロギング関数を記述しようとしています。"... interface {}"引数(Printfのような)で関数をラップする方法
私の現在のログ機能は、次のようになります。
func Log(level int, a ...interface{}) {
if level <= LogLevel {
fmt.Println(a)
}
}
しかし、私はこのようにそれを呼び出したときのログの出力は、何らかの理由で括弧に包まれます:
http://play.golang.org/p/Aa8vC54Ih0
package main
import "fmt"
var LogLevel int
func main() {
fmt.Println("string", 10, 3.1415926)
LogLevel = 1
Log(1, "string", 10, 3.1415926)
}
func Log(level int, a ...interface{}) {
if level <= LogLevel {
fmt.Println(a)
}
}
string 10 3.1415926
[string 10 3.1415926]
これは私にはログのa
引数が何とか変換されているように見えます。 a
をfmt.Printlnに直接呼び出すのと同じ方法でfmt.Printlnに渡すにはどうすればいいですか?
ありがとう行く仕様で "に...パラメータの引数を渡す" を参照してください
fmt.Println(a)
fmt.Println(a...)
に変更します。私は本当に座って、スペック全体をある程度読むべきです。 – Splitlocked'fmt.Println(a)'を実行しているときに何をしているのかを明確にするために、 'Println'はその配列を表示するようにフォーマットします。 'fmt.Println(a ...)'を実行すると 'fmt.Println(a [0]、a [1]、a [2])'などに展開され、 'Println'は配列ではなく値のシーケンス。 – joshlf