go 开启新篇章

项目场景:

这里不罗嗦了试着写一个接口吧

当你还好奇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 能连接上  代码就一定能连接上 这个放心。再说了自己的数据库自己心里没数?


 

解决方案:

报错改错,再报再改。没报错就是不对的话 就自己把问题当成报错去处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

EternityNotBug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值