golang math / bigライブラリの奇妙な構文

ルーク:

math/biggolang ライブラリを使用して、ビット文字列の操作を実行しています。すべてが正常に動作していますが、このライブラリの関数のほとんどで、構文が次の理由で困惑しています。

var num1 big.Int
var num2 big.Int
var result big.Int

// Set num1 and num2 

result.And(&num1,&num2)

の代わりに:

var num1 big.Int
var num2 big.Int

// Set num1 and num2 

result = num1.And(num2)

などの関数Andも操作の結果を返すため(https://golang.org/src/math/big/int.go?s=18912:18945#L798)。

なぜこれが選ばれた実装だと思いますか?

これは、パフォーマンスまたは既知の不良ガベージコレクションが原因である可能性がありますか?これは単なる好奇心です、事前に感謝します!

icza:

何がおかしいのかわかりませんが、これは大規模でない操作の動作と一致しています。たとえば、intオペランドにビットごとのANDを使用して、オペランド変更さませ

a, b := 3, 15
c := a & b
fmt.Println(c) // Prints 3

x, y := big.NewInt(3), big.NewInt(15)
z := new(big.Int).And(x, y)
fmt.Println(z) // Prints 3

これは、変数を準備している場合、その変数を「ターゲット」として使用して結果を保存できることも意味します。int上記のa & b式の結果を格納するために既存の変数を使用できるのと同じように

c = a & b

z.And(x, y)

つまりbig.Int、結果を得るために新しい値を再割り当てする必要はありません(パフォーマンスへの影響)。

また、メソッドは通常同じポインタを返すため、特定の操作をチェーンできます。

この形式のメソッドは通常、着信レシーバーも返し、単純な呼び出しチェーンを有効にします。

したがって、次のようなこともできます:

fmt.Println(z.And(x, y).BitLen())  // Prints 2

Go Playgroundで例を試してください

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Golang math / big Unmarshal Lost Precision

分類Dev

Golang, math/big: what is the max value of *big.Int

分類Dev

How to insert math/big.Int in mongo via mgo in golang

分類Dev

Golangの奇妙な型定義構文(名前、型、文字列リテラル)

分類Dev

math.hにリンクするCライブラリでGolangのcgoをどのように使用しますか?

分類Dev

golangのmgoを介してmongoにmath / big.Intを挿入する方法

分類Dev

math / randを使用してgolangでランダム変数を生成する

分類Dev

node-apnライブラリの奇妙な構文エラー

分類Dev

golangのmath.Powは、このフォーラムに適していますか?

分類Dev

golangのmath / bigパッケージでサポートされる最大の値は何ですか?

分類Dev

単純なgolangコードを構築できません-スライスリテラル構文

分類Dev

else if math / bigの条件

分類Dev

Golangブラケット構文の説明

分類Dev

math.hライブラリを使用しないSin関数

分類Dev

gosqlite(golang)の奇妙なsqliteエラー

分類Dev

golang math.MinInt64文字列をintに変換すると失敗する

分類Dev

java.mathライブラリのMath.cbrt(a)メソッドの時間計算量

分類Dev

Golang構文エラー:ファイルへの書き込み中に予期しないEOF

分類Dev

Java Mathライブラリに浮動小数点を返す関数がないのはなぜですか?

分類Dev

Math.sin内のMath.radians

分類Dev

Math.max表示されない構文エラーはありますか?

分類Dev

Golangの構造体リテラル

分類Dev

Golang-構文エラー:予期しない{トップレベル宣言の後

分類Dev

JodaTimeのMath.max(...)

分類Dev

Math.NetのTriangularSolver

分類Dev

inputValのMath.pow()

分類Dev

整数のMath.Floor

分類Dev

bigIntのMath.exp()?

分類Dev

Math.round() の代替

Related 関連記事

  1. 1

    Golang math / big Unmarshal Lost Precision

  2. 2

    Golang, math/big: what is the max value of *big.Int

  3. 3

    How to insert math/big.Int in mongo via mgo in golang

  4. 4

    Golangの奇妙な型定義構文(名前、型、文字列リテラル)

  5. 5

    math.hにリンクするCライブラリでGolangのcgoをどのように使用しますか?

  6. 6

    golangのmgoを介してmongoにmath / big.Intを挿入する方法

  7. 7

    math / randを使用してgolangでランダム変数を生成する

  8. 8

    node-apnライブラリの奇妙な構文エラー

  9. 9

    golangのmath.Powは、このフォーラムに適していますか?

  10. 10

    golangのmath / bigパッケージでサポートされる最大の値は何ですか?

  11. 11

    単純なgolangコードを構築できません-スライスリテラル構文

  12. 12

    else if math / bigの条件

  13. 13

    Golangブラケット構文の説明

  14. 14

    math.hライブラリを使用しないSin関数

  15. 15

    gosqlite(golang)の奇妙なsqliteエラー

  16. 16

    golang math.MinInt64文字列をintに変換すると失敗する

  17. 17

    java.mathライブラリのMath.cbrt(a)メソッドの時間計算量

  18. 18

    Golang構文エラー:ファイルへの書き込み中に予期しないEOF

  19. 19

    Java Mathライブラリに浮動小数点を返す関数がないのはなぜですか?

  20. 20

    Math.sin内のMath.radians

  21. 21

    Math.max表示されない構文エラーはありますか?

  22. 22

    Golangの構造体リテラル

  23. 23

    Golang-構文エラー:予期しない{トップレベル宣言の後

  24. 24

    JodaTimeのMath.max(...)

  25. 25

    Math.NetのTriangularSolver

  26. 26

    inputValのMath.pow()

  27. 27

    整数のMath.Floor

  28. 28

    bigIntのMath.exp()?

  29. 29

    Math.round() の代替

ホットタグ

アーカイブ