2016-05-03 13 views
2

は、私は、正しい答えを得るために(&を使用して)bigSumとしての基準を渡す必要がなぜ私がそうでなければ、我々が返されます、2つの質問`fmt.Println`はGoでどのように動作しますか?

  1. を持って、このコード

    import (
        "fmt" 
        "math/big" 
    ) 
    
    func main() { 
        var b1,b2,b3,bigSum big.Float 
    
        b1.SetFloat64(25.3) 
        b2.SetFloat64(76.2) 
        b1.SetFloat64(53.1) 
    
        bigSum.Add(&b1, &b2).Add(&b3, &bigSum) 
    
        fmt.Println(bigSum) // {53 0 0 1 false [9317046909104082944] 8} 
        fmt.Println(&bigSum) // 129.3 
    } 
    

    を持っていますオブジェクト?

  2. PrintlnはGoでどのように機能しますか?どのタイプをどのようなフォーマットに適用すればよいのか、どのように知っていますか?

+2

re 2 - 反射を使用します。 'reflect'パッケージをチェックアウトしてください。 –

答えて

6
  1. PrintlnStringerインタフェースを実装するかどうかを判断します。そうであれば、String()を呼び出してフォーマットされた値を取得します。 big.Floatはそれをポインタ受信機用に実装しているため、参照を渡す必要があります。それ以外の場合はPrintlnはそれが構造体であることを検出し、すべてのフィールドを反射を使用して出力します。
  2. オープンソースです。あなたは自分で見ることができますhttps://golang.org/src/fmt/print.go?#L738それはタイプスイッチと反射を使用します。
+0

https://play.golang.org/p/Qy17yy6Q4n – eSniff