Apa alasannya?
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?
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.