


Bilakah masa terbaik untuk menjalankan Automigrate dengan GORM
editor php Yuzi akan berkongsi dengan anda hari ini masa terbaik untuk menjalankan Automigrate pada GORM. GORM ialah perpustakaan ORM bahasa Go yang berkuasa yang boleh memudahkan operasi pangkalan data. Automigrate ialah alat migrasi automatik yang disediakan oleh GORM, yang boleh menjana struktur jadual pangkalan data secara automatik berdasarkan definisi model. Jadi bilakah masa terbaik untuk menjalankan Automigrate dengan GORM? Mari kita terokai bersama-sama.
Kandungan soalan
Kebanyakan contoh go/gorm yang saya lihat menunjukkan panggilan automigrate serta-merta selepas membuka sambungan pangkalan data, termasuk dokumentasi gorm di sini. Untuk perkhidmatan api, ini adalah panggilan mahal/diperlukan untuk setiap permintaan api. Jadi, saya fikir, untuk perkhidmatan api, automigrate harus dialih keluar daripada proses biasa dan dikendalikan secara berasingan. Adakah pemahaman saya betul?
Dari dokumentasi gorm
... db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{}) if err != nil { panic("failed to connect database") } // Migrate the schema db.AutoMigrate(&Product{}) ...
Penyelesaian
Ini tidak berlaku dengan setiap permintaan api. Tak dekat pun. Ini berlaku setiap kali apl dilancarkan, jadi pada asasnya: sambung ke main
中的数据库,并在那里运行 automigrate
. Lulus sambungan sebagai pergantungan kepada pengendali/pakej perkhidmatan anda/apa sahaja yang anda perlukan. Pengendali http boleh mengaksesnya di sana.
Pada asasnya ia seperti ini:
package main func main() { db, err := gorm.open(sqlite.open("test.db"), &gorm.config{}) if err != nil { fmt.printf("failed to connect to db: %v", err) os.exit(1) } // see below how this is handled frepo := foo.new(db) // all repos here frepo.migrate() // this handles migrations // create request handlers fhandler := handlers.newfoo(frepo) // migrations have already been handled mux := http.newservemux() mux.handlefunc("/foo/list", fhandler.list) // set up handlers // start server etc... }
Sertakan kod untuk berinteraksi dengan pangkalan data dalam pakej, seperti ini:
package foo // the db connection interface as you use it type connection interface { create() find() automigrate(any) } type foo struct { db connection } func new(db connection) *foo { return &foo{ db: db, } } func (f *foo) migrate() { f.db.automigrate(&stuff{}) // all types this repo deals with go here } func (f *foo) getall() ([]stuff, error) { ret := []stuff{} res := f.db.find(&ret) return ret, res.error }
Kemudian susunkan pengendali anda dengan cara yang munasabah dan berikan mereka repositori (kandungan pakej aka foo):
package handlers type FooRepo interface { GetAll() ([]Stuff, error) } type FooHandler struct { repo FooRepo } func NewFoo(repo FooRepo) *FooHandler { return &FooHandler{ repo: repo, } } func (f *FooHandler) List(res http.ResponseWriter, req *http.Request) { all, err := f.repo.GetAll() if err != nil { res.WriteHeader(http.StatusInternalServerError) io.WriteString(w, err.Error()) return } // write response as needed }
Setiap kali anda menggunakan versi aplikasi anda yang dikemas kini, main
函数都会调用 automigrate
, dan aplikasi akan mengendalikan permintaan tersebut tanpa perlu sentiasa menyambung semula ke pangkalan data atau cuba mengendalikan pemindahan berulang kali.
Saya tidak pasti mengapa anda fikir aplikasi anda perlu menjalankan persediaan setiap permintaan, terutamanya memandangkan fungsi utama anda (atau beberapa fungsi dipanggil daripada main
) secara eksplisit mencipta pelayan http dan mendengar permintaan pada port tertentu. Sebelum mula mendengar permintaan, sambungan pangkalan data dan migrasi seterusnya harus dikendalikan. Ia bukan sebahagian daripada mengendalikan permintaan, pernah...
Atas ialah kandungan terperinci Bilakah masa terbaik untuk menjalankan Automigrate dengan GORM. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Perpustakaan yang digunakan untuk operasi nombor terapung dalam bahasa Go memperkenalkan cara memastikan ketepatannya ...

Masalah Threading Giliran di GO Crawler Colly meneroka masalah menggunakan Perpustakaan Colly Crawler dalam bahasa Go, pemaju sering menghadapi masalah dengan benang dan permintaan beratur. � ...

Perpustakaan mana yang dibangunkan oleh syarikat besar atau projek sumber terbuka yang terkenal? Semasa pengaturcaraan di GO, pemaju sering menghadapi beberapa keperluan biasa, ...

Perbezaan antara percetakan rentetan dalam bahasa Go: perbezaan kesan menggunakan fungsi println dan rentetan () sedang ...

GO Pointer Syntax dan menangani masalah dalam penggunaan perpustakaan Viper semasa pengaturcaraan dalam bahasa Go, adalah penting untuk memahami sintaks dan penggunaan petunjuk, terutama dalam ...

Dua cara untuk menentukan struktur dalam bahasa Go: perbezaan antara VAR dan jenis kata kunci. Apabila menentukan struktur, pergi bahasa sering melihat dua cara menulis yang berbeza: pertama ...

Mengapa lelaran peta di GO menyebabkan semua nilai menjadi elemen terakhir? Dalam bahasa Go, ketika berhadapan dengan beberapa soalan wawancara, anda sering menemui peta ...

Masalah menggunakan redisstream untuk melaksanakan beratur mesej dalam bahasa Go menggunakan bahasa Go dan redis ...
