Maison développement back-end Golang Comment interagir avec les données JSON en utilisant SQL dans Golang ?

Comment interagir avec les données JSON en utilisant SQL dans Golang ?

Jun 03, 2024 am 11:47 AM
sql golang

在 Golang 中通过 SQL 与 JSON 数据交互共有以下步骤:使用 json.Unmarshal 函数将 JSON 数据解析为 Go 结构体,实现 JSON 到结构体的转换。使用 database/sql 包访问和操作 SQL 数据库,执行诸如插入、查询等操作。结合上述步骤,可以在 Go 中构建基于 SQL 和 JSON 的应用,实现用户注册和登录等功能。

如何在 Golang 中使用 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)
}
Copier après la connexion

使用 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)
    }
}
Copier après la connexion

实战案例:用户注册与登录

我们可以利用 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")
}
Copier après la connexion

登录 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)
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment lire et écrire des fichiers en toute sécurité avec Golang ? Comment lire et écrire des fichiers en toute sécurité avec Golang ? Jun 06, 2024 pm 05:14 PM

Lire et écrire des fichiers en toute sécurité dans Go est crucial. Les directives incluent : Vérification des autorisations de fichiers Fermeture de fichiers à l'aide de reports Validation des chemins de fichiers Utilisation de délais d'attente contextuels Le respect de ces directives garantit la sécurité de vos données et la robustesse de vos applications.

Golang Framework vs Go Framework : comparaison de l'architecture interne et des fonctionnalités externes Golang Framework vs Go Framework : comparaison de l'architecture interne et des fonctionnalités externes Jun 06, 2024 pm 12:37 PM

La différence entre le framework GoLang et le framework Go se reflète dans l'architecture interne et les fonctionnalités externes. Le framework GoLang est basé sur la bibliothèque standard Go et étend ses fonctionnalités, tandis que le framework Go se compose de bibliothèques indépendantes pour atteindre des objectifs spécifiques. Le framework GoLang est plus flexible et le framework Go est plus facile à utiliser. Le framework GoLang présente un léger avantage en termes de performances et le framework Go est plus évolutif. Cas : gin-gonic (framework Go) est utilisé pour créer l'API REST, tandis qu'Echo (framework GoLang) est utilisé pour créer des applications Web.

Transformant du développement frontal au développement back-end, est-il plus prometteur d'apprendre Java ou Golang? Transformant du développement frontal au développement back-end, est-il plus prometteur d'apprendre Java ou Golang? Apr 02, 2025 am 09:12 AM

Chemin d'apprentissage du backend: le parcours d'exploration du front-end à l'arrière-end en tant que débutant back-end qui se transforme du développement frontal, vous avez déjà la base de Nodejs, ...

Comment utiliser un fuseau horaire prédéfini avec Golang ? Comment utiliser un fuseau horaire prédéfini avec Golang ? Jun 06, 2024 pm 01:02 PM

L'utilisation de fuseaux horaires prédéfinis dans Go comprend les étapes suivantes : Importez le package « time ». Chargez un fuseau horaire spécifique via la fonction LoadLocation. Utilisez le fuseau horaire chargé dans des opérations telles que la création d'objets Time, l'analyse de chaînes horaires et l'exécution de conversions de date et d'heure. Comparez les dates en utilisant différents fuseaux horaires pour illustrer l'application de la fonctionnalité de fuseau horaire prédéfini.

Quelles bibliothèques de GO sont développées par de grandes entreprises ou fournies par des projets open source bien connus? Quelles bibliothèques de GO sont développées par de grandes entreprises ou fournies par des projets open source bien connus? Apr 02, 2025 pm 04:12 PM

Quelles bibliothèques de GO sont développées par de grandes entreprises ou des projets open source bien connus? Lors de la programmation en Go, les développeurs rencontrent souvent des besoins communs, ...

Objectif de Golang: Construire des systèmes efficaces et évolutifs Objectif de Golang: Construire des systèmes efficaces et évolutifs Apr 09, 2025 pm 05:17 PM

GO Language fonctionne bien dans la construction de systèmes efficaces et évolutifs. Ses avantages incluent: 1. Haute performance: compilé en code machine, vitesse de course rapide; 2. Programmation simultanée: simplifier le multitâche via les goroutines et les canaux; 3. Simplicité: syntaxe concise, réduction des coûts d'apprentissage et de maintenance; 4. Plate-forme multipliée: prend en charge la compilation multiplateforme, déploiement facile.

Comment résoudre le problème des contraintes de type de fonction générique de Golang en cours de suppression automatique dans VSCODE? Comment résoudre le problème des contraintes de type de fonction générique de Golang en cours de suppression automatique dans VSCODE? Apr 02, 2025 pm 02:15 PM

La suppression automatique des contraintes de type de fonction générique Golang dans les utilisateurs de VScode peut rencontrer un problème étrange lors de l'écriture de code Golang à l'aide de VScode. quand...

Comment s'assurer que la concurrence est sûre et efficace lors de la rédaction de journaux multi-processus? Comment s'assurer que la concurrence est sûre et efficace lors de la rédaction de journaux multi-processus? Apr 02, 2025 pm 03:51 PM

Gérez efficacement les problèmes de sécurité de la concurrence dans la rédaction de journaux multiproces. Plusieurs processus écrivent le même fichier journal en même temps. Comment s'assurer que la concurrence est sûre et efficace? C'est un ...

See all articles