Gorm: Mengapa selalu memanggil s.clone

Dibuat pada 22 Jun 2016  ·  3Komentar  ·  Sumber: go-gorm/gorm

Apa alasannya?

Komentar yang paling membantu

Berikut adalah poin saya.

Karena gorm menggunakan chainable API , memanggil db.Func() akan mengembalikan pointer *DB, jadi jika tidak ada s.clone(), pengguna akan mendapatkan dua pointer, *db asli dan *db yang dikembalikan, yang sebenarnya menunjuk ke yang sama obyek.

Ini berbahaya dan dapat menyebabkan beberapa masalah bersamaan.

Semua 3 komentar

Berikut adalah poin saya.

Karena gorm menggunakan chainable API , memanggil db.Func() akan mengembalikan pointer *DB, jadi jika tidak ada s.clone(), pengguna akan mendapatkan dua pointer, *db asli dan *db yang dikembalikan, yang sebenarnya menunjuk ke yang sama obyek.

Ini berbahaya dan dapat menyebabkan beberapa masalah bersamaan.

Maaf telah membuka topik itu lagi, tetapi saya mulai membaca kode Gorm dan sepertinya Anda mungkin mendapat manfaat dari membiarkan salinan runtime, alih-alih perpustakaan melakukannya secara manual. Jika Anda menggunakan penerima non-pointer, Anda akan mendapatkan salinan baru setiap saat, dan masih mendapat manfaat dari rangkaian.

Jika tertarik, lihat pemikiran saya lebih detail di sini: https://preslav.me/2019/10/06/simple-immutable-builders-in-go-using-value-receivers/

@jinzhu memikirkan komentar terakhir?

Apakah halaman ini membantu?
0 / 5 - 0 peringkat