首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
GO环境配置
安装 Go
Go Module, GOPATH 与工作空间
Go 命令
Go 开发工具
Go语言基础
Hello,Go
Go基础
流程和函数
struct类型
面向对象
interface
并发
Web基础
Go搭建一个Web服务器
Go-web服务器原理
Go的http包详解
处理表单的输入
验证表单的输入
预防跨站脚本
防止表单重复提交
处理文件上传
数据库/sql接口
使用MySQL数据库
使用SQLite数据库
使用PostgreSQL数据库
使用Beego orm库进行ORM开发
NOSQL数据库操作
session和cookie
Go使用session
session存储
预防session劫持
XML处理
JSON处理
正则处理
模板处理
文件操作
字符串处理
Socket编程
WebSocket
REST
RPC
预防CSRF攻击
确保输入过滤
避免XSS攻击
避免SQL注入
存储密码
加密和解密数据
设置默认地区
本地化资源
国际化站点
错误处理
使用GDB调试
Go怎么写测试用例
应用日志
网站错误处理
应用部署
备份和恢复
实战项目规划
自定义路由器设计
controller设计
日志和配置设计
实现博客的增删改
静态文件支持
Session支持
表单支持
用户认证
多语言支持
pprof支持
当前位置:
首页>>
技术小册>>
Go-Web编程实战
小册名称:Go-Web编程实战
从 Go1.11 开始, Go 官方加入 Go Module 支持, Go1.12 成为默认支持; 从此告别源码必须放在 Gopath 中 以及 Gopath 对初学者造成的困扰. ## 使用 Go Module 由于众所周知的原因, 要顺利安装 Go Module 的包, 需要先设置代理: 公共模块代理: ```sh export GOPROXY=https://goproxy.io // 也可以设置为 https://goproxy.cn 或者其他 ``` 私有模块代理: ```sh export GOPRIVATE=git.xxx.com ``` 初始化: ``` go mod init [module 名称] ``` 检测和清理依赖: ``` go mod tidy ``` 安装指定包: ``` go get -v github.com/go-ego/gse@v0.60.0-rc4.2 ``` ### 更新依赖 ``` go get -u ``` 更新指定包依赖: ``` go get -u github.com/go-ego/gse ``` 指定版本: ``` go get -u github/com/go-ego/gse@v0.60.0-rc4.2 ``` ### Replace: 使用命令行: ``` go mod edit -replace github.com/go-ego/gse=/path/to/local/gse go mod edit -replace github.com/go-ego/gse=github.com/vcaesar/gse ``` 也可以直接修改模块文件: ``` replace github.com/go-ego/gse => github.com/vcaesar/gse ``` ## GOMODULE 常用命令: ``` go mod init # 初始化 go.mod go mod tidy # 更新依赖文件 go mod download # 下载依赖文件 go mod vendor # 将依赖转移至本地的 vendor 文件 go mod edit # 手动修改依赖文件 go mod graph # 打印依赖图 go mod verify # 校验依赖 ``` 前面我们在安装 Go 的时候看到需要设置 GOPATH 变量,Go 从1.1版本到1.7必须设置这个变量,而且不能和Go的安装目录一样,这个目录用来存放Go源码,Go的可运行文件,以及相应的编译之后的包文件。所以这个目录下面有三个子目录:src、bin、pkg 从go 1.8开始,GOPATH 环境变量现在有一个默认值,如果它没有被设置。 它在Unix上默认为$HOME/go,在Windows上默认为%USERPROFILE%/go。 ## GOPATH设置 go 命令依赖一个重要的环境变量:$GOPATH Windows系统中环境变量的形式为`%GOPATH%`,本书主要使用Unix形式,Windows用户请自行替换。 *(注:这个不是Go安装目录。下面以笔者的工作目录为示例,如果你想不一样请把GOPATH替换成你的工作目录。)* 在类 Unix 环境下大概这样设置: ```sh export GOPATH=/home/apple/mygo ``` 为了方便,应该新建以上文件夹,并且上一行加入到 `.bashrc` 或者 `.zshrc` 或者自己的 `sh` 的配置文件中。 Windows 设置如下,新建一个环境变量名称叫做GOPATH: ```sh GOPATH=c:\mygo ``` GOPATH允许多个目录,当有多个目录时,请注意分隔符,多个目录的时候Windows是分号,Linux系统是冒号,当有多个GOPATH时,默认会将go get的内容放在第一个目录下。 以上 $GOPATH 目录约定有三个子目录: - src 存放源代码(比如:.go .c .h .s等) - pkg 编译后生成的文件(比如:.a) - bin 编译后生成的可执行文件(为了方便,可以把此目录加入到 $PATH 变量中,如果有多个gopath,那么使用`${GOPATH//://bin:}/bin`添加所有的bin目录) 以后我所有的例子都是以mygo作为我的gopath目录 ## 代码目录结构规划 GOPATH下的src目录就是接下来开发程序的主要目录,所有的源码都是放在这个目录下面,那么一般我们的做法就是一个目录一个项目,例如: $GOPATH/src/mymath 表示mymath这个应用包或者可执行应用,这个根据package是main还是其他来决定,main的话就是可执行应用,其他的话就是应用包,这个会在后续详细介绍package。 所以当新建应用或者一个代码包时都是在src目录下新建一个文件夹,文件夹名称一般是代码包名称,当然也允许多级目录,例如在src下面新建了目录$GOPATH/src/github.com/astaxie/beedb 那么这个包路径就是"github.com/astaxie/beedb",包名称是最后一个目录beedb 下面我就以mymath为例来讲述如何编写应用包,执行如下代码 ```sh cd $GOPATH/src mkdir mymath ``` 新建文件sqrt.go,内容如下 ```go // $GOPATH/src/mymath/sqrt.go源码如下: package mymath func Sqrt(x float64) float64 { z := 0.0 for i := 0; i < 1000; i++ { z -= (z*z - x) / (2 * x) } return z } ``` 这样我的应用包目录和代码已经新建完毕,注意:一般建议package的名称和目录名保持一致 ## 编译应用 上面我们已经建立了自己的应用包,如何进行编译安装呢?有两种方式可以进行安装 1、只要进入对应的应用包目录,然后执行`go install`,就可以安装了 2、在任意的目录执行如下代码`go install mymath` 安装完之后,我们可以进入如下目录 ```sh cd $GOPATH/pkg/${GOOS}_${GOARCH} //可以看到如下文件 mymath.a ``` 这个.a文件是应用包,那么我们如何进行调用呢? 接下来我们新建一个应用程序来调用这个应用包 新建应用包mathapp ```sh cd $GOPATH/src mkdir mathapp cd mathapp vim main.go ``` `$GOPATH/src/mathapp/main.go`源码: ```go package main import ( "mymath" "fmt" ) func main() { fmt.Printf("Hello, world. Sqrt(2) = %v\n", mymath.Sqrt(2)) } ``` 可以看到这个的package是`main`,import里面调用的包是`mymath`,这个就是相对于`$GOPATH/src`的路径,如果是多级目录,就在import里面引入多级目录,如果你有多个GOPATH,也是一样,Go会自动在多个`$GOPATH/src`中寻找。 如何编译程序呢?进入该应用目录,然后执行`go build`,那么在该目录下面会生成一个mathapp的可执行文件 ```sh ./mathapp ``` 输出如下内容 ```sh Hello, world. Sqrt(2) = 1.414213562373095 ``` 如何安装该应用,进入该目录执行`go install`,那么在$GOPATH/bin/下增加了一个可执行文件mathapp, 还记得前面我们把`$GOPATH/bin`加到我们的PATH里面了,这样可以在命令行输入如下命令就可以执行 ```sh mathapp ``` 也是输出如下内容 Hello, world. Sqrt(2) = 1.414213562373095 这里我们展示如何编译和安装一个可运行的应用,以及如何设计我们的目录结构。 对于启用go module的Go版本,需要对mod.go进行配置。(使用replace的方式将远程包替换为本地包) ## 获取远程包 go语言有一个获取远程包的工具就是`go get`,目前go get支持多数开源社区(例如:GitHub、googlecode、bitbucket、Launchpad) go get github.com/astaxie/beedb >go get -u 参数可以自动更新包,而且当go get的时候会自动获取该包依赖的其他第三方包 通过这个命令可以获取相应的源码,对应的开源平台采用不同的源码控制工具,例如GitHub采用git、googlecode采用hg,所以要想获取这些源码,必须先安装相应的源码控制工具 通过上面获取的代码在我们本地的源码相应的代码结构如下 $GOPATH src |--github.com |-astaxie |-beedb pkg |--相应平台 |-github.com |--astaxie |beedb.a go get本质上可以理解为首先第一步是通过源码工具clone代码到src下面,然后执行`go install` 在代码中如何使用远程包,很简单的就是和使用本地包一样,只要在开头import相应的路径就可以 import "github.com/astaxie/beedb" ## 程序的整体结构 通过上面建立的我本地的mygo的目录结构如下所示 bin/ mathapp pkg/ 平台名/ 如:darwin_amd64、linux_amd64 mymath.a github.com/ astaxie/ beedb.a src/ mathapp main.go mymath/ sqrt.go github.com/ astaxie/ beedb/ beedb.go util.go 从上面的结构我们可以很清晰的看到,bin目录下面存的是编译之后可执行的文件,pkg下面存放的是应用包,src下面保存的是应用源代码
上一篇:
安装 Go
下一篇:
Go 命令
该分类下的相关小册推荐:
go编程权威指南(四)
go编程权威指南(一)
Go语言入门实战经典
Golang修炼指南
Go Web编程(上)
go编程权威指南(二)
Go开发权威指南(上)
Golang并发编程实战
深入浅出Go语言核心编程(一)
深入浅出Go语言核心编程(八)
深入浅出Go语言核心编程(五)
Go开发权威指南(下)