首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
Go安装
GOPATH 与工作空间
Go 命令
Go开发工具
Hello Go
Go基础
流程和函数
struct类型
面向对象
interface
并发
Web工作方式
Go搭建一个Web服务器
Go如何使得Web工作
Go的http包详解
处理表单的输入
验证表单的输入
预防跨站脚本
防止多次提交表单
处理文件上传
当前位置:
首页>>
技术小册>>
Go Web编程(上)
小册名称:Go Web编程(上)
前面我们在安装Go的时候看到需要设置GOPATH变量,Go从1.1版本开始必须设置这个变量,而且不能和Go的安装目录一样,这个目录用来存放Go源码,Go的可运行文件,以及相应的编译之后的包文件。所以这个目录下面有三个子目录:src、bin、pkg GOPATH设置 go 命令依赖一个重要的环境变量:$GOPATH Windows系统中环境变量的形式为%GOPATH%,本书主要使用Unix形式,Windows用户请自行替换。 (注:这个不是Go安装目录。下面以笔者的工作目录为示例,如果你想不一样请把GOPATH替换成你的工作目录。) 在类似 Unix 环境大概这样设置: `export GOPATH=/home/apple/mygo` 为了方便,应该把新建以上文件夹,并且把以上一行加入到 .bashrc 或者 .zshrc 或者自己的 sh 的配置文件中。 Windows 设置如下,新建一个环境变量名称叫做GOPATH: ```asp 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为例来讲述如何编写应用包,执行如下代码 ```asp cd $GOPATH/src mkdir mymath ``` 新建文件sqrt.go,内容如下 // $GOPATH/src/mymath/sqrt.go源码如下: ```asp 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 安装完之后,我们可以进入如下目录 `cd $GOPATH/pkg/${GOOS}_${GOARCH}` //可以看到如下文件 mymath.a 这个.a文件是应用包,那么我们如何进行调用呢? 接下来我们新建一个应用程序来调用这个应用包 新建应用包mathapp ```asp cd $GOPATH/src mkdir mathapp cd mathapp vim main.go ``` $GOPATH/src/mathapp/main.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的可执行文件 `./mathapp` 输出如下内容 Hello, world. Sqrt(2) = 1.414213562373095 如何安装该应用,进入该目录执行go install,那么在$GOPATH/bin/下增加了一个可执行文件mathapp, 还记得前面我们把$GOPATH/bin加到我们的PATH里面了,这样可以在命令行输入如下命令就可以执行 `mathapp` 也是输出如下内容 > Hello, world. Sqrt(2) = 1.414213562373095 这里我们展示如何编译和安装一个可运行的应用,以及如何设计我们的目录结构。 获取远程包 go语言有一个获取远程包的工具就是go get,目前go get支持多数开源社区(例如:github、googlecode、bitbucket、Launchpad) `go get github.com/astaxie/beedb` go get -u 参数可以自动更新包,而且当go get的时候会自动获取该包依赖的其他第三方包 通过这个命令可以获取相应的源码,对应的开源平台采用不同的源码控制工具,例如github采用git、googlecode采用hg,所以要想获取这些源码,必须先安装相应的源码控制工具 通过上面获取的代码在我们本地的源码相应的代码结构如下 ```asp $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的目录结构如下所示 ```asp 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语言
go编程权威指南(四)
Go开发基础入门
Go语言入门实战经典
企业级Go应用开发从零开始
从零写一个基于go语言的Web框架
深入浅出Go语言核心编程(六)
go编程权威指南(一)
Go-Web编程实战
Go开发权威指南(上)