Kunci Pangkalan Data SQLite3 dalam Go
Apabila bekerja dengan pangkalan data SQLite3 dalam Go, pembangun mungkin menghadapi ralat "pangkalan data dikunci". Ini biasanya berlaku apabila beberapa utas cuba mengakses fail pangkalan data yang sama secara serentak. Walau bagaimanapun, walaupun hanya satu sambungan diwujudkan dalam kod, pemegang fail pangkalan data tambahan masih boleh dibuat.
Dalam contoh kod yang disediakan, pemegang pangkalan data dibuat dua kali. Pertama, dalam fungsi getDatabaseHandle, dan kemudian sekali lagi dalam fungsi dosomething. Ini boleh menyebabkan berbilang pemegang fail pangkalan data dibuka serentak, mengakibatkan ralat "pangkalan data dikunci".
Untuk menyelesaikan isu ini, tangguhkan penutupan keputusan pertanyaan menggunakan penangguhan. Dalam contoh kod, ubah suai fungsi dosomething seperti berikut:
func dosomething(database *sql.DB, tx *sql.Tx) error { rows, err := database.Query("select * from sometable where name=?", "some") if err != nil { return err } defer rows.Close() // Defer closing the query results if rows.Next() { ... } // some insert queries tx.Commit() }
Dengan menangguhkan penutupan keputusan pertanyaan, Go akan menutupnya secara automatik sebaik sahaja fungsi keluar, memastikan pengendalian fail pangkalan data dikeluarkan dengan betul.
Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Kunci Pangkalan Data SQLite3 dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!