[解決済み] 2つの構造体、スライス、またはマップが等しいかどうかを比較する方法は?
2022-04-21 01:28:12
質問
2つの構造体、スライス、マップが等しいかどうかをチェックしたい。
しかし、次のようなコードで問題が発生しています。関連する行の私のコメントを参照してください。
package main
import (
"fmt"
"reflect"
)
type T struct {
X int
Y string
Z []int
M map[string]int
}
func main() {
t1 := T{
X: 1,
Y: "lei",
Z: []int{1, 2, 3},
M: map[string]int{
"a": 1,
"b": 2,
},
}
t2 := T{
X: 1,
Y: "lei",
Z: []int{1, 2, 3},
M: map[string]int{
"a": 1,
"b": 2,
},
}
fmt.Println(t2 == t1)
//error - invalid operation: t2 == t1 (struct containing []int cannot be compared)
fmt.Println(reflect.ValueOf(t2) == reflect.ValueOf(t1))
//false
fmt.Println(reflect.TypeOf(t2) == reflect.TypeOf(t1))
//true
//Update: slice or map
a1 := []int{1, 2, 3, 4}
a2 := []int{1, 2, 3, 4}
fmt.Println(a1 == a2)
//invalid operation: a1 == a2 (slice can only be compared to nil)
m1 := map[string]int{
"a": 1,
"b": 2,
}
m2 := map[string]int{
"a": 1,
"b": 2,
}
fmt.Println(m1 == m2)
// m1 == m2 (map can only be compared to nil)
}
http://play.golang.org/p/AZIzW2WunI
解決方法は?
を使用することができます。 reflect.DeepEqual または、独自の関数を実装することもできます(パフォーマンス的にはリフレクションを使うよりも良いはずです)。
http://play.golang.org/p/CPdfsYGNy_
m1 := map[string]int{
"a":1,
"b":2,
}
m2 := map[string]int{
"a":1,
"b":2,
}
fmt.Println(reflect.DeepEqual(m1, m2))
関連
-
[解決済み] Cgo: すみません、未実装です: 64ビットモードはコンパイルされていません。
-
[解決済み] Goで構造体のフィールドを反復処理する
-
[解決済み] SDL2 パッケージを提供する必要なモジュールはありません。
-
Windowsのプロパティダイアログボックスのエンコーディングの問題 ファイル名、ディレクトリ名、ボリュームラベルの構文が正しくありません。
-
[解決済み] SETNXでシングルインスタンスのRedisをロックする
-
[解決済み] go mod vendor` コマンドの目的は何ですか?
-
[解決済み] go get を使って特定のバージョンのパッケージをインポートするにはどうすればよいですか?
-
[解決済み] Goで2つのスライスを連結する
-
[解決済み] 2枚のスライスの等価性を確認する
-
[解決済み] バリューレシーバー vs. ポインターレシーバー
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Go モジュールのローカル リポジトリとして Artifactory を使用する方法
-
[解決済み] panic: ランタイムエラー:Goのインデックスが範囲外
-
[解決済み] 環境変数GOPRIVATEの設定方法
-
[解決済み] Golangで定数mapを宣言するには?
-
[解決済み] Goでオブジェクトの型を見つけるには?
-
[解決済み] Goの:=と=の演算子の違い
-
[解決済み】関数宣言の構文:関数名の前に括弧でくくられたもの
-
[解決済み】アプリケーションの自動ビルドによるバージョン管理
-
[解決済み】スライスの最後の要素を取得する方法は?
-
[解決済み] 空の構造体をチェックする方法は?