Bagaimana saya bisa mengecek apakah dua irisan sama?
go
go-reflect
wei2912
sumber
sumber
==
Operator didefinisikan dalam Go hanya beberapa jenis, jadi apalagi, pertanyaan ini juga merupakan salah satu yang sah.slice can only be compared to nil
, dan bertanya-tanya apakah ada cara golang idiomatik untuk memeriksa kesetaraan irisan ... jika operator kesetaraan tidak ditentukan oleh bahasa, maka saya merasa masuk akal untuk bertanya dengan cara yang paling efisien untuk mencapainya. Pertanyaan tidak perlu ditutupJawaban:
Anda perlu mengulang setiap elemen dalam slice dan tes. Kesetaraan untuk irisan tidak ditentukan. Namun, ada
bytes.Equal
fungsi jika Anda membandingkan nilai tipe[]byte
.sumber
for i, v := range a { if v != b[i] { return false } }
.Anda harus menggunakan reflect.DeepEqual ()
sumber
Ini hanya contoh menggunakan reflect.DeepEqual () yang diberikan dalam jawaban @ VictorDeryagin.
Hasil:
Cobalah di Go Playground
sumber
Jika Anda memiliki dua
[]byte
, bandingkan menggunakan byte . Sama . Dokumentasi Golang mengatakan:Pemakaian:
Ini akan dicetak
sumber
Dan untuk saat ini, berikut adalah https://github.com/google/go-cmp yang
sumber
Jika Anda tertarik untuk menulis tes, maka
github.com/stretchr/testify/assert
adalah teman Anda.Impor perpustakaan di awal file:
Kemudian di dalam tes yang Anda lakukan:
Kesalahan yang diminta adalah:
sumber
assert.Equal
Penggunaan internalreflect.DeepEqual
yang mungkin membuat tes Anda berjalan lebih lambat dan akhirnya pipa Anda.