


Bagaimana untuk berinteraksi dengan data JSON menggunakan SQL dalam Golang?
在 Golang 中通过 SQL 与 JSON 数据交互共有以下步骤:使用 json.Unmarshal 函数将 JSON 数据解析为 Go 结构体,实现 JSON 到结构体的转换。使用 database/sql 包访问和操作 SQL 数据库,执行诸如插入、查询等操作。结合上述步骤,可以在 Go 中构建基于 SQL 和 JSON 的应用,实现用户注册和登录等功能。
如何在 Golang 中使用 SQL 与 JSON 数据交互
Golang 提供了强大的库和包,使使用 SQL 与 JSON 数据交互变得轻而易举。以下是如何在 Golang 中实现 SQL 与 JSON 交互:
使用 json.Unmarshal
json.Unmarshal 函数可将 JSON 数据解析为 Golang 结构体。例如:
type User struct { ID int64 `json:"id"` Name string `json:"name"` Email string `json:"email"` Created int64 `json:"created"` } var jsonString = `{ "id": 1, "name": "John Doe", "email": "john@example.com", "created": 1587398123 }` var user User err := json.Unmarshal([]byte(jsonString), &user) if err != nil { fmt.Println("Error:", err) }
使用 database/sql
database/sql 包提供了访问和操作 SQL 数据库的功能。示例如下:
import ( "database/sql" "log" ) func main() { db, err := sql.Open("postgres", "user:password@host:port/dbname") if err != nil { log.Fatal(err) } defer db.Close() jsonValue := "{ \"name\": \"Joe\", \"age\": 30 }" // 从 JSON 中创建 SQL struct type User struct { Name string Age int } user := User{Name: "Joe", Age: 30} // 将 SQL struct 转换为 JSON userJSON, err := json.Marshal(user) if err != nil { log.Fatal(err) } // 使用 JSONB 类型插入 JSON 值 _, err = db.Exec("INSERT INTO users (name, age) VALUES ($1, $2)", jsonValue, user.Age) if err != nil { log.Fatal(err) } // 查询 JSON 值 rows, err := db.Query("SELECT * FROM users") if err != nil { log.Fatal(err) } defer rows.Close() for rows.Next() { var name string var age int var jsonString string if err := rows.Scan(&name, &age, &jsonString); err != nil { log.Fatal(err) } println(name, age, jsonString) } }
实战案例:用户注册与登录
我们可以利用 Go 的 SQL 与 JSON 交互能力构建一个简单的用户注册和登录 API:
注册 API
func register(w http.ResponseWriter, r *http.Request) { var user User if err := json.NewDecoder(r.Body).Decode(&user); err != nil { http.Error(w, "Invalid JSON", http.StatusBadRequest) return } // 将 JSON 转换为 SQL struct sqlUser := sqlx.Named("name", user.Name).Named("password", user.Password) // SQL 查询插入 query := `INSERT INTO users (name, password) VALUES (:name, :password)` if _, err := db.NamedExec(query, sqlUser); err != nil { http.Error(w, "Could not register user", http.StatusInternalServerError) return } fmt.Fprintf(w, "User registered successfully") }
登录 API
func login(w http.ResponseWriter, r *http.Request) { var user User if err := json.NewDecoder(r.Body).Decode(&user); err != nil { http.Error(w, "Invalid JSON", http.StatusBadRequest) return } // SQL 查询 query := `SELECT * FROM users WHERE name = $1 AND password = $2` var result User if err := db.Get(&result, query, user.Name, user.Password); err != nil { http.Error(w, "Invalid user credentials", http.StatusUnauthorized) return } // 将 SQL struct 转换为 JWT 令牌 tokenString, err := createJWT(result) if err != nil { http.Error(w, "Could not create JWT", http.StatusInternalServerError) return } fmt.Fprintf(w, "User authenticated. Token: %s", tokenString) }
Atas ialah kandungan terperinci Bagaimana untuk berinteraksi dengan data JSON menggunakan SQL dalam Golang?. 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

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

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











Membaca dan menulis fail dengan selamat dalam Go adalah penting. Garis panduan termasuk: Menyemak kebenaran fail Menutup fail menggunakan tangguh Mengesahkan laluan fail Menggunakan tamat masa konteks Mengikuti garis panduan ini memastikan keselamatan data anda dan keteguhan aplikasi anda.

Laluan Pembelajaran Backend: Perjalanan Eksplorasi dari Front-End ke Back-End sebagai pemula back-end yang berubah dari pembangunan front-end, anda sudah mempunyai asas Nodejs, ...

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

Pergi bahasa berfungsi dengan baik dalam membina sistem yang cekap dan berskala. Kelebihannya termasuk: 1. Prestasi Tinggi: Disusun ke dalam Kod Mesin, Kelajuan Berjalan Cepat; 2. Pengaturcaraan serentak: Memudahkan multitasking melalui goroutine dan saluran; 3. Kesederhanaan: sintaks ringkas, mengurangkan kos pembelajaran dan penyelenggaraan; 4. Cross-Platform: Menyokong kompilasi silang platform, penggunaan mudah.

Dalam sistem Debian, giliran log Go biasanya bergantung pada perpustakaan pihak ketiga, dan bukannya ciri-ciri yang datang dengan perpustakaan standard GO. Lumberjack adalah pilihan yang biasa digunakan. Ia boleh digunakan dengan pelbagai kerangka log (seperti ZAP dan Logrus) untuk merealisasikan putaran automatik dan pemampatan fail log. Berikut adalah konfigurasi sampel menggunakan perpustakaan Lumberjack dan ZAP: Packagemainimport ("gopkg.in/natefinch/lumberjack.v2" "go.uber.org/zap" "go.uber.org/zap/zapcor

Penghapusan automatik Golang Generik Jenis Kekangan Jenis dalam Pengguna VSCode mungkin menghadapi masalah yang aneh ketika menulis kod Golang menggunakan vscode. Bila ...

Menggunakan zon waktu yang dipratentukan dalam Go termasuk langkah berikut: Import pakej "masa". Muatkan zon waktu tertentu melalui fungsi LoadLocation. Gunakan zon waktu yang dimuatkan dalam operasi seperti mencipta objek Masa, menghuraikan rentetan masa dan melaksanakan penukaran tarikh dan masa. Bandingkan tarikh menggunakan zon waktu yang berbeza untuk menggambarkan aplikasi ciri zon waktu yang telah ditetapkan.

Cecair mengendalikan isu keselamatan bersamaan dalam penulisan log pelbagai proses. Proses berganda menulis fail log yang sama pada masa yang sama. Bagaimana untuk memastikan kesesuaian selamat dan cekap? Ini ...
