Go编写Web服务与操作数据库基本语句

Go 和 Gin Web 框架编写 RESTful Web 服务 API 的基础知识.

package mainimport ("net/http""github.com/gin-gonic/gin"
)// album 表示有关专辑的数据.
type album struct {ID     string  `json:"id"`Title  string  `json:"title"`Artist string  `json:"artist"`Price  float64 `json:"price"`
}// 专辑切片以填充专辑数据记录.
var albums = []album{{ID: "1", Title: "Blue Train", Artist: "John Coltrane", Price: 56.99},{ID: "2", Title: "Jeru", Artist: "Gerry Mulligan", Price: 17.99},{ID: "3", Title: "Sarah Vaughan and Clifford Brown", Artist: "Sarah Vaughan", Price: 39.99},
}func main() {router := gin.Default()router.GET("/albums", getAlbums)router.GET("/albums/:id", getAlbumByID)router.POST("/albums", postAlbums)router.Run("localhost:8080")
}// getAlbums 以 JSON 格式响应所有专辑的列表.
func getAlbums(c *gin.Context) {c.IndentedJSON(http.StatusOK, albums)
}// postAlbums 从请求体中收到的JSON中添加一个专辑.
func postAlbums(c *gin.Context) {var newAlbum album// 调用 BindJSON 将收到的 JSON 绑定到// newAlbum.if err := c.BindJSON(&newAlbum); err != nil {return}// 将新专辑添加到切片.albums = append(albums, newAlbum)c.IndentedJSON(http.StatusCreated, newAlbum)
}// getAlbumByID 查找 ID 值与客户端发送的 id
// 参数匹配的专辑,然后返回该专辑作为响应.
func getAlbumByID(c *gin.Context) {id := c.Param("id")// 循环浏览专辑列表,查找// ID 值与参数匹配的专辑.for _, a := range albums {if a.ID == id {c.IndentedJSON(http.StatusOK, a)return}}c.IndentedJSON(http.StatusNotFound, gin.H{"message": "album not found"})
}

Go访问关系数据库

package mainimport ("database/sql""fmt""log""os""github.com/go-sql-driver/mysql"
)var db *sql.DBtype Album struct {ID     int64Title  stringArtist stringPrice  float32
}func main() {// Capture connection properties.cfg := mysql.Config{User:                 os.Getenv("DBUSER"),Passwd:               os.Getenv("DBPASS"),Net:                  "tcp",Addr:                 "127.0.0.1:3306",DBName:               "recordings",AllowNativePasswords: true,}log.Println(cfg.FormatDSN())// Get a database handle.var err errordb, err = sql.Open("mysql", cfg.FormatDSN())if err != nil {log.Fatal(err)}pingErr := db.Ping()if pingErr != nil {log.Fatal(pingErr)}fmt.Println("Connected!")albums, err := albumsByArtist("John Coltrane")if err != nil {log.Fatal(err)}fmt.Printf("Albums found: %v\n", albums)// 在此处对 ID 2 进行硬编码以测试查询。alb, err := albumByID(2)if err != nil {log.Fatal(err)}fmt.Printf("Album found: %v\n", alb)albID, err := addAlbum(Album{Title:  "The Modern Sound of Betty Carter",Artist: "Betty Carter",Price:  49.99,})if err != nil {log.Fatal(err)}fmt.Printf("ID of added album: %v\n", albID)
}// albumsByArtist对具有指定艺术家姓名的专辑进行查询.
func albumsByArtist(name string) ([]Album, error) {// 一个专辑切片,用于保存返回行中的数据.var albums []Albumrows, err := db.Query("SELECT * FROM album WHERE artist = ?", name)if err != nil {return nil, fmt.Errorf("albumsByArtist %q: %v", name, err)}defer rows.Close()// 遍历行,使用"扫描"将列数据分配给结构字段.for rows.Next() {var alb Albumif err := rows.Scan(&alb.ID, &alb.Title, &alb.Artist, &alb.Price); err != nil {return nil, fmt.Errorf("albumsByArtist %q: %v", name, err)}albums = append(albums, alb)}if err := rows.Err(); err != nil {return nil, fmt.Errorf("albumsByArtist %q: %v", name, err)}return albums, nil
}// albumByID查询指定ID的专辑。
func albumByID(id int64) (Album, error) {// 一个专辑将保存返回行的数据。var alb Albumrow := db.QueryRow("SELECT * FROM album WHERE id = ?", id)if err := row.Scan(&alb.ID, &alb.Title, &alb.Artist, &alb.Price); err != nil {if err == sql.ErrNoRows {return alb, fmt.Errorf("albumsById %d: no such album", id)}return alb, fmt.Errorf("albumsById %d: %v", id, err)}return alb, nil
}// addAlbum 将指定的专辑添加到数据库中,
// 返回新条目的专辑 ID
func addAlbum(alb Album) (int64, error) {result, err := db.Exec("INSERT INTO album (title, artist, price) VALUES (?, ?, ?)", alb.Title, alb.Artist, alb.Price)if err != nil {return 0, fmt.Errorf("addAlbum: %v", err)}id, err := result.LastInsertId()if err != nil {return 0, fmt.Errorf("addAlbum: %v", err)}return id, nil
}

官方Documentation

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/115483.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

汽车屏类产品(二):360全景环视(SVC)、多分割显示、行车记录

前言 随着新能源汽车的快速发展,带动了车载器件的大发展,大的比如域控,小的创新更是不断涌现。而车载显示屏可以说是一大类产品,产品形态也是愈发多样化,比如:仪表cluster、中控IVI、副驾屏、行车记录仪、流媒体后视镜、透明A柱屏、方向盘屏(替代方向盘按键)、门饰板显…

在mybatis的xml中使用枚举来做判断条件

1.枚举类 import com.baomidou.mybatisplus.annotation.IEnum; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; import com.shinkeer.common.utils.StringUtils;import java.util.HashMap; import java.util.Map;…

k8s-----14、controller-Job和Cronjob

Job和Cronjob 1、Job(一次性任务)2、CronJob(定时任务) 1、Job(一次性任务) [rootmaster controlleryaml]# cat job.yaml apiVersion: batch/v1 kind: Job metadata:name: pi spec:template:spec:contain…

服务器数据恢复-raid0硬盘故障导致服务器崩溃的数据恢复案例

服务器故障&分析: 某公司一台服务器,共2块磁盘组建了一组raid0磁盘阵列。RAID0阵列中有1块硬盘出现故障离线,导致服务器崩溃。 通过和用户方的沟通,北亚企安数据恢复工程师初步判断:故障服务器中出现故障离线的硬盘…

账号合租平台源码Thinkphp6.1|内置详细搭建教程

小白账号合租平台说明 系统采用的是常见的租号平台模式,现在网络上流出的这种类型的源码还很少 平台介绍 1.租号模式,用户可自行选择单独租号或采用合租的模式。 2.支付,采用易支付通用接口 3.邀请返利,为了站长能更好推广推荐了邀请返利功能 4.用户提现功能 5.工单…

让你随时随地访问金蝶云星空企业版v8.0,内网穿透轻松实现远程办公!

文章目录 前言1. 金蝶云星空企业版v8.0安装下载1.1 登录金蝶官网下载安装包1.2 常见的安装下载问题 2. 金蝶云星空配置SQL Sever数据库2.1 创建数据管理中心2.2 创建完成后在服务器登录管理站点 3. 下载安装注册cpolar3.1 公网访问测试 4. 固定连接公网地址 前言 金蝶云星空专注…

光环云入选“北京市算力互联互通试点参与企业”!

为进一步贯彻落实工业和信息化部等六部委联合印发的《算力基础设施高质量发展行动计划》,扩大北京市算力互联互通试点参与范围,助力建设全球数字经济标杆城市,北京市通信管理局组织相关专家对申报第二批参与试点企业开展评估,光环…

云HIS系统,Cloud HIS system,云HIS医院信息管理系统源码

通过云HIS平台,可以减少医院投资,无需自建机房和系统,快速实现信息化服务。系统升级及日常维护服务有云平台提供,无需配备专业IT维护人员进行系统维护。 一、his系统和云his系统的区别 His系统和云his系统是两种不同的计算平台,它们在技术架构上存在很大的差异。下…

HypeX Labs:充分释放加密资产的潜力

加密货币通常被视为是资产类别或投资工具,不过其代表了一种全新的意识形态,且与传统资产有着完全不同的底层价值逻辑,所以它们不仅可以被视为一种资产类别或投资工具,在大多数情况下可以被视为一种基于技术的实现。因此我们可以认…

1024程序员狂欢节有好礼 | 前沿技术、人工智能、集成电路科学与芯片技术、新一代信息与通信技术、网络空间安全技术

🌹欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享,与更多的人进行学习交流 1024程序员狂欢节有好礼 🚩🚩🚩点击直达福利前言一、IT技术 IT Technology《速学Linux:系统应用从入门到精通》《Pytho…

k8s-----10、Controller-Deployment

Controller-Deployment 1、什么是controller2、 pod和controller关系3、Deployment控制器应用场景3.1 部署时yaml文件书写3.2 实际部署应用3.3 升级回滚3.3.1 升级3.3.2 回滚 3.4 弹性伸缩 1、什么是controller 在集群上管理和运行容器的对象 2、 pod和controller关系 pod是…

PHP代码审计工具

PHP代码审计工具 1 环境准备 Seay源代码审计系统.exe 和准备靶场的源码php 2 Seay下载地址 https://github.com/f1tz/cnseay安装Seay源代码审计系统.exe报错时,安装.net framework 3.5 # windows插件.net framework 3.5 下砸地址 https://www.microsoft.com/en…

Linux 后台开发必知的 I/O 优化知识总结

IO性能对于一个系统的影响是至关重要的。一个系统经过多项优化以后,瓶颈往往落在数据库;而数据库经过多种优化以后,瓶颈最终会落到IO。而IO性能的发展,明显落后于CPU的发展。Memchached也好,NoSql也好,这些…

Python脚本:让工作自动化起来

Python是一种流行的编程语言,以其简洁和易读性而闻名。它提供了大量的库和模块,使其成为自动化各种任务的绝佳选择。 本文将探讨Python脚本及其代码,可以帮助您自动化各种任务并提高工作效率。无论您是开发人员、数据分析师还是只是想简化工…

进程(0)——计算机的中的软硬件【Linux】

进程(0)——计算机的中的软硬件【Linux】 一.硬件:1.1 冯诺依曼结构:1.2 存储金字塔1.2.1输入设备和存储器:1.2.2输出设备和存储器: 二.软件:2.1 操作系统2.1.1 如何理解管理: 博主自…

Python深度学习实战-基于tensorflow.keras六步法搭建神经网络(附源码和实现效果)

实现功能 第一步:import tensorflow as tf:导入模块 第二步:制定输入网络的训练集和测试集 第三步:tf.keras.models.Sequential():搭建网络结构 第四步:model.compile():配置训练方法 第五…

JarsLink:基于 Java 的模块化开发框架

JarsLink:阿里巴巴出品的基于 Java 的模块化开发框架 简介 Jarslink 2.0 是 SOFABoot 官方基于 SOFAArk 开发的功能插件,负责管理多应用在 SOFAArk 容器之上的合并部署,具备如下特性: 支持运行时动态安装和卸载应用。 支持运行时…

Java程序设计2023-第四次上机练习

8-1三子棋 编写程序,实现简单的三子棋游戏。在三子棋中,双方在33的棋盘中轮流下棋,一方用*示,另一方用O表示。如果一方的3个棋子占据了同一行,同一列或者对角线,则该方获胜。如果棋盘已被棋子占满&#xf…

设计模式-创建型模式

创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 1.工厂方法模式:(常用,需要掌握) 定义:定义了一个创建对象的抽象方法,由子类决定要实例化的类。…

垃圾邮件(短信)分类算法实现 机器学习 深度学习 计算机竞赛

文章目录 0 前言2 垃圾短信/邮件 分类算法 原理2.1 常用的分类器 - 贝叶斯分类器 3 数据集介绍4 数据预处理5 特征提取6 训练分类器7 综合测试结果8 其他模型方法9 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 垃圾邮件(短信)分类算…