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

相关推荐
腾讯TNTWeb前端团队3 小时前
helux v5 发布了,像pinia一样优雅地管理你的react状态吧
前端·javascript·react.js
范文杰7 小时前
AI 时代如何更高效开发前端组件?21st.dev 给了一种答案
前端·ai编程
拉不动的猪7 小时前
刷刷题50(常见的js数据通信与渲染问题)
前端·javascript·面试
拉不动的猪7 小时前
JS多线程Webworks中的几种实战场景演示
前端·javascript·面试
FreeCultureBoy8 小时前
macOS 命令行 原生挂载 webdav 方法
前端
uhakadotcom8 小时前
Astro 框架:快速构建内容驱动型网站的利器
前端·javascript·面试
uhakadotcom8 小时前
了解Nest.js和Next.js:如何选择合适的框架
前端·javascript·面试
uhakadotcom8 小时前
React与Next.js:基础知识及应用场景
前端·面试·github
uhakadotcom9 小时前
Remix 框架:性能与易用性的完美结合
前端·javascript·面试
uhakadotcom9 小时前
Node.js 包管理器:npm vs pnpm
前端·javascript·面试