Golang 环境配置与应用编译

简介: 这篇文章主要是说一下 Go 的工作目录与编译的规则,初步体验一下 Go 的大道至简的魅力。

Go 语言现在是越来越火了,出现在各个领域中,称它为 21 世纪的 C 语言一点都不为过,而且 Go 语言是 2009 年才发布的新语言,可以说它的特性是完全基于现代计算机来设计的,尤其是它的看家本领 goroutine 协程,在高并发场景下使用简直不要太爽,非常适合写一些高性能中间件。


而作为 Java 后端开发者的我,早在 2017 年底的时候已经通过业余时间掌握了 Go 语言,并且还手写了一个微信支付 SDK 作为练手的开源项目,出乎意料地广受 GayHub 网友的欢迎,目前将近 200 star,是目前最受欢迎的 Go 语言版微信支付 SDK 之一:


640.png

也从侧面说明了现在 Go 语言生态还不是很成熟,但这也是一种潜力,并且我相信,Go 语言是会未来一大热门语言,因此 Go 语言可以说是后端开发者最好的第二技能选择之一。


它自带的命令诸如 go run、go build、go install 等,就可以编译运行 Go 应用了,这在 Java 中,想要更快速方便地进行编译,我们还需要依赖一些第三方工具,如 maven 编译工具,Go 的这些命令就相当于一个 Maven 了,甚至比 maven 简单多了,而且还是原生支持。


这篇文章主要是说一下 Go 的工作目录与编译的规则,初步体验一下 Go 的大道至简的魅力。


GOPATH



GOPATH 是 Go 命令依赖的一个路径,也是 Go 项目放置的地方,在类 unix 系统下设置 GOPATH:

export GOPATH=/Users/zhangchenghui/.go

查看 Go 环境变量:


go env

640.jpg


$GOPATH 目录有三个约定俗成的目录,一定要彻底理解:

src:存放源代码,也是 Go 项目源代码的存放地址;pkg:编译后的生成的包,也就是 Go 的 .a 文件,这个后缀名的文件代表的是 Go  的一个包;bin:编译后生成的可执行文件(只有导入 package main 包的文件编译后直接是可执行文件 )。

640.jpg


应用编译



在 GOPATH 的 src 创建一个项目:

cd $GOPATH/src
mkdir mypakage
cd mypakage

新建 test.go:

// $GOPATH/src/mypakage/test.go
package mypakage
import "fmt"
func Test() {
     fmt.Println("test~~~~~")
}

Go 语言有个约定俗成的做法就是函数首字母大写相当于 Java 的 public 方法,小写相当于 Java 的 private 方法。


在该项目目录中执行 go install 或者在任意目录下执行 go install mypakage,请注意该文件的包 package mypakage,

640.jpg意味着编译后会在 pkg 目录生成一个包。

接下来我们就可以引用这个包里面的方法啦,这和 maven 的 mvn clean install 一个道理。


在 src 目录中新建一个应用:

cd $GOPATH/src
mkdir myapp
cd myapp

新建 main.go:

// $GOPATH/src/myapp/main.go
package main
import (
    "fmt"
      "mypakage"
)
func main() {
  mypakage.Test()
  fmt.Println("hello, go")
}


接下来就是要编译这个应用了,进入该应用目录,执行 go install,由于该应用直接导入的是 pakage main 包,它是 Go 语言中唯一一个可以编译后直接生成可执行文件的包,因此会在 $GOPATH/bin 下生成一个可执行文件 myapp:

640.jpg


在任意路径下,执行:

myapp

640.png

其实在该应用目录下也可执行 go build 命令进行编译,会在当前目录下生成可执行文件,而不会安装在 bin 目录下。

640.jpg


拉取远程包



Go 语言要如何获取远程包呢?在 Java 开发中,我们我可以通过 Maven 自动地从 Maven 中央仓库中下载依赖到.m2本底仓库中,但是在 Go 开发中,我们只需要使用 go get 指令就可以从远程拉取依赖包了:


go get github.com/astaxie/beego

这条命令就会将源码下载到 src 目录中,并将源码编译后安装到 pkg 目录中:

640.jpg

因此,go get 相当于 git clone 源码下来,再执行 go install。

这里特别说明一下,go 1.11 已经发布了 go modules 作为官方的版本依赖管理工具,而我开源的微信支付 SDK 「wxpay」已经支持了该特性,后面也会单独跟大家讲解一下 go modules。


写在最后



如果你们也喜欢 Go 语言,可以给我留言,一起讨论学习,我会考虑在后续更新一系列关于 Go 语言的文章,与大家共同培养第二技能。


相关文章
|
1月前
|
监控 网络协议 Go
应用监控 eBPF 版:实现 Golang 微服务的无侵入应用监控
应用监控 eBPF 版:实现 Golang 微服务的无侵入应用监控
109646 118
|
2月前
|
传感器 监控 物联网
golang开源的可嵌入应用程序高性能的MQTT服务
golang开源的可嵌入应用程序高性能的MQTT服务
201 3
|
5月前
|
Go 区块链
go 编译 自定义 图标 ico文件
go 编译 自定义 图标 ico文件
41 0
|
5月前
|
Go Windows
Go 交叉编译 跨平台编译(windows系统跨平台编译)
Go 交叉编译 跨平台编译(windows系统跨平台编译)
33 0
|
2月前
|
网络协议 Go 数据安全/隐私保护
golang开源的可嵌入应用程序高性能的MQTT服务
golang开源的可嵌入应用程序高性能的MQTT服务
253 2
|
1天前
|
程序员 Go
Golang深入浅出之-Select语句在Go并发编程中的应用
【4月更文挑战第23天】Go语言中的`select`语句是并发编程的关键,用于协调多个通道的读写。它会阻塞直到某个通道操作可行,执行对应的代码块。常见问题包括忘记初始化通道、死锁和忽视`default`分支。要解决这些问题,需确保通道初始化、避免死锁并添加`default`分支以处理无数据可用的情况。理解并妥善处理这些问题能帮助编写更高效、健壮的并发程序。结合使用`context.Context`和定时器等工具,可提升`select`的灵活性和可控性。
10 2
|
2天前
|
存储 中间件 Go
探索Gin框架:快速构建高性能的Golang Web应用
探索Gin框架:快速构建高性能的Golang Web应用
|
3月前
|
缓存 IDE 编译器
假如没有go install,编译会多痛苦?
假如没有go install,编译会多痛苦?
41 0
|
3月前
|
Unix Linux Go
2.go-编译
2.go-编译
26 0
|
5月前
|
监控 Go 计算机视觉
采集摄像头数据的Golang应用
采集摄像头数据的Golang应用