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 语言的文章,与大家共同培养第二技能。


相关文章
|
3月前
|
编译器 测试技术 Go
Go语言的自给自足:编译自身的神奇之旅
Go语言的自给自足:编译自身的神奇之旅
|
14天前
|
Go
go语言编译时常量表达式
【10月更文挑战第20天】
26 3
|
17天前
|
编译器 Go
go语言编译选项
【10月更文挑战第17天】
17 5
|
15天前
|
Go
go语言使用常量和编译时常量表达式
【10月更文挑战第19天】
23 2
|
2月前
|
算法 安全 测试技术
golang 栈数据结构的实现和应用
本文详细介绍了“栈”这一数据结构的特点,并用Golang实现栈。栈是一种FILO(First In Last Out,即先进后出或后进先出)的数据结构。文章展示了如何用slice和链表来实现栈,并通过golang benchmark测试了二者的性能差异。此外,还提供了几个使用栈结构解决的实际算法问题示例,如有效的括号匹配等。
golang 栈数据结构的实现和应用
|
1月前
|
中间件 Go 数据处理
应用golang的管道-过滤器架构风格
【10月更文挑战第1天】本文介绍了一种面向数据流的软件架构设计模式——管道-过滤器(Pipe and Filter),并通过Go语言的Gin框架实现了一个Web应用示例。该模式通过将数据处理流程分解为一系列独立的组件(过滤器),并利用管道连接这些组件,实现了模块化、可扩展性和高效的分布式处理。文中详细讲解了Gin框架的基本使用、中间件的应用以及性能优化方法,展示了如何构建高性能的Web服务。
65 0
|
2月前
|
存储 监控 Go
面向OpenTelemetry的Golang应用无侵入插桩技术
文章主要讲述了阿里云 ARMS 团队与程序语言与编译器团队合作研发的面向OpenTelemetry的Golang应用无侵入插桩技术解决方案,旨在解决Golang应用监控的挑战。
|
3月前
|
存储 Prometheus 监控
Golang 搭建 WebSocket 应用(六) - 监控
Golang 搭建 WebSocket 应用(六) - 监控
38 3
|
3月前
|
人工智能 缓存 安全
Golang 搭建 WebSocket 应用(七) - 性能、可用性
Golang 搭建 WebSocket 应用(七) - 性能、可用性
52 1
|
3月前
|
人工智能 数据库连接 Go
Golang 搭建 WebSocket 应用(五) - 消息推送日志
Golang 搭建 WebSocket 应用(五) - 消息推送日志
34 1