Hello,Golang

Hello,Golang

一、开发环境搭建

1. 下载 SDK

 // Go官网下载地址
 https://golang.org/dl/
  
 // Go官方镜像站(推荐)
 https://golang.google.cn/dl/

2. 安装

由于Go语言是一门跨平台的编译型语言,我们只需要在一个平台下进行开发,最后根据要运行的平台进行对应的编译,就可以直接在对应的平台上运行项目了。下面我们主要介绍一下Go语言在 Windows 环境上的安装过程:

  • 第一步,下载Go语言安装包到本地

        

  • 第二步,傻瓜式安装,疯狂下一步,期间可以选择安装的路径

        

  • 第三步,按照上述步骤安装完成后,打开终端,输入 go version 命令,如果能查看到相关的信息,证明安装成功。 

        

3. 配置环境变量

打开终端输入命令 go env 可以查看安装 SDK 完成后的相关环境配置信息,其中我们需要重点关注一下框出来的几个配置项:

相关配置项说明:

  • GO111MODULE: 是否用 go mod 模式来管理项目的依赖

  • GOROOT:go的安装路径,需要把安装目录的 bin 级目录配置到计算机的系统环境变量中,才能全局使用 go 指令

        

  • GOPATH:项目代码存放的路径,目录可自定义,需要在计算机的系统环境变量中进行配置,后期工程代码以及下载的依赖都会存放在这个目录下

        

  • GOPROXY:镜像源,用于下载三方依赖,默认值是:GOPROXY=https://proxy.golang.org,direct,但国内访问不到,建议改成以下值:

https://goproxy.io 或 https://goproxy.cn

由于从 Go1.11 版本之后,项目结构有了很大的改动,环境配置项的作用也不一样,因此环境变量配置有一些差异:

3.1 GO 1.11 版本之前的环境配置

GO 1.11 之前版本规定了我们的代码要写在固定的位置,因此必须要配置一个GOPATH ,配置好后,我们还需要在 GOPATH 对应的目录下(新建以下几个文件夹,以后我们所有的代码都必须写在 src 目录中:

3.2 GO 1.11 版本及之后版本的环境配置

Go 1.11 版本之后,推荐使用 go mod 模式来管理依赖环境,不再强制配置 GOPATH。在安装完 GO 软件包后,会给 GOPATH 设置一个默认目录,且默认情况下 GOROOT下的 bin 目录及 GOPATH 下的 bin 目录都已经添加到环境变量中了,我们也不需要额外配置了;此外我们也不用把代码必须写在GOPATH 下面的 src 目录下了,可以在电脑的任意位置编写 GO 代码。

简而言之,在 1.11 版本后,我们不需要再关注和配置 GOROOTGOPATH 这两个环境变量了,安装完成之后,我们只需要配置一下 GO111MODULEGOPROXY 两项即可。实际上安装完新版本的软件包后,GO111MODULE 都是默认开启的,我们真正需要配置的只有 GOPROXY

二、第一个Go语言程序

我们随意在某个目录下新建一个 hello 文件夹,在 hello 目录中新建一个 main.go 文件,并输入以下代码

 package main  // 声明 main 包,表明当前是一个可执行程序,一个项目中只能有一个main包
  
 import "fmt"  // 导入内置 fmt 包
  
 func main() { // main函数,是程序执行的入口
     fmt.Println("hello world !")
 }

在终端中进入 hello 目录,输入 go build 命令对代码进行编译,编译通过后会在同级目录下生成一个可执行文件:

直接运行 exe 程序就可以看到代码实现的功能了:

三、Go 常用命令

  • go help

go help 可以查询 go 常用的命令:

  • go build

go build 表示将源代码编译成可执行文件。不同平台下编译得到的可执行文件类型不一样,windows下的是 exe 类型文件。可以通过添加 -o 参数来指定编译过后的文件名,例如:

go build -o helloworld.exe
  • go install

go install 表示安装的意思,它先编译源代码得到可执行文件,然后将可执行文件移动到 GOPATH 的bin目录下。因为我们的环境变量中配置了GOPATH下的bin目录,所以我们就可以在任意地方直接执行可执行文件了。

  • go run

go run 命令可以像执行脚本一样直接执行 .go 文件,且不会产生编译后的 .exe 文件,例如:

go run main.go

  • go fmt

go fmt 命令可以快速格式化代码,例如:

go fmt main.go

四、跨平台编译

默认 go build 得到的可执行文件都是当前操作系统下的,如果我想在windows下编译一个linux下可执行文件,那需要怎么做呢?

只需要指定目标操作系统的平台和处理器架构即可,然后再执行go build命令,就可以编译得到目标操作系统对应的可执行文件了

# Windows下编译得到Linux 64位可执行程序
SET CGO_ENABLED=  // 禁用CGO,使用了cgo的代码是不支持跨平台编译的
SET GOOS=linux  // 目标平台是linux
SET GOARCH=amd64  // 目标处理器架构是amd64
 
# Windows下编译得到Mac 64位可执行程序
SET CGO_ENABLED=
SET GOOS=darwin
SET GOARCH=amd64

其余操作系统转换编译命令如下:

# Mac下编译得到Linux可执行程序
CGO_ENABLED= 
GOOS=linux 
GOARCH=amd64
 
# Mac下编译得到Windows 64位可执行程序
CGO_ENABLED=
GOOS=windows
GOARCH=amd64
 
# Linux下编译得到Mac可执行程序
CGO_ENABLED=
GOOS=darwin
GOARCH=amd64
 
# Linux下编译得到Windows 64位可执行程序
CGO_ENABLED=
GOOS=windows
GOARCH=amd64
0 条评论
请不要发布违法违规有害信息,如发现请及时举报或反馈
还没有人评论呢,速度抢占沙发!
相关文章
  • 学习:SQL 语句到结构体的转换 | Go 语言编程之旅 (eddycjy.com) 目标:SQL表转换为Go语言结构体 可以在线体验这个过程:SQL生成GO语言结构体 - 支持批量处理 (tl.be...

  • 引言 最近做了一个需求,是定时任务相关的。以前定时任务都是通过 linux crontab 去实现的,现在服务上云(k8s)了,尝试了 k8s 的 CronJob,由于公司提供的是界面化工具,使用、查...

  • 背景 本文使用 Golang语言的SDK包 go.etcd.io/etcd/clientv3 实践etcd的租约、Watch等功能,并且实现分布式锁的业务场景。 etcd 租约 etcd过期时间可以通...

  • 一、算术运算符 运算符描述 + 相加 - 相减 * 相乘 / 相除 % 求余 代码示例: package main import "fmt" fun...

  • 路由 f, h, err := c.GetFile("uploadFile") if err != nil { logx.Error("getfile err ", err) ...

  • 概述建议先阅读 非缓冲通道, 缓冲通道, 关闭通道,通道方向。Go 语言没有提供函数或方法判断一个通道是否关闭。因此只能使用一个变通的办法:接收通道元素,根据返回的布尔值确定通道是否关闭。例子双向通道...

  • 普通打印优点:内置函数,不需要引入额外的包,简单方便。不足:无法进行格式化打印,无法完整打印复合数据结构 (如数组, Map 等)。println 函数打印多个传入的参数,并自动加一个换行。例子pac...

  • 项目中的dao层,我们用来查询数据库,获取想要数据。有时我们会需要查询数据给结构体赋值,并返回一个结构体指针,如下 // 结构体字段已与数据库对应 func GetCommunity(id int) ...

  • 在Golang中,我们可以使用标准库中的encoding/json包来将JSON数据转换为结构体。本文将介绍如何使用该包将JSON数据转换为Golang结构体。 首先,让我们看一下JSON数据的格式。...

  • 背景 在go的工程中,有时init的顺序是至关重要的,本文写了一个小控制器去管理init的顺序,可以根据自己的要求设置不同的权重来实现加载顺序。 本文控制器主要实现两个功能,一是按照优先级加载包的引用...

  • GO语言的环境安装 下载地址 Go下载 - Go语言中文网 - Golang中文社区 (studygolang.com) 安装 这里很简单,可以一直点下一步就可以了 环境搭建 我这里也是去D盘当...

  • dongle 是一个轻量级、语义化、对开发者友好的 Golang 编码解码和加密解密库Dongle 已被 awesome-go 收录, 如果您觉得不错,请给个 star 吧github.com/gol...

  • 输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。 假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 示例 1: Input: preorder = [3,9,20,...

  • 本文介绍了Go 微服务体系发展与选型,过去一年Dubbo-go 社区的飞速发展以及对未来的展望。 一、Go 微服务体系发展与选型   随着微服务技术的快速发展,其在各个领域都形成了一系列...

  • 最近为了让python语言能够直接调用PaddleOCR的C++的动态链接库,针对本人已经开源的PaddleOCR项目https://gitee.com/raoyutian/paddle-ocrsha...

  • 前提准备与运行环境请参考:   在 Go 中 for 用来循环和迭代, Go 语言没有 while,do,until 这几个关键字,我们只能使用 for。这也算是件好事! 让我们来为一...

  • 面向对象介绍 面向对象和面向过程都是解决问题的一种思路。 面向过程: 是一种以过程为中心的编程思想,实现功能的每一步都是自己实现的。面向过程编程最易被初学者接受,其往往用一长段代码来实现指定功能...

  • 什么是传值(值传递) func main() { i:=10 ip:=&i fmt.Printf("原始指针的内存地址是:%p\n",&ip) modify(ip) fmt.Println(...

  • 一 Consul介绍 Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置。 Consul是分布式的、高可用的、可横向扩展的。 1. 注册中心Consul基本介绍 ...

  • 概述建议先阅读 goroutine 小节。Go 箴言: 不要通过共享内存来通信,而要通过通信来共享内存。goroutine 是 Go 程序并发执行的实体,channel (通道) 则是它们之间的连接,...