通过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接口。

相关推荐
twins352039 分钟前
解决Vue应用中遇到路由刷新后出现 404 错误
前端·javascript·vue.js
qiyi.sky1 小时前
JavaWeb——Vue组件库Element(3/6):常见组件:Dialog对话框、Form表单(介绍、使用、实际效果)
前端·javascript·vue.js
煸橙干儿~~1 小时前
分析JS Crash(进程崩溃)
java·前端·javascript
安冬的码畜日常1 小时前
【D3.js in Action 3 精译_027】3.4 让 D3 数据适应屏幕(下)—— D3 分段比例尺的用法
前端·javascript·信息可视化·数据可视化·d3.js·d3比例尺·分段比例尺
l1x1n02 小时前
No.3 笔记 | Web安全基础:Web1.0 - 3.0 发展史
前端·http·html
昨天;明天。今天。2 小时前
案例-任务清单
前端·javascript·css
zqx_73 小时前
随记 前端框架React的初步认识
前端·react.js·前端框架
惜.己3 小时前
javaScript基础(8个案例+代码+效果图)
开发语言·前端·javascript·vscode·css3·html5
什么鬼昵称4 小时前
Pikachu-csrf-CSRF(get)
前端·csrf
长天一色4 小时前
【ECMAScript 从入门到进阶教程】第三部分:高级主题(高级函数与范式,元编程,正则表达式,性能优化)
服务器·开发语言·前端·javascript·性能优化·ecmascript