一、vscode搭建Go环境

1、安装go环境

官网golang中文网 ,下载xx.windows-amd64.msi
cmd查看版本:go version
我用的是golang 1.16.5,golang 1.18版本添加了泛型。

2、使用 Go Module

2.1 go module简介

(1)不再需要GOROOT和GOPATH

使用Go Module进行包管理,就不再需要GOROOT和GOPATH了!

Go开发相关的环境变量(GOROOT和GOPATH)如下
GOROOT:GOROOT就是Go的安装目录,(类似于java的JDK)。不用往环境变量配置。包管理方式变成Go Module之后就用处不大了。
如,GOROOT = C:\Program Files\Go   

GOPATH:GOPATH是我们的工作空间,保存go项目代码和第三方依赖包。安装后,在环境变量中有。
如,GOPATH = %USERPROFILE%\go

参考:https://blog.csdn.net/qq_38151401/article/details/105729884

(2)使用 go module 管理依赖后会在项目根目录下生成两个文件 go.mod 和 go.sum。go.mod 中会记录当前项目的所依赖的包的信息。

(3)在需要使用时才开启GO111MODULE = on,平时GO111MODULE = off,避免在已有项目中意外引入 go module。

(4)go module 的目的是依赖管理,所以使用 go module 时你可以舍弃 go get 命令(但是不是禁止使用, 如果要指定包的版本或更新包可使用go get,平时没有必要使用)

2.2 go module 配置步骤(win)

(1)设置GO111MODULE环境变量

set GO111MODULE=on   或者   go env -w GO111MODULE=on
go env // 查看 GO111MODULE 选项为 on 代表修改成功

1 要使用go module 首先要设置GO111MODULE=on,GO111MODULE 有三个值,off、on、auto。auto 会根据当前目录下是否有 go.mod 文件来判断是否使用 modules 功能。
2 平时 GO111MODULE = off,在需要使用的时候再开启,避免在已有项目中意外引入 go module。

(2)配置代理

1 无论使用哪种模式,module 功能默认不在 GOPATH 目录下查找依赖文件,所以使用 modules 功能时请设置好代理。
2 默认是Google访问不到,需要设置代理才能用。【?】

Go version >= 1.13 时,直接使用go env -w命令就行了。【如果执行不了,重启一下vs或终端】

//方法1:命令配置
go env -w GOPROXY=https://goproxy.cn,direct
//方法2:菜单配置
Preferences>Go>Go Modules>Environment GOPROXY=https://goproxy.cn,direct

其他版本:https://www.cnblogs.com/fanbi/p/13649929.html?ivk_sa=1024320u

2.2 命令

go mod init test // 初始化。先进入test项目下,然后执行此命令,项目根目录会出现一个 go.mod 文件
go mod tidy // 检测依赖。tidy会检测该文件夹目录下所有引入的依赖,写入 go.mod 文件,写入后你会发现 go.mod 文件有所变动
go mod download //下载依赖。我们需要将依赖下载至本地,而不是使用 go get
go mod vendor //导入依赖。此命令会将刚才下载至 GOPATH 下的依赖转移至该项目根目录下的 vendor(自动新建) 文件夹下, 此时我们就可以使用这些依赖了

//依赖更新:这里的更新不是指版本的更新,而是指引入新依赖,依赖更新请从检测依赖部分一直执行即可:
go mod tidy
go mod download
go mod vendor

参考:
https://www.cnblogs.com/niuben/p/12560104.html

3、安装vscode

迅雷去vscode官网下载。我用的是System Installer64 bit
解决vscode下载慢的问题:把/stable前的内容换成【vscode.cdn.azure.cn】,就变成了国内镜像了,超快!

4、安装插件

vscode-Extensions,搜索go安装。

View-Command Palette...-Go:Install/Update Tools,全选安装即可。

5、版本管理工具

gvm是第三方开发的Go多版本管理工具,这是目前在这方面做得最好的工具。

二、vscode新建Go项目

1、步骤

  1. 新建文件夹demo1,作为项目根目录

  2. cmd,执行命令:go mod init demo1

  3. vscode打开文件:File-Open Folder,选择项目根目录demo1

  4. 新建main.go文件:File-New File,在根目录下创建main.go文件

    package main // 可执行文件,package必须是main
    import (
    	"demo1/test"
    )
    
    func main(){
        test.F1()
    }
    
  5. 创建test包和F1函数:创建文件夹demo1/test,创建文件test1.go,内容如下。

    package test // 可以不与文件夹同名,但最好同名
    import (
        "fmt"
    )
    
    func F1(){ // 大写开头表示公有,小写开头表示私有
        fmt.Println("Hello World!")
    }
    
  6. 执行:Terminal-New Terminal,执行命令go run main.go

三、包管理:Go Module

1、Go的包管理发展

GOPATH ==> Go Vendor ==> Go Module

2、mod命令

// 常用命令
go mod init        // 初始化 go.mod,将开启 mod 使用
go mod tidy        // 添加或者删除 modules,取决于依赖的引用
go mod vendor      // 复制依赖到 vendor 目录下
    
// 其它命令
go mod download  // 下载 module 到本地
go mod edit     //  编辑 go.mod
go mod graph    //  打印 modules 依赖图
go mod verify   //  验证依赖
go mod why      //  解释依赖使用

使用案例:

// golang 建立新项目时,要注意在终端上使用以下命令建立go.mod文件。否则 go get,以及引用自己项目包文件时会出错。
go mod init projectName

3、import用法

golang 使用包 package 来管理定义模块,可以使用 import 关键字来导入使用。

(1)Go Module的import:

导入go自带的包/go get安装的包:import "包名",Go Module会自动找到相应的包。
若是go get的包,会自动复制到vendor文件夹内,然后自动去vendor底下找。
导入自定义包:import "项目名/pacakge名"


相对路径 import "./model" //当前文件同一目录的model目录,但是不建议这种方式import
绝对路径 import "shorturl/model" //加载GOPATH/src/shorturl/model模块

参考:https://blog.csdn.net/zhangzhebjut/article/details/25564457

(2)历史版本的import:

如果导入的是 go 自带的包,则会去安装目录 $GOROOT/src 按包路径加载,如 fmt 包
如果是我们 go get 安装或自定义的包,则会去 $GOPATH/src 下加载

4、package用法

package是最基本的分发单位和工程管理中依赖关系的体现;

  1. 每个GO语言源代码文件开头都拥有一个package声明,表示源码文件所属代码包;
// golang包名必须与所在文件夹同名吗?
不必须,但是同个目录中(不含子目录)的所有文件包名必须一致,通常为了方便包定位,建议包名和目录名一致,否则你import"A",使用起来B.xxx,看上去不统一,不能一眼看出来这个B包是哪个文件的。
  1. 要生成GO语言可执行程序,必须要有main的package包,且必须包含main()函数;
  2. 同一个路径下只能存在一个package,一个package可以拆成多个源文件组成;(同一个目录下文件只能有一个包名,一个目录下可以有多个文件)

参考:https://blog.csdn.net/qq_37189082/article/details/100041835

四、Gin框架

1、Gin介绍

(1)资源

Gin是一个用Go语言编写的web框,Go最流行的Web框架。使用了httprouter,高性能和高效。

官方中文文档:https://gin-gonic.com/zh-cn/docs/introduction/
GitHub地址:https://github.com/gin-gonic/gin
获取参数的案例:https://www.cnblogs.com/jiujuan/p/9388507.html【比官方简单清晰,用到再说】
主要参考https://www.cnblogs.com/linqiaobao/p/14206494.html【下面整理参考,未完待续】

(2)RESTful API

Gin框架支持开发RESTful API的开发。
参考:http://www.ruanyifeng.com/blog/2011/09/restful.html
RESTful架构,就是目前最流行的一种互联网软件架构。如果一个架构符合REST原则,就称它为RESTful架构。
Fielding将他对互联网软件的架构原则,定名为REST,即Representational State Transfer,表现层状态转化
对每个词理解:资源(主语Resourse)的表现层(Representational)状态转化(State Transfer)。

(2-1)Resource

资源是网络上的一个实体,可以是图片、文本、歌曲、服务……。访问资源用的是,资源位置的唯一标识URI。

(2-2)Representation

表现,即表示格式。我们把"资源"具体呈现出来的形式,叫做它的"表现层"(Representation)。
如,文本可以用txt格式表现,也可以用HTML格式、XML格式、JSON格式表现,甚至可以采用二进制格式;图片可以用JPG格式表现,也可以用PNG格式表现。

  1. URI只代表资源的实体,不代表它的形式。严格地说,有些网址最后的".html"后缀名是不必要的,因为这个后缀名表示格式,属于"表现层"范畴,而URI应该只代表"资源"的位置

  2. 它的具体表现形式,应该在HTTP请求的头信息中用Accept和Content-Type字段指定,这两个字段才是对"表现层"的描述。

    Accept : 客户端希望接受的数据类型,比如 Accept:text/xml(application/json)表示希望接受到的是xml(json)类型 Content-Type:发送端发送的实体数据的数据类型。
    一个HTTP请求报文由请求行(request line)、请求头部(header)、空行请求数据4个部分组成。
    <request-line> //请求行
    <headers> //首部行
    <blank line> //空行
    <request-body> //请求体
    HTTP相关,更多参考:https://www.cnblogs.com/myseries/p/11239662.html
  3. http协议(三)几种数据传输方式

(2-3)State Transfer
  1. 状态:访问一个网站,就代表了客户端和服务器的一个互动过程。在这个过程中,势必涉及到数据和状态的变化。
  2. HTTP协议,是一个无状态协议。只管请求+响应,一锤子买卖。这意味着,所有状态都保存在服务器端
随着web的不断发展,有时候,需要将这种状态进行保持,随即,就引入了cookie技术,cookie技术通过在请求和响应报文中写入cookie信息来控制客户端的状态。
  1. 客户端用到的手段,只能是HTTP协议。具体来说,就是HTTP协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。
(2-4)总结

REST三原则:

  • 每一个URI代表一种资源;
  • 客户端和服务器之间,传递这种资源的某种表现层;
  • 客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。

简单来说,REST的含义就是客户端与Web服务器之间进行交互的时候,使用HTTP协议中的4个请求方法代表不同的动作。

  • GET用来获取资源
  • POST用来新建资源
  • PUT用来更新资源
  • DELETE用来删除资源。

例子
例如,我们现在要编写一个管理书籍的系统,我们可以查询对一本书进行查询、创建、更新和删除等操作,我们在编写程序的时候就要设计客户端浏览器与我们Web服务端交互的方式和路径。按照经验我们通常会设计成如下模式:【URL不同,请求方式不限。

请求方法 URL 含义
GET /book 查询书籍信息
POST /create_book 创建书籍记录
POST /update_book 更新书籍信息
POST /delete_book 删除书籍信息

同样的需求我们按照RESTful API设计如下:【URL相同,请求方法不同!

请求方法 URL 含义
GET /book 查询书籍信息,对应数据库的Read
POST /book 创建书籍记录,对应数据库的Update
PUT /book 更新书籍信息,对应数据库的Create
DELETE /book 删除书籍信息,对应数据库的Delete

2、Gin安装和使用

(1)Gin安装

由于配置了mod,只需引入包即可,然后执行vendor命令。如果报红参考这里

// 引入gin包
import "github.com/gin-gonic/gin"
// 报红执行命令
go mod init 项目名
go mod vendor
go mod tidy

(2)第一个Gin案例

package main

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

func main() {
	// 创建一个默认的路由引擎
	r := gin.Default()
	// GET:请求方式;/hello:请求的路径
	// 当客户端以GET方法请求/hello路径时,会执行后面的匿名函数
	r.GET("/hello", func(c *gin.Context) {
		// c.JSON:返回JSON格式的数据
		c.JSON(200, gin.H{
			"message": "Hello world!",
		})
	})
	// 启动HTTP服务,默认在0.0.0.0:8080启动服务
	r.Run()
}

浏览器打开127.0.0.1:8080/hello

3、Gin连接mysql

参考:https://www.cnblogs.com/finnlee/p/14269591.html

import (
	"database/sql"
	"fmt"
	"log"

	"github.com/gin-gonic/gin"
	_ "github.com/go-sql-driver/mysql"
)

如果报红找不到导入包,则可以多执行几次go mod vendorgo mod tidy,还是不行,关掉项目重新打开试试。
注意,文件不要以*_test.go结尾,无法编译运行

4、Gin渲染

五、Postman进行测试

开发RESTful API的时候我们通常使用Postman来作为客户端的测试工具。

1、安装

下载:postman官网

不想注册:关掉重启就行,或者File-New Postman Window

2、使用

教程:https://blog.csdn.net/fxbin123/article/details/80428216

新建请求:File-New Tab,按教程设置参数。

请求中用到(IP时?)localhost或127.0.0.1

存储请求:一个项目一个Collections,下面还可以按照文件夹分类,保存请求。创建Collections。

posted on 2021-12-21 15:37  西伯尔  阅读(2816)  评论(0编辑  收藏  举报