通过copilot,我也能用go写后端服务了(一)

场景:假如我只是拥有一点点go语法基础的小白,如果我们想用最短的学习时间写出一些后端服务该怎么办?

其实笔者也是小白,只是了解掌握一些基础的开发流程,但是就算是这样小白的我也能写服务。这时就要依赖于我们的神器,copilot啦。


话不多说,我们直接开冲


1.首先准备好这样一个文件夹,一个mod文件和一个空的main.go

其中go.mod文件就是我们的依赖存储文件

可以通过下方的命令快捷生成,记得将name替换为你自己的名称

shell 复制代码
go mod init {name}

2.main文件准备基本的结构

go 复制代码
package main

func main() {
	
}

到了这里有的小伙伴可能就会懵逼了,我就学了这些 下一步该怎么办? 其实我们的后端服务往简单的来说,就是负责客户端和数据库之间的联系。

收到数据 -> 存入数据库

查询数据 -> 返回到客户端

当然里面也有很多数不清的技术难点,但这里只是简单归纳,不做讨论

所以首先我们需要清楚的是我们需要构建一个路由树来处理前端的http请求,这里我们选用gin框架来构建

然后重要的来了,向copilot提问

这边也是给出了我们的答案,但是------我们肯定不满足于此,我们不仅仅是要写出服务还要规范目录

于是我们继续提问

sql 复制代码
我想把一个user路由单独存放到一个目录里面应该怎么写
  • 新建一个router文件夹
  • 新建一个router.go文件

将提示的代码复制到文件里

go 复制代码
package router

import (
    "net/http"

    "github.com/gin-gonic/gin"
)

func UserRoutes() *gin.Engine {
    r := gin.Default()
    userGroup := r.Group("/user")
    {
        userGroup.POST("/login", login)
        userGroup.POST("/register", register)
    }
    return r
}

func login(c *gin.Context) {
    name := c.Param("name")
    c.JSON(http.StatusOK, gin.H{"Hello": name})
}

func register(c *gin.Context) {
    name := c.Param("name")
    c.JSON(http.StatusOK, gin.H{"Hello": name})
}

不出意外的话该出意外了,import爆红了。 我们直接将错误信息复制给copilot chat,他会告诉我们使用下面这条命令

shell 复制代码
go get github.com/gin-gonic/gin

但是有golang经验的大佬应该会使用

shell 复制代码
go mod tidy

类似于前端的npm i 但是也有不同 不做深入讨论

此处2种方法都可以解决

暂时我们就不需要动router文件了,因为我们有了另一个麻烦,如何链接数据库呢?

然后我通过copilot得知 可以使用gorm 并且他也给出了例子

然后我们

  • 新建一个database,model文件夹
  • 新建一个database.go文件

将我们的表映射结构体复制到model下面新建一个user.go文件并放入

go 复制代码
type Product struct {
    gorm.Model
    Code  string
    Price uint
}

由于copilot给出的映射并不是我们想要的user表,所以需要手动修改下 更改后的如图

go 复制代码
type User struct {
	ID       uint   `gorm:"primarykey" json:"ID"`                                                       // 用户UUID
	Username string `json:"username" gorm:"index;comment:用户登录名"`                                        // 用户登录名
	Password string `json:"password"  gorm:"comment:用户登录密码"`                                            // 用户登录密码
	Nickname string `json:"nickname" gorm:";comment:用户昵称"`                                              // 用户昵称
	Avatar   string `json:"avatar" gorm:"default:http://qmplusimg.henrongyi.top/head.png;comment:用户头像"` // 用户头像
}

然后我们继续提问

在database文件夹中新建database.go 将结果复制到database.go

go 复制代码
var DB *gorm.DB

func InitDB() {
	dsn := "root:123456@tcp(127.0.0.1:3306)/test?charset=utf8mb4&parseTime=True&loc=Local"
	var err error
	DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		panic("failed to connect database")
	}
	DB.AutoMigrate(&system.User{})
}

加DB.AutoMigrate(&system.User{}) 是为了没有表的时候自动建立表

使用go mod tidy 更新依赖, 记得将下图的数据库配置更改为你自己的

这里我是用docker启动了一个mysql容器 具体的环境可以看你们自己

然后我们在main文件调用 尝试启动

可以看到是成功启动了

测试一下

由于我使用的wsl所以用了一层转发 你们实际访问的时候还是8080端口

下一章我们来完成login和register接口。

相关推荐
gqkmiss25 分钟前
Chrome 浏览器 131 版本开发者工具(DevTools)更新内容
前端·chrome·浏览器·chrome devtools
Summer不秃30 分钟前
Flutter之使用mqtt进行连接和信息传输的使用案例
前端·flutter
旭日猎鹰34 分钟前
Flutter踩坑记录(二)-- GestureDetector+Expanded点击无效果
前端·javascript·flutter
Viktor_Ye41 分钟前
高效集成易快报与金蝶应付单的方案
java·前端·数据库
hummhumm43 分钟前
第 25 章 - Golang 项目结构
java·开发语言·前端·后端·python·elasticsearch·golang
乐闻x1 小时前
Vue.js 性能优化指南:掌握 keep-alive 的使用技巧
前端·vue.js·性能优化
一条晒干的咸魚1 小时前
【Web前端】创建我的第一个 Web 表单
服务器·前端·javascript·json·对象·表单
Amd7941 小时前
Nuxt.js 应用中的 webpack:compiled 事件钩子
前端·webpack·开发·编译·nuxt.js·事件·钩子
生椰拿铁You2 小时前
09 —— Webpack搭建开发环境
前端·webpack·node.js
狸克先生2 小时前
如何用AI写小说(二):Gradio 超简单的网页前端交互
前端·人工智能·chatgpt·交互