goWeb

基本项目框架:https://gitee.com/lxjblog/gin-study

1、go 安装

下载安装包

golang 下载地址:https://golang.google.cn/dl/

image-20221031223734396

下载完成之后直接安装即可,安装完成之后输入 go version 测试

image-20221031223841998

配置环境变量

新增 GOPATH 和 GOROOT 变量

# GOROOT 指定安装目录
GOROOT D:\Program Files\GO

# GOPATH 需要新建一个目录,用于存放安装的包
GOPATH D:\Program Files\GoWorks

在终端输入 go env 查看环境变量内容

image-20221031224157944

可以提前设置如下配置

# 配置代理,方便后续下载包
go env -w GO111MODULE=off
GOPROXY=https://proxy.golang.org,direct

# 指定 bin 目录,用于存放安装包生成的 .exe 执行文件 
go env -w GOBIN=D:\Program Files\GoWorks\bin

2、goLand 工具

IDEA 同系列产品,在官网中下载安装之后,寻找激活码激活即可

官网:https://www.jetbrains.com.cn/go/promo/?utm_source=baidu&utm_medium=cpc&utm_campaign=cn-bai-br-goland-ph-pc&utm_content=goland-go&utm_term=goland%20go&bd_vid=9086888946575124063

image-20221105145529951

3、web 开发

概况

安装依赖

goweb 开发中比较常用的包是 gin

# gin
gin get github.com/gin-gonic/gin

基本使用

package main

import (
    "github.com/gin-gonic/gin"
    "net/http"
)

func main() { 
    r := gin.Default()
    // 设置路由
    r.GET("/hello", func(context *gin.Context) { 
        context.JSON(http.StatusOK, gin.H{ 
            "data": "hello world",
        } )
    } )
    // 指定端口并启动
    r.Run(":9000")
} 

路由配置

指定请求方式

func main() { 
    r := gin.Default()
    r.GET("/hello", func)
    r.POST("/hello", func)
    r.DELETE("/hello", func)
    r.PUT("/hello", func)
    ……
} 

image-20221105140746490

通过路由组区分

apiRouter := r.Group("/user")
{ 
    apiRouter.GET("/getByName", service.GetUserByName)
    apiRouter.POST("/add", service.AddUser)
} 

返回参数

返回 JSON 类型

ctx.JSON([状态码], [object])

apiRouter.GET("/all", func(ctx *gin.Context) { 
    ctx.JSON(http.StatusOK, gin.H{ 
        "data": "hello",
    } )
} )

image-20221105141811010

返回 String 类型

r.GET("/hello", func(ctx *gin.Context) { 
    ctx.String(http.StatusOK, "返回结果:%s", "hello")
} )

image-20221105141820661

image-20221105142424812

除此之外还可以返回 HTML 等各种类型

image-20221105141702352

请求参数获取

通过 ? 追加参数

请求格式:/hello?name=”xiaojiang”,通过 Query 获取,还可以使用 DefaultQuery 获取默认值

r.GET("/hello", func(ctx *gin.Context) { 
    name := ctx.Query("name")
    age := ctx.DefaultQuery("age", 18)
    ctx.String(http.StatusOK, "hello %s", name)
} )

image-20221105144616430

image-20221105144723551

image-20221105143115024

将参数写在路径中

r.GET("/hello/:name", func(ctx *gin.Context) { 
    name := ctx.Param("name")
    ctx.String(http.StatusOK, "hello %s", name)
} )

image-20221105144537579

image-20221105143032750

获取 json 格式

可以将 json 解析为 map,也可以直接解析为对象

r.POST("/hello", func(ctx *gin.Context) { 
   // 解析 JSON,将结果存在 map 中
   var m map[string]interface{ } 
   data, _ := ctx.GetRawData()
   _ = json.Unmarshal(data, &m)
   ctx.JSON(http.StatusOK, m)
} )

获取 form 表单提交的内容

image-20221105145122437

4、连接数据库

官方文档:https://gorm.io/zh_CN/docs/

安装依赖

# 安装 gorm
go get -u -v http://github.com/jinzhu/gorm

连接数据库

// 建立连接
dB, err := gorm.Open("mysql",
                     "root:123456@(localhost:3306)/test?charset=utf8mb4&parseTime=True&loc=Local")
if err != nil { 
    fmt.Println("连接数据库错误:", err)
    return
} 
// 开启日志输出
dB.LogMode(true)

CRUD

参考文档

5、swag 接口文档

注释文档:https://swaggo.github.io/swaggo.io/declarative_comments_format/api_operation.html

基本配置

golang 集成 swag 之后,需要通过注释标识

安装依赖

# 安装 swag
go get -u github.com/swaggo/swag/cmd/swag
go get -u github.com/swaggo/gin-swagger
go get -u github.com/swaggo/files

配置主函数的注释

// @title goWeb project
// @version 1.0
// @description this is goWeb server.
// @host 127.0.0.1:9000
func main() { 
} 

配置实体类返回默认值

type Student struct { 
    Name       string  `json:"name" example:"xiaojiang"`
    Age        int     `json:"age" example:"18"`
    CreateTime string  `json:"createTime" example:"2022/10/27"`
    Score      float64 `json:"score" example:"90"`
} 

配置接口的注释

对于方法的注释,需要在第一行指定方法名

注意:在 golang 中,方法名和变量名的开头需大写,才能被其他方法调用

// SelectAll
// @tags student
// @Summary 获取所有学生
// @Success 200 { array}  entity.Student "success"
// @Router /student/all [get]
func SelectAll(ctx *gin.Context) { 
    data := dao.SelectAll()
    response.Success(ctx, data)
} 

生成文档

在项目根目录下执行如下指令,如 main 主函数不在根目录下,则需在命令中指定,swag 会根据注释内容自动在项目目录下生成文档内容

# 生成文档
swag init

image-20221031230317506

如果报错,”’swag’ 不是内部或外部命令,也不是可运行的程序“,按照如下步骤:

  • 查看是否已经安装了 swag 包
  • 查看 GOPAT\bin 目录下是否存在 swag.exe 可执行文件,不存在则复制过去

启动项目

在生成文档之后,需要重新启动项目才可以查看到新的 swag 文档内容

访问地址:http://localhost:9000/swagger/index.html

image-20221031230757626