项目场景:
这里不罗嗦了试着写一个接口吧
当你还好奇go能干什么时,我想说的,go对前端其实很友好的 原因(有const 有 var)
怎么写接口呢?(这里我搜了一下 GIN 完全可以解决这个事情)
你首先得下载go 没下的自己去下一个
我这里用的是 sql server 启动本地数据库服务
打开 sql server管理
新建一个数据库 用(Navicat 测试连接一下)
既然连接成功了 那么代码也就简单了
1 创建一个main.go 的文件
2 创建依赖文件 控制台粘贴 go mod init example.com/myapp
3 下载gin 框架 go get github.com/gin-gonic/gin
4 下载 sql 包 go get github.com/denisenkom/go-mssqldb
下面看代码:
// 1 连接数据库
package main
import (
"database/sql"
"fmt"
_ "github.com/denisenkom/go-mssqldb"
"github.com/gin-gonic/gin"
"log"
"net/http"
"strings"
)
const (
server = "127.0.0.1"
userName = "user_yqb"
passWord = "123456"
port = "1433"
)
func linkDb() *sql.DB {
connString := "server=" + server + ";user id=" + userName + ";password=" + passWord + ";database=my_oneday;port" + port
db, err := sql.Open("sqlserver", connString)
if err != nil {
log.Fatal("连接数据库失败:", err)
}
err = db.Ping()
if err != nil {
log.Fatal("无法连接到数据库:", err)
}
fmt.Println("成功连接到数据库!")
return db
}
// 2 指针拿数据
type User struct {
UserID string
UserName string
UserPassword string
TipId string
LableId string
}
func getUsersHandler() any {
// 拿走数据库实例
db := linkDb()
rows, err := db.Query("SELECT * FROM dbo.user_info")
if err != nil {
log.Fatal("查询失败:", err)
}
var users []User
for rows.Next() {
var user User
err := rows.Scan(&user.UserID, &user.UserName, &user.UserPassword, &user.TipId, &user.LableId)
if err != nil {
log.Fatal("获取查询结果失败:", err)
}
// 数据去空格
user.UserID = strings.TrimSpace(user.UserID)
user.UserName = strings.TrimSpace(user.UserName)
user.UserPassword = strings.TrimSpace(user.UserPassword)
user.TipId = strings.TrimSpace(user.TipId)
user.LableId = strings.TrimSpace(user.LableId)
users = append(users, user)
}
if err = rows.Err(); err != nil {
log.Fatal("遍历结果时发生错误:", err)
}
defer db.Close()
//responseJSON, err := json.Marshal(users)
return users
}
// 发接口 (最简单的一步)
func main() {
data := getUsersHandler()
fmt.Println("user", data)
router := gin.Default()
// get接口
router.GET("/api", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": data,
})
})
// 运行服务器端口8080
router.Run(":8080")
}
运行结果:
查询失败 报错原因是因为我数据库6个字段 我只写了5个 (加上去)
// 类型添加 Email
type User struct {
UserID string
UserName string
UserPassword string
TipId string
LableId string
Email string
}
// 遍历数据时加上 Email
for rows.Next() {
var user User
err := rows.Scan(&user.UserID, &user.UserName, &user.UserPassword, &user.TipId, &user.LableId, &user.Email)
if err != nil {
log.Fatal("获取查询结果失败:", err)
}
// 数据去空格
user.UserID = strings.TrimSpace(user.UserID)
user.UserName = strings.TrimSpace(user.UserName)
user.UserPassword = strings.TrimSpace(user.UserPassword)
user.TipId = strings.TrimSpace(user.TipId)
user.LableId = strings.TrimSpace(user.LableId)
user.Email = strings.TrimSpace(user.Email)
users = append(users, user)
}
运行:
第一步完成 小白(这里的小白指的是前端,若真小白建议自己慢慢来,毕竟需要打基础的不能走火入魔)好奇心满足 第二步 规范接口 自己查个规范去写(经常和后端打交道 抄作业总会吧?)
一般code、message、data
简单的sql 参考
-- 新增数据
insert into user_info (user_id) values(857)
-- 查询数据
SELECT * FROM user_info
-- 更新数据 user_id == 857 时 修改该数据
update user_info set user_name = 'paker',user_password = '123456',tip_id = '569871',lable_id = '68848' where user_id = 857
-- 删除数据 user_id == 623
delete from user_info where = 623
-- 增加列 email 字段 (after 列名字 在某列之后插入列)
alter table user_info add email varchar(100)
-- 给所有的email 赋值
update user_info set email = 'yueqibin0205@163.com'
参考表:
下载sql server 会遇到一系列报错 前端不要慌 拿出你的查询报错的能力 解决起来也不难哦
用mysql psql 也是 只需要将上面的连接数据库稍微一改依赖换成mysql 就可以,说简单点的 只要Navicat 能连接上 代码就一定能连接上 这个放心。再说了自己的数据库自己心里没数?
解决方案:
报错改错,再报再改。没报错就是不对的话 就自己把问题当成报错去处理。