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

相关推荐
桂月二二4 小时前
探索前端开发中的 Web Vitals —— 提升用户体验的关键技术
前端·ux
hunter2062065 小时前
ubuntu向一个pc主机通过web发送数据,pc端通过工具直接查看收到的数据
linux·前端·ubuntu
qzhqbb5 小时前
web服务器 网站部署的架构
服务器·前端·架构
刻刻帝的海角5 小时前
CSS 颜色
前端·css
浪浪山小白兔6 小时前
HTML5 新表单属性详解
前端·html·html5
lee5767 小时前
npm run dev 时直接打开Chrome浏览器
前端·chrome·npm
2401_897579657 小时前
AI赋能Flutter开发:ScriptEcho助你高效构建跨端应用
前端·人工智能·flutter
limit for me7 小时前
react上增加错误边界 当存在错误时 不会显示白屏
前端·react.js·前端框架
浏览器爱好者7 小时前
如何构建一个简单的React应用?
前端·react.js·前端框架
qq_392794488 小时前
前端缓存策略:强缓存与协商缓存深度剖析
前端·缓存