Szukam niezawodne rozwiązanie do łączenia się z bazą danych MySQL z Go. Widziałem już kilka bibliotek, ale trudno jest określić różne stany kompletności i bieżące utrzymanie. Nie mam skomplikowanych potrzeb, ale chciałbym wiedzieć, na czym polegają ludzie, lub jakie jest najbardziej standardowe rozwiązanie do łączenia się z MySQL.Jaki jest zalecany sposób łączenia się z MySQL z Go?
Odpowiedz
Kilka sterowników są dostępne, ale należy brać pod uwagę tylko te, które realizować database/sql API jako
- zapewnia czyste i sprawne składni,
- zapewnia można później zmienić kierowcę bez zmiany kodu oprócz importu i połączenia.
Dwie szybkie i niezawodne sterowniki są dostępne dla MySQL:
Używałem obu z nich w produkcji, programy są uruchomione przez wiele miesięcy z podłączeniem liczby w milionach bez awarii.
Inne sterowniki bazy danych SQL are listed on go-wiki.
importu przy użyciu MyMySQL:
import (
"database/sql"
_ "github.com/ziutek/mymysql/godrv"
)
importu przy użyciu Go-mysql-driver:
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
Podłączanie i zamykanie za pomocą MyMySQL:
con, err := sql.Open("mymysql", database+"/"+user+"/"+password)
defer con.Close()
// here you can use the connection, it will be closed when function returns
Podłączanie i zamykanie za pomocą Go-mysql-driver:
con, err := sql.Open("mysql", store.user+":"+store.password+"@/"+store.database)
defer con.Close()
Wybierz jeden wiersz:
row := con.QueryRow("select mdpr, x, y, z from sometable where id=?", id)
cb := new(SomeThing)
err := row.Scan(&cb.Mdpr, &cb.X, &cb.Y, &cb.Z)
wybrać wiele wierszy i zbudować tablicę wyników:
rows, err := con.Query("select a, b from item where p1=? and p2=?", p1, p2)
if err != nil { /* error handling */}
items := make([]*SomeStruct, 0, 10)
var ida, idb uint
for rows.Next() {
err = rows.Scan(&ida, &idb)
if err != nil { /* error handling */}
items = append(items, &SomeStruct{ida, idb})
}
Wkładka:
_, err = con.Exec("insert into tbl (id, mdpr, isok) values (?, ?, 1)", id, mdpr)
Zobaczysz, że praca w Go z MySQL to wspaniałe doświadczenie: Nigdymiał problem, moje serwery prowadzony przez wiele miesięcy bez błędów lub przecieków. Fakt, że większość funkcji przyjmuje po prostu zmienną liczbę argumentów, rozjaśnia zadanie, które jest żmudne w wielu językach.
Pamiętaj, że jeśli w przyszłości będziesz musiał użyć innego sterownika MySQL, musisz po prostu zmienić dwa wiersze w jednym pliku: linii, która importuje i linii otwierającej połączenie.
kilka rzeczy, aby wziąć pod uwagę, select przykład 1 rząd:
row := con.QueryRow("select mdpr, x, y, z from sometable where id=?",id)
cb := new(SomeThing)
err := row.Scan(&cb.Mdpr, &cb.X, &cb.Y, &cb.Z)
jest tam brakuje row.Next()
w tym przykładzie. musi zadzwonić pod numer row.Next()
, aby pobrać pierwszy zwracany wiersz.
również istnieje pewna nietrwałość biblioteki, która w jakiś sposób stara się promować minimalizm danych. jeśli spróbujesz wybrać kolumny, które nie są Skanowane, będą wyświetlać błędy (nie tylko ostrzeżenia).
To nie jest dokładne: funkcja QueryRow zwraca * Wiersz. Ta funkcja zapewnia, że zapytanie zwróci pojedynczy wiersz. Query() zwraca (* wiersze, błąd), które wymagają wywołania do rows.Next(). –
- 1. Jaki jest zalecany sposób postępowania z zależnościami modułu prywatnego node.js?
- 2. Jaki jest zalecany sposób na prefiks Console.Write?
- 3. Jaki jest preferowany sposób łączenia się z bazą danych PostgreSQL z PHP?
- 4. zdalnego łączenia się z bazą danych MySQL
- 5. Jaki jest właściwy sposób wybierania i łączenia obiektów z LINQ?
- 6. Jaki jest zalecany sposób wdrożenia aplikacji Django w usługach IIS?
- 7. Jaki jest najbardziej elegancki sposób łączenia opcji?
- 8. Jaki jest zalecany sposób na wyrównanie "tablicy stałej" w eliksiru?
- 9. Jaki jest preferowany sposób łączenia dwóch zlewów?
- 10. Jaki jest bardziej zalecany sposób przekierowania 301 w asp.net?
- 11. Jaki jest zalecany sposób wydruku: matplotlib lub pylab?
- 12. gRPC: Jaki jest zalecany sposób zamknięcia asynchronicznego serwera w C++?
- 13. Błąd podczas łączenia się z MySQL przy użyciu PHP/PDO
- 14. Doctrine 2 Jaki jest zalecany sposób uzyskania dostępu do właściwości?
- 15. Jaki jest zalecany sposób iterowania kontenera w C++ 11?
- 16. Jaki jest zalecany sposób upuszczania indeksów za pomocą Mongoose?
- 17. Problem łączenia się z MySQL DB przy użyciu JDBC
- 18. Jaki jest zalecany sposób uzyskania odpowiedzi HTTP jako ciąg podczas korzystania z klienta HTTP Apache?
- 19. Zalecany sposób deklarowania właściwości delegata z ARC
- 20. Jaki jest zalecany sposób korzystania z perla nie systemowego dla aplikacji internetowej?
- 21. mysql naprzeciwko wewnętrznego łączenia
- 22. Najlepszy sposób na bezpieczne łączenie się z MySQL z PHP
- 23. Jaki jest preferowany sposób łączenia zależności za pomocą kontenera IoC?
- 24. Jaki jest właściwy sposób łączenia ze sobą 2 obiektów javascript?
- 25. Podczas łączenia się z konstruktorem podstawowym, w jaki sposób mogę ponownie użyć kodu inicjalizacyjnego w przeciążeniu
- 26. Unikaj łączenia z libstdC++
- 27. Tabela danych R zalecany sposób radzenia sobie z czasem Data
- 28. W jaki sposób kod obiektowy jest kopiowany do pliku wykonywalnego podczas łączenia z biblioteką statyczną?
- 29. Jaki jest preferowany sposób korzystania z kolekcji równoległych w Scali?
- 30. Jaki jest zalecany sposób sprawdzenia, czy lista jest listą liczb w argumentach funkcji?
Dziękuję bardzo, spróbuję. Uwielbiam to, że Go dostarcza pakiet database/sql, który biblioteki mogą zaimplementować. – GiantSquid
Jest podobny do tego, co istnieje w innych językach (na przykład JDBC), ale z czystszą i lżejszą składnią. –
Doskonały podkład dla początkujących. Dzięki. –