Maison >développement back-end >Golang >Comment calculer la somme d'une colonne à l'aide de GORM et Scan dans Golang ?
Travailler avec des bases de données relationnelles comme PostgreSQL à l'aide de Golang implique souvent de récupérer des valeurs agrégées. Dans ce cas, calculer la somme d'une colonne, telle que la colonne salaire, est une tâche courante.
Le code fourni tente de calculer la somme de la colonne salaire de la table « personnes » mais rencontre une erreur. Il utilise l'instruction SELECT avec SUM(salary) pour récupérer le résultat et lie la valeur à la structure NewPerson. Cependant, cette approche est incorrecte puisque NewPerson n'a pas de champ de salaire et que la requête tente de mapper le résultat directement à la structure.
Pour résoudre ce problème, une approche différente est nécessaire. Golang fournit la fonction Scan, qui permet aux développeurs de récupérer les résultats d'une requête et de les mapper à une structure de données personnalisée. Voici une version révisée du code qui utilise Scan :
<code class="go">type NResult struct { Salary int64 // or int, depending on the data type } func GetSalarySum(c echo.Context) error { db, err := gorm.Open("postgres", "...") checkError(err) defer db.Close() query := "SELECT SUM(salary) FROM people" var result NResult if err := db.Table("people").Raw(query).Scan(&result).Error; err != nil { fmt.Println("error->", err) } return c.JSON(http.StatusOK, result) }</code>
Dans ce code, nous définissons une structure personnalisée NResult avec un seul champ Salaire de type int64 ou int, selon le type de données de la colonne salaire . Nous utilisons la méthode Raw pour exécuter directement la requête SELECT SUM(salary) FROM people, et la fonction Scan pour récupérer le résultat et le mapper à la structure NResult.
Ce code révisé récupère correctement la somme du salaire. et la renvoie sous forme de réponse JSON.
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!