[解決済み] 構造体のマップのデフォルト値は何ですか?
2022-01-29 06:41:06
質問
マップ内の構造体のデフォルト値は何ですか?mapの値が初期化されていることを確認する方法は?
type someStruct struct {
field1 int
field2 string
}
var mapping map[int]someStruct
func main() {
mapping := make(map[int]someStruct)
}
func check(key int) {
if mapping[key] == ? {}
}
に対してチェックする必要があります。
nil
または
someStruct{}
?
解決方法は?
構造体のデフォルト値は、型によって異なる各フィールドの値が0です。
<ブロッククオート変数にストレージが割り当てられたとき、それは 宣言またはnewの呼び出し、または新しい値が作成されたとき、または 複合リテラルまたはmakeの呼び出しで、明示的な 初期化が提供されていない場合、その変数または値にはデフォルトが与えられます。 の値です。このような変数や値の各要素には、ゼロが設定されます。 ブーリアン型はfalse、数値型は0、""。 文字列はnil、ポインタ、関数、インタフェース、スライスはnilです。 チャンネル、マップがあります。この初期化は再帰的に行われるため、例えば 例えば、構造体の配列の各要素は、そのフィールドを持つことになります。 は、値が指定されないとゼロになる。
type T struct { i int; f float64; next *T }
t := new(T)
は次のようになります。
t.i == 0
t.f == 0.0
t.next == nil
しかし、キーに基づいたマップの値が存在するかどうかを確認するためには、次のように使用することができます。
i, ok := m["route"]
この文では、最初の値(i)にキー"route"に格納されている値が割り当てられています。そのキーが存在しない場合、iは値型のゼロ値(0)になります。2番目の値(ok)は、そのキーがマップに存在する場合はtrue、存在しない場合はfalseとなるboolである。
ご質問の件
<ブロッククオートnilとsomeStruct{}のどちらをチェックすればいいのでしょうか?
初期化された空の構造体をチェックするには、次のようにします。
someStruct{}
としています。
package main
import (
"fmt"
)
type someStruct struct {
field1 int
field2 string
}
var mapping map[int]someStruct
func main() {
var some someStruct
fmt.Println(some == (someStruct{}))
//mapping := make(map[int]someStruct)
}
関連
-
[解決済み] Goのペア/タプルデータ型
-
[解決済み] C++でクラスと構造体はいつ使い分けるべきか?
-
[解決済み] Goでマップにキーが含まれているかどうかを確認するには?
-
[解決済み] 配列のすべてのメンバーを同じ値で初期化するには?
-
[解決済み] C++の'struct'と'typedef struct'の違い?
-
[解決済み] 構造体変数をコンソールに表示するには?
-
[解決済み] C言語標準に準拠した構造体の初期化方法
-
[解決済み] デュレーションと整数を掛け合わせる方法は?
-
[解決済み】静的なMapを初期化する方法は?
-
[解決済み】.NETで構造体のデフォルトコンストラクタを定義できないのはなぜですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】golangでデータ構造をディープコピーする
-
[解決済み] ParseFormはいつ使うべきで、FormValueとPostFormValueはいつ使うべきですか?
-
[解決済み] Goプロセスをフォークする方法を教えてください。
-
golang インストールプロンプト:ダイヤル tcp 216.58.200.241:443: connectex: 接続の試行に失敗しました。
-
[解決済み] mod initは新しいフォルダを作成しますか? パスの意味は?
-
[解決済み] gofmtの使い方を教えてください。
-
[解決済み] Goで部分文字列を抽出する
-
[解決済み】マップからキーのスライスを取得する
-
[解決済み】Goで設定を処理する方法【終了しました
-
[解決済み】スライスの最後の要素を取得する方法は?