返回顶部
分享到

Go语言编译环境设置教程

Golang 来源:互联网 作者:佚名 发布时间:2025-08-22 18:07:33 人浏览
摘要

Go语言优势 天生支持高并发 可以自由的去控制其并发量,也就是携程,通过go routine关键字就行了。 自动垃圾回收机制 内存的清理 不需要环境依赖 在运行go程序的时候是以二进制的方式进行运

Go语言优势

  • 天生支持高并发

可以自由的去控制其并发量,也就是携程,通过go routine关键字就行了。

  • 自动垃圾回收机制
  • 内存的清理
  • 不需要环境依赖

在运行go程序的时候是以二进制的方式进行运行,go build之后是生成二进制文件。

像windows的exec一样,直接丢到Linux上面执行就行了,不需要安装任何环境。

  • 云原生无缝接入
  • 社区活跃度
  • 易上手

下载 Go  配置编译环境

如果要编写和阅读代码,首先要编译安装这个语言的编译环境, 

  • Go 安装文件以及源代码 https://golang.google.cn/dl/
  • 下载对应平台的二进制文件并安装
  • 环境变量

GOROOT

  • go 的安装路径

GOPATH

  • src:存放源代码
  • pkg:存放依赖包,三方库的安装路径
  • bin:存放可执行文件

如果是新环境需要创建 /Users/lulei/go/src/github.com这个目录的,在这个目录里面就可以去克隆GitHub的地址。

1

2

3

4

5

6

7

8

9

10

11

12

lulei@luleideMacBook-Pro github.com % pwd

/Users/lulei/go/src/github.com

  

lulei@luleideMacBook-Pro github.com % ls

astaxie     cespare     hashicorp   mitchellh   prometheus

beorn7      golang      lovekeepcoding  pkg     shiena

  

PS C:\Users\lucas\GolandProjects\awesomeProject> go env

set GOROOT=C:/Users/lucas/sdk/go1.21.11

  

set GOPATH=C:\Users\lucas\go

C:\Users\lucas\go\pkg\mod\cache

其他常用变量

GOOS,GOARCH,GOPROXY

国内用户建议设置goproxy:export GOPROXY=https://goproxy.cn(因为防火墙的原因,好多依赖包是无法直接拉取的,设置这个那么会通过这个代理去拉)

配置 GOPROXY

Go默认的GOPROXY的值是:GOPROXY=https://proxy.golang.org,direct。

这个goproxy在使用go get安装第三方库的时候会报错,导致无法下载成功,所以必须要修改一下。

  • windows使用如下命令

1

2

go env -w GO111MODULE=on

go env -w GOPROXY=https://goproxy.io,direct

  • linux/macos 

1

2

export GO111MODULE=on

export GOPROXY=https://goproxy.io

IDE 设置(VS Code)

下载并安装 Visual Studio Code  https://code.visualstudio.com/download

安装 Go 语言插件  https://marketplace.visualstudio.com/items?itemName=golang.go

其他可选项

  • Intellj goland,收费软件
  • vim,sublime等

一些基本命令

项目执行方式有两种,第一种go build,生成二进制文件main.exe,直接执行即可。

PS C:\Users\lucas\GolandProjects\awesomeProject> go build main.go    

编译产生一个二进制文件

其次就是go run main.go,先将main.go去编译了,编译好之后直接执行,然后可执行文件是不保留的。

 PS C:\Users\lucas\GolandProjects\awesomeProject> go run main.gohello golang

  • build:从源代码构建成可执行文件 
  • get:下载一个包
  • install:go install从github上面下载某一个包并且安装到本地,相当于是编译安装,所以很多时候开发一个go语言项目,上传到GitHub上面,你希望别人可以使用你的项目,如果go get会将源代码下载下来,如果是go install那么会将源代码下载下来,编译完成直接安装,接下来就可以直接使用。

1

2

3

4

5

6

7

8

9

module awesomeProject2

 

go 1.16

 

require github.com/lovekeepcoding/testmath v0.0.0-20220225034816-3d3a22d574b6 // indirect

 

 

lulei@luleideMacBook-Pro awesomeProject2 % go get github.com/lovekeepcoding/testmath

go get: added github.com/lovekeepcoding/testmath v0.0.0-20220225034816-3d3a22d574b6

  • module 用来做依赖管理的
  • test 用来做单元测试的

Go build

Go 语言不支持动态链接,因此编译时会将所有依赖编译进同一个二进制文件。(无论拷贝到任何环境里面,因为所有依赖都会被编译到一起,所以可以顺利运行的,代价就是安装包会大一些)

指定输出目录。(go build 将go语言的源代码编译成一个二进制文件)

go build –o bin/mybinary .

1

2

3

4

5

lulei@luleideMacBook-Pro awesomeProject4 % go build

lulei@luleideMacBook-Pro awesomeProject4 % ls

awesomeProject4 go.mod          main.go

lulei@luleideMacBook-Pro awesomeProject4 % ./awesomeProject4

3

在构建的时候源代码分离

常用环境变量设置编译操作系统和 CPU 架构。

1

GOOS=linux GOARCH=amd64 go build

全支持列表。

1

$GOROOT/src/go/build/syslist.go

Go test

Go 语言原生自带测试

1

2

3

4

5

import "testing"

func TestIncrease(t *testing.T) {

t.Log("Start testing")

increase(1, 2)

}

写任何程序的时候,都需要去做单元测试,如何验证你写的代码是否健壮呢?

一种是手工测试,手工测试会有问题,当你的程序不断的改进修改,重复的手工测试会使得你的整个开发效率非常低,所以在整个开发过程当中都会有要求,我写的业务逻辑都是需要对应编写测试用例的,这个测试用例第一步就是单元测试。

单元测试是面向代码的,比如说你写了一个函数,你需要验证这个函数在各种情况下的行为是否正常,你们就需要写很多的测试用例,go语言原生自带单元测试的支持。

  • go test ./… -v 运行测试
  • go test命令扫描所有*_test.go为结尾的文件,惯例是将测试代码与正式代码放在同目录, 如 foo.go 的测试代码一般写在 foo_test.go

编写测试用例的时候,会将单测的代码和主代码放在一个包,这样的好处是私有函数,私有的变量都可以在单测里面被引用到。

Go vet

有些错误并不明显,这个错误并不会影响编译。但是它本身的逻辑会有一些小的瑕疵,在某些情况下可能会引发一些问题,针对这些情况,提供了上面这条命令。

它会检测出程序运行当中可能出现的问题,比如下面????这些。

在多线程里面,哪个线程先执行,哪个线程后执行,这是不能确保的,如果主线程启动了一些子线程去运行,主线程立马退出了,很可能子线程还没有被正确的执行,就会被一起退出。


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • Go实现完全静态编译和交叉编译的代码
    Go 语言天生支持跨平台编译,并且其标准库几乎不依赖系统动态库,所以在大多数场景下,它编译出来的二进制文件几乎可以直接丢到任何
  • Go语言编译环境设置教程

    Go语言编译环境设置教程
    Go语言优势 天生支持高并发 可以自由的去控制其并发量,也就是携程,通过go routine关键字就行了。 自动垃圾回收机制 内存的清理 不需要环
  • Go fmt包中Scan获取标准输入方式
    Go fmt包下有三个函数 可以在程序运行过程中获取用户输入。 fmt.Scan:获取输入 fmt.Scanf:获取输入,但是可以指定格式,go会根据格式解析参
  • go中空接口的具体使用
    接口-空接口 1. 什么是空接口? 空接口是特殊形式的接口类型,普通的接口都有方法,而空接口没有定义任何方法口,也因此,我们可以说
  • 快速解除oracle dataguard的方法

    快速解除oracle dataguard的方法
    有些时候,我们为了使oracle dg的standby库另做他用,需要解除oracle dataguard数据同步。我本地因为standby库存储出现故障,导致dg存在问题,故需
  • Go 1.23中Timer无buffer的实现方式介绍
    在 Go 1.23 中,Timer 的实现通常是通过 time 包提供的 time.Timer 类型来实现的。Timer 是一个用于在指定时间后触发一次事件的计时器。Timer 的实
  • golang之 wire 库的使用介绍
    1. 写在最前面 之前 review 其他人的代码的时候,看到了关于 wire 库的使用。但当时主要是分析逻辑上的问题,没怎么太学习 wire 库的用法,
  • golang panic 函数用法介绍
    在 Go 语言中,panic和recover是用于处理运行时异常的关键字。以下是它们的用法总结和示例: 1. panic 的作用 触发条件:当程序遇到无法恢复
  • Go中sync.Once源码的深度介绍
    概念 sync.Once是Go语言标准库中的一个同步原语,用于确保某个操作只执行一次。它在多线程环境中非常有用,尤其是在需要初始化共享资源
  • 基于Go语言实现一个压测工具

    基于Go语言实现一个压测工具
    整体架构 整体系统架构比较简单 通用数据处理模块 Http请求响应数据处理 本项目支持http协议、websocket协议、grpc协议、Remote Authentication Di
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计