搭建 Go 语言的开发环境(文末附视频讲解)

news2024/11/15 17:40:29

从本小节开始,我们就要正式动手实践了。

类比现实生活,我们若要钉钉子,就需要准备锤子;想要烧菜,就需要准备灶具和食材…… 类似地,若要在电脑上编写 Go 语言程序,便要先配置开发环境。

下载和安装

Google 官方提供了适用于不同操作系统(Windows、macOS、Linux等)、不同 CPU 类型(x86、x86-64、ARM64等)的软件开发工具包(也称为SDK)。此外,还提供了源码,以便开发者自行编译 SDK。请点击:下载地址,获取最新版本的 SDK。

💡 提示:访问 Go 语言官网(https://golang.google.cn/),点击“Download”按钮后,会自动下载最适合当前电脑运行的 SDK。如果下载和安装配置在同一台电脑上进行,这样做会更节省时间。

本小册以 1.17.x 版本的 Go SDK 为例进行讲解,建议各位也采用这个版本。为了进一步方便大家,点击以下链接可直接下载对应操作系统的SDK:

  • Microsoft Windows(64位安装包):golang.google.cn/dl/go1.17.1…
  • Microsoft Windows(32位安装包):golang.google.cn/dl/go1.17.1…
  • Linux:golang.google.cn/dl/go1.17.1…
  • macOS(Intel):golang.google.cn/dl/go1.17.1…
  • macOS(Apple Silicon):golang.google.cn/dl/go1.17.1…

下载完成后进行安装。 对于 Windows 和 macOS,安装 Go SDK 和安装其它软件大同小异,只需根据安装向导逐步进行,直到出现安装成功字样即可,具体不再赘述。

对于 Linux,tar.gz 格式是压缩包(go1.17.1.linux-amd64.tar.gz),需要手动解压并将其放在合适的目录中。以 Ubuntu 为例,打开命令行窗口,使用 cd 命令导航至 SDK 压缩包所在目录(如~/Downloads)。

💡 提示:在 Ubuntu 中打开命令行窗口的快捷键是 Ctrl+Alt+T。此外,也可使用文件浏览器(nautilus)导航至 SDK 压缩包所在目录,然后在窗口空白处单击鼠标右键,在弹出的菜单中选择“在此处打开命令行程序”也可启动命令行窗口,启动时将自动导航到 SDK 压缩包所在目录。

接着,使用 cp 命令将压缩包拷贝至/usr/local/lib中,输入命令如下:

sudo cp ./go1.17.1.linux-amd64.tar.gz /usr/local/lib/

拷贝至 /usr/local/lib 中的文件权限不受当前登录用户限制,可通过配置系统环境变量提供给其他用户账户使用。若希望仅为当前用户配置,则可拷贝至 /home 中的某个目录中。有关环境变量的更多说明和配置将在后文中讲解。

稍等片刻,拷贝即可完成。接着,使用 cd 命令导航到 /usr/local/lib 目录中,将压缩包解压,解压命令为:

sudo tar xzvf go1.17.1.linux-amd64.tar.gz

这里注意,由于使用了 sudo 前缀,这一步可能要输入 root 账户密码才能继续,请确保知晓正确的 root 账户密码。

在命令行输出若干解压日志后,解压完成。此时,/usr/local/lib 中的内容将类似下图所示:

go 目录即为解压后生成的目录,它是 Go SDK。到此,go1.17.1.linux-amd64.tar.gz 文件不再有用,可以使用 rm 命令将其删除。

配置环境变量

环境变量的定义如下:

环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。

通俗地讲,如果不设置环境变量,例如 Windows 中名为 PATH 的环境变量值,在命令行执行某个命令,则需要先导航到这个命令文件所在的目录才行。但是,将命令文件所在完整路径追加到 PATH 值后,则无论身处哪个目录,都可以随时执行这个命令。此外,不同的应用程序可能会查找特定名称的环境变量,如即将配置的 GOPATH。

无论我们使用 Windows、macOS 还是 Linux,系统都提供了两组环境变量,即系统环境变量和用户环境变量。系统环境变量影响所有系统中的用户,用户环境变量则只影响系统中的当前用户。

💡 提示:对于大部分人而言,操作系统中可能仅有一个用户账户。此时系统环境变量和用户环境变量的作用域基本相同。当系统中存在多个用户账户时,请大家根据自身需求选择环境变量的配置位置。

对于 Windows,请使用图形化的系统属性窗口进行添加;对于 Linux,请参考macOS的配置说明进行添加。接下来,以 macOS 为例,配置用户环境变量。

启动命令行,输入:

sudo vi ~/.bash_profile

同样,这里由于使用了 sudo 前缀,这一步可能要输入 root 账户密码才能继续,请确保知晓正确的 root 账户密码。

GOPATH

GOPATH 用于指定我们的开发工作区,是存放源代码、测试文件、库静态文件、可执行文件的目录。自 Go 1.1 版本开始要求配置这个变量,对于 Linux 和 macOS,GOPATH 的默认值是 $home/go。而在 Windows 中 GOPATH 的默认值则为 %USERPROFILE%\go。通过配置 GOPATH,可以修改这个路径,但不能和 Go 安装目录相同。 添加 GOPATH 的方法是在 ~/.bash_profile 文件的最后添加如下一行:

export GOPATH=$HOME/golang

💡 提示:golang 目录名并非强制要求,可根据自身喜好自定义目录名。

GOROOT

GOROOT 表示 Go 语言的安装目录。当系统中存在多个版本的 Go SDK 时,通过设置这个环境变量,可方便我们在不同的 Go SDK 版本之间切换。 添加 GOROOT 的方法是在 ~/.bash_profile 文件的最后添加如下一行:

export GOROOT=$HOME/go1_17

修改 GOROOT 后,还要追加名为 PATH 环境变量的值,GOROOT/bin 包含 Go SDK 提供的工具链。继续在 ~/.bash_profile 中添加如下一行:

export PATH=$PATH:$GOROOT/bin

❗️ 注意:go1_17 目录名请大家根据自己电脑中 Go SDK 安装情况进行修改,不要照抄。

GOBIN

GOBIN 表示程序编译后二进制命令的安装目录,一般设置为 GOPATH/bin。方法为在 ~/.bash_profile 中添加如下一行:

export GOBIN=$GOPATH/bin

使配置生效

保存 ~/.bash_profile 并退出,重启电脑后上述环境变量生效。 最后,再次启动命令行,输入

go env

命令,查看 Go SDK 环境变量状态,找到 GOPATH、GOROOT 和 GOBIN,复查其是否已经变为我们设置的值。 我的环境变量设置情况如下图所示:

第一个Go程序

习惯上,我们将完成开发环境配置后的第一个程序称为 “Hello World”。这个程序的效果是向控制台输出 “Hello World” 文本,用于验证环境配置准确无误。

❗️ 注意:本小册虽然以 macOS 为例,但示例代码都经过跨平台运行测试。但我在讲解文字中会使用 macOS 中的某些专有名词,如“终端”,在 Linux 中也称为“终端”,但在 Windows 中称为“命令提示符”。

使用 vi 或启动任何一个纯文本编辑器,输入如下内容:

package main
import "fmt"
func main(){
    fmt.Println("Hello World!")
}

将其保存为 hello.go。 接下来,启动终端,导航至 hello.go 所在目录,然后执行以下命令,编译 hello.go 程序:

go build hello.go

稍等片刻,程序编译完成。编译完成后将生成名为 hello 的可执行文件。在终端执行这个文件,可以看到 “Hello World!” 字样的文本输出,如下图所示:

到此,Go 语言开发环境配置完成,且准确无误。我们今后便可使用 Go 语言开发程序了!

小结

🎉 恭喜,您完成了本次课程的学习!

📌 以下是本次课程的重点内容总结,需要牢牢把握:

  1. 掌握 Go SDK 的下载和安装;
  2. 了解 GOPATH 环境变量的意义,并会配置它;
  3. 体验 Go 程序的开发、编译和运行过程。

➡️ 在下次课程中,我们会阐述如下内容:

  1. 剖析 Hello World 示例,解构 Go 程序( Go 源码的结构);
  2. 如何在 Go 程序代码中添加注释(添加注释的 2 种方式);
  3. 使用 Go SDK 提供的命令行工具(6 个 Go SDK 命令)。

  1. 零基础通关 Go 语言 - 萧文翰 - 掘金小册2大部分,10大技能,全解Go语言语法。「零基础通关 Go 语言」由萧文翰撰写,950人购买https://s.juejin.cn/ds/kqXRu6Y/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/171622.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

干货 | 互联网广告数据的匿名化方案研究

以下内容整理自清华大学《数智安全与标准化》课程大作业期末报告同学的汇报内容。第一部分:背景介绍一、匿名化必要性互联网广告具有非常重要的商业价值,同时也是涉及数据处理十分密集的行业,出现了操作规范化、个人信息保护和商业数据安全等…

[GXYCTF2019]禁止套娃(无参数RCE)

目录 信息收集 知识讲解 涉及函数 PHP的正则表达式 无参rce 用到的函数 思路分析 方法一 方法二 信息收集 拿到这道题,抓包看了看,啥也没有,用dirsearch爆破目录发现.git目录,猜测存在.git源码泄露,用githac…

Web Spider XHR断点 堆栈跟值 逆向案例(四)

声明 此次案例只为学习交流使用,抓包内容、敏感网址、数据接口均已做脱敏处理,切勿用于其他非法用途; 文章目录声明前言一、任务说明二、网站分析三、XHR断点调试,扣JS加密代码四、代码实现1、JS加密代码:encode.js2、…

安卓逆向:基础入门(一)

前言随着app的广泛应用,使用过程中,难免会遇到些很不友好的功能,比如:游戏充值、间断性弹窗广告、续费解锁下一回等等。而随之会产生如何将这些功能取消掉,而Android逆向就可以做到,纵向丝滑。当然这只是安…

Kinect与TOF、双目、结构光相机比较相机国产、非国产统计参数对比分析

Kinect与TOF、双目、结构光相机比较相机国产、非国产统计参数对比分析 Kinect v1和Kinect v2之间的参数比较 从图中可以看出,Kinect v2的表现比Kinect v1要好得多:首先最令人印象深刻的是分辨率的提高,v2达到了1080p,甚至视野也大…

JavaWeb | JDBC概述及IDEA连接MySQL

本专栏主要是记录学习完JavaSE后学习JavaWeb部分的一些知识点总结以及遇到的一些问题等,如果刚开始学习Java的小伙伴可以点击下方连接查看专栏 本专栏地址:🔥JavaWeb Java入门篇: 🔥Java基础学习篇 文章目录一、前言二…

java基础学习 day36(字符串相关类的底层原理)

字符串存储的内存原理 直接赋值会复用字符串常量池中已有的new出来的不会复用,而是开辟一个新的空间来创建 “”号比较的到底是什么 基本数据类型比较数据值引用数据类型比较地址值 PS. 所以以后对引用数据类型,不要用“”,改用.equals()…

RS485接线方式小科普

欢迎来到东用知识小课堂!RS-485采用平衡发送和差分接收方式实现通信:发送端将串行口的ttl电平信号转换成差分信号a,b两路输出,经过线缆传输之后在接收端将差分信号还原成ttl电平信号。RS-485总线网络拓扑一般采用终端匹配的总线型…

【Linux】基于 Pintos 实现新的用户级程序的系统调用 | 冯诺依曼架构

💭 写在前面:本章我们首先会明确冯诺依曼体系结构的概念,旨在帮助大家理解体系结构在硬件角度去理解数据流走向的问题。理解完之后我们再去谈操作系统,这个在之前的章节已经有所铺垫,当时我们只讲解了操作系统是什么&a…

车载以太网 - 车辆信息和车辆声明 - 09

到今天这一篇,对于ISO 13400 - 2的DoIP协议介绍就完事了,对DoIP协议的规范介绍基本已经全部包括了,无论是我们作为软件开发人员还是测试人员,了解这部分内容基本就能够满足这块基础的开发要求,大家如果在研究或者学习这块内容的时候有什么问题欢迎私聊;并且在本篇文章结束…

Nginx使用(四)动静分离实例

一、简介Nginx动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是动态请求和静态请求分开,可以理解成使用Nginx处理静态页面,Tomcat处理动态页面,动静分离从目前实…

Linux系统安装Redis

我这里以CentOS7为例 VMware安装完centOS7之后 1.首先开启网络: 查看ip的命令不是传统的ifconfig或者ipconfig而是ip address 刚安装完使用ip address查看的时候会发现没有ip地址,这里需要修改设置启动网卡 vi /etc/sysconfig/network-scripts/ifcf…

英语学习打卡day1

2023.1.19 重点单词 1.speculation n.推测,投机 speculate v. speculative adj. spectate v.看 spectator inspect 检查(往里看) aspect 外观(看一眼) 2.literally adv.(强调事实可能令人惊讶)真正地,…

5.JAVA基础入门必备

文章目录前言一、数据类型二、标识符三、键盘录入四、IDEA中的第一个代码五、IDEA中的设置六、IDEA的项目和模块操作总结前言 一、数据类型 重点记忆byte的取值范围!! 不同类型数据的打印: public class VariableDemo3{//主入口public static void main(String[] args){//byt…

FrameBuffer 应用

1.Frame 是帧的意思, buffer 是缓冲的意思,所以 Framebuffer 就是帧缓冲。Framebuffer 就是一块内存,里面保存着一帧图像。帧缓冲(framebuffer)是 Linux 系统中的一种显示驱动接口,它将显示设备&#xff08…

技术写作指南。 坚持不下去,怎么办?(文末附视频)

“坚持不下去,怎么办?”这是很多人会遇到的问题,不仅仅是技术写作,任何需要耗费额外精气神的事情都无法长期坚持,例如运动健身、专业学习等。 这里分享一点自己的经验与看法,希望可以对大家的学习有所帮助…

Y9000P Ubuntu/Windows 双系统安装

一:配置介绍 Y9000P默认系统Win11,系统盘500G,从盘2T,内存32G,显卡3060 二:Windows系统分盘 系统盘(磁盘1)建议通过压缩卷分出300M作为Ubuntu的引导分区。 从盘(磁盘2…

23种设计模式(十一)——生成器模式【对象创建】

文章目录 意图什么时候使用生成器真实世界类比生成器模式的实现生成器模式的优缺点亦称:建造者模式、Builder 意图 生成器模式是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 换成大白话理解就是:一个复杂的对象,它的创建过程和使用过程要…

云网络VPC核心知识总结

云网络VPC核心知识总结

【OpenCV】 Octave | 角点检测 | SIFT/SURF算法

Ⅰ. 图像特征提取与描述 0x00 角点特征 图像的特征 大多数人都玩过拼图游戏。首先拿到完整图像的碎片,然后把这些碎片以正确的方式排列起来从而重建这幅图像。如果把拼图游戏的原理写成计算机程序,那计算机就也会玩拼图游戏了。 在拼图时&#xff0c…