
Database/SQL
Opanuj dostęp do baz danych SQL w Go za pomocą pakietu database/sql: połączenia, zapytania, transakcje, prepared statements i zarządzanie pulą połączeń.
1Jaka jest główna różnica między DB.Query a DB.Exec?
Jaka jest główna różnica między DB.Query a DB.Exec?
Odpowiedź
DB.Query służy do wykonywania zapytań SELECT, które zwracają wiersze danych, podczas gdy DB.Exec służy do wykonywania poleceń SQL, które nie zwracają wyników (INSERT, UPDATE, DELETE). Query zwraca obiekt Rows, który należy iterować i zamknąć za pomocą rows.Close(), natomiast Exec zwraca Result zawierający liczbę zmienionych wierszy i ostatnie wstawione ID.
2Dlaczego ważne jest zamknięcie obiektu Rows po zapytaniu?
Dlaczego ważne jest zamknięcie obiektu Rows po zapytaniu?
Odpowiedź
Zamknięcie Rows za pomocą rows.Close() zwalnia zasoby połączenia database, umożliwiając powrót połączenia do pool. Bez zamknięcia połączenia pozostają zajęte, a pool może się wyczerpać, powodując blokady. Zaleca się używanie defer rows.Close() bezpośrednio po sprawdzeniu błędu Query, aby zagwarantować zamknięcie nawet w przypadku późniejszego błędu.
3Której metody należy użyć, aby pobrać pojedynczy wiersz wyników?
Której metody należy użyć, aby pobrać pojedynczy wiersz wyników?
Odpowiedź
DB.QueryRow jest zaprojektowany specjalnie do pobierania pojedynczego wiersza i zwraca obiekt Row (liczba pojedyncza). W przeciwieństwie do Query, które zwraca Rows i wymaga iteracji za pomocą rows.Next(), QueryRow upraszcza kod, umożliwiając bezpośredni scan. Obsługa błędów odbywa się podczas Scan, gdzie sql.ErrNoRows oznacza, że nie znaleziono żadnego wiersza.
Jak otworzyć połączenie z bazą danych za pomocą database/sql?
Co zwraca metoda rows.Scan()?
+19 pytań z rozmów
Inne tematy rekrutacyjne Go
Podstawy Go
Struktury danych w Go
Interfejsy w Go
Obsługa błędów
Podstawy goroutines
Channels
Go Modules
Serwer HTTP
Klient HTTP
Kodowanie JSON
Pakiet context
Testing
Wzorce współbieżności
Prymitywy synchronizacji
Frameworki webowe Go
Projektowanie API REST
gRPC
Reflection
Zarządzanie pamięcią
Optymalizacja wydajności
Generics
Go Design Patterns
Microservices
Bezpieczeństwo i uwierzytelnianie
Docker & Containerization
Kubernetes Basics
Zaawansowany Go
Tworzenie CLI
Opanuj Go na następną rozmowę
Uzyskaj dostęp do wszystkich pytań, flashcards, testów technicznych, ćwiczeń code review i symulatorów rozmów.
Zacznij za darmo