違いは何ですか? map[T]bool
はmap[T]struct{}
に最適化されていますか? Goのベストプラクティスはどれですか?map [T] struct {}とgolangの[T] boolをマップします
おそらくmap[T]struct{}
を使用する最もよい理由は、「値がfalse
の場合はどういう意味ですか?」という質問に答える必要がないことでしょうか? 「ゴープログラミング言語」から
違いは何ですか? map[T]bool
はmap[T]struct{}
に最適化されていますか? Goのベストプラクティスはどれですか?map [T] struct {}とgolangの[T] boolをマップします
おそらくmap[T]struct{}
を使用する最もよい理由は、「値がfalse
の場合はどういう意味ですか?」という質問に答える必要がないことでしょうか? 「ゴープログラミング言語」から
:
フィールドのない構造体のタイプは
struct{}
を書かれた、空の構造体と呼ばれています。それはサイズがゼロであり、情報を持ちませんが、それにもかかわらず が役に立つかもしれません。一部のGoプログラマは、 キーのみが重要であることを強調するために、 値タイプのマップをboolの代わりに使用していますが、スペース節約は重要でなく、構文は より厄介です。
あなたはあなただけ言うことができるので、少し進歩して、「設定」に存在するかbool
テストを使用する場合:
if mySet["something"] {
/* .. */
}
空の構造体は、他のどのような構造体型です。普通の構造体に慣れているすべてのプロパティは空の構造体に等しく適用されます。 structs{}
の配列を宣言することはできますが、もちろんそれらは記憶域を消費しません。
var x [100]struct{}
fmt.Println(unsafe.Sizeof(x)) // prints 0
空の構造体がデータを保持しない場合、2つのstruct{}
値が異なるかどうかを決定することは不可能です。
上記の文を考慮すると、メソッド受信者として使用できることを意味します。
type S struct{}
func (s *S) addr() { fmt.Printf("%p\n", s) }
func main() {
var a, b S
a.addr() // 0x1beeb0
b.addr() // 0x1beeb0
}
メモリ要件に違いがあります。ボンネットの下では、空の構造体はポインタではなく、メモリを節約するための特別な値です。
ただ一つの状態を持つ 'struct {}'に2つの状態(真偽)を持つ 'bool'を"最適化 "できますか? – Volker
YAR、それを最適化することはできません。 – zsounder