当前位置: 首页 > news >正文

【Golang】Golang基础入门级教程 -- 0基础安装搭建Go语言开发环境

目录

安装和下载GO语言

下载

下载地址

版本的选择

 安装

Windows安装

Linux下安装

Mac下安装

检查

 

GOROOT和GOPATH

GOPROXY 

Go开发编辑器 

VS Code介绍

下载与安装

配置

Go扩展

第一个Go程序

Hello World

go mod init

编写

编译

 VSCode切换默认终端


本篇文章基于Go1.20.1版本,从零开始,带领大家下载和搭建Go语言及开发环境。

注意Go语言1.14版本之后推荐使用go modules管理依赖,也不再需要把代码写在GOPATH目录下了 。

安装和下载GO语言

下载

下载地址

Go官网下载地址:https://golang.org/dl/

Go官方镜像站(推荐):All releases - The Go Programming Language

版本的选择

Windows平台和Mac平台推荐下载可执行文件版,Linux平台下载压缩文件版。

注意:由于Go语言的更新迭代速度较快,所以此处可以选择最新版下载,但安装过程是大致一致的。

 安装

Windows安装

此安装实例以 64位Win10系统安装 Go1.20.1可执行文件版本为例。

将上一步选好的安装包下载到本地。

 

 

 双击下载好的文件,然后按照下图的步骤安装即可。

 指定一个Go的安装目录,建议不要放置C盘。

 点击Install。

 等待程序完成安装,然后点击“Finish”退出安装程序。

 

Linux下安装

如果不是要在Linux平台敲go代码就不需要在Linux平台安装Go,我们开发机上写好的go代码只需要跨平台编译(详见文章末尾的跨平台编译)好之后就可以拷贝到Linux服务器上运行了,这也是go程序跨平台易部署的优势。

我们在版本选择页面选择并下载好go1.20.1.linux-amd64.tar.gz文件:

wget https://dl.google.com/go/go1.14.1.linux-amd64.tar.gz

 将下载好的文件解压到/usr/local目录下:

tar -zxvf go1.14.1.linux-amd64.tar.gz -C /usr/local  # 解压

如果提示没有权限,加上sudo以root用户的身份再运行。执行完就可以在/usr/local/下看到go目录了。

配置环境变量: Linux下有两个文件可以配置环境变量,其中/etc/profile是对所有用户生效的;$HOME/.profile是对当前用户生效的,根据自己的情况自行选择一个文件打开,添加如下两行代码,保存退出。

export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin

修改/etc/profile后要重启生效,修改$HOME/.profile后使用source命令加载$HOME/.profile文件即可生效。 检查:

~ go version
go version go1.14.1 linux/amd64

Mac下安装

下载可执行文件版,直接点击下一步安装即可,默认会将go安装到/usr/local/go目录下。

检查

上一步安装过程执行完毕后,可以打开终端窗口,输入go version命令,查看安装的Go版本。

 

GOROOT和GOPATH

GOROOTGOPATH都是环境变量,其中GOROOT是我们安装go开发包的路径,而从Go 1.8版本开始,Go开发包在安装完成后会为GOPATH设置一个默认目录,并且在Go1.14及之后的版本中启用了Go Module模式之后,不一定非要将代码写到GOPATH目录下,所以也就不需要我们再自己配置GOPATH了,使用默认的即可。

想要查看你电脑上的GOPATH路径,只需要打开终端输入以下命令并回车:

go env

在终端输出的内容中找到GOPATH对应的具体路径。

GOPROXY 

Go1.14版本之后,都推荐使用go mod模式来管理依赖环境了,也不再强制我们把代码必须写在GOPATH下面的src目录了,你可以在你电脑的任意位置编写go代码。(网上有些教程适用于1.11版本之前。)

默认GoPROXY配置是:GOPROXY=https://proxy.golang.org,direct,由于国内访问不到https://proxy.golang.org,所以我们需要换一个PROXY,这里推荐使用https://goproxy.iohttps://goproxy.cn

可以执行下面的命令修改GOPROXY:

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

Go开发编辑器 

理论上使用任何一款文本编辑器都可以做Go语言开发,这里推荐使用VS CodeGoland。本篇文章中我们使用VS Code进行开发。

VS Code介绍

VS Code全称Visual Studio Code,是微软公司开源的一款免费现代化轻量级代码编辑器,支持几乎所有主流的开发语言的语法高亮、智能代码补全、自定义热键、括号匹配、代码片段、代码对比 Diff、GIT 等特性,支持插件扩展,支持 Win、Mac 以及 Linux平台。

虽然不如某些IDE功能强大,但是它添加Go扩展插件后已经足够胜任我们日常的Go开发。

下载与安装

VS Code官方下载地址:Download Visual Studio Code - Mac, Linux, Windows

三大主流平台都支持,请根据自己的电脑平台选择对应的安装包。

 双击下载好的安装文件,双击安装即可。

配置

安装中文简体插件

点击左侧菜单栏最后一项管理扩展,在搜索框中输入Chinese ,选中结果列表第一项,点击install安装。

安装完毕后右下角会提示重启VS Code,重启之后你的VS Code就显示中文了。

Go扩展

现在我们要为我们的VS Code编辑器安装Go扩展插件,让它支持Go语言开发。

 直接进行安装即可。

第一个Go程序

Hello World

 现在我们来创建第一个Go项目——hello

go mod init

使用go module模式新建项目时,我们需要通过go mod init 项目名命令对项目进行初始化,该命令会在项目根目录下生成go.mod文件。例如,我们使用hello作为我们第一个Go项目的名称,执行如下命令。

go mod init hello

注意如果此时VS Code右下角弹出提示让你安装插件,务必点 install all 进行安装。

编写

接下来在该目录中创建一个main.go文件:

package main  // 声明 main 包,表明当前是一个可执行程序import "fmt"  // 导入内置 fmt 包func main(){  // main函数,是程序执行的入口fmt.Println("Hello World!")  // 在终端打印 Hello World!
}

注意fmt包是可以自动导入的

 

编译

go build命令表示将源代码编译成可执行文件。

(终端进入方式是点击左下角的感叹号即可)

在hello目录下执行:

go build

编译得到的可执行文件会保存在执行编译命令的当前目录下,如果是Windows平台会在当前目录下找到hello.exe可执行文件。

可在终端直接执行该hello.exe文件:

c:\desktop\hello>hello.exe
Hello World!

注意这里输入hello.exe错误请看下面 

我们还可以使用-o参数来指定编译后得到的可执行文件的名字。

go build -o heiheihei.exe

 VSCode切换默认终端

刚才出错的朋友可以试一下:

./hello.exe

会发现这样就可以成功运行出来,这时为什么呢?
其实就是我们的终端所不同,在开始时使用的终端是powershell,而在文章之中我们使用的则是cmd。

那么下面我们就将其默认终端更改成cmd吧!

 点击进入之后:
 

选择Command Prompt。

最后重启VS Code中已经打开的终端或者直接重启VS Code就可以了。

(最后,文章为作者学习李文周的博客后所写,所以会有相似处,在这里也将大佬 李文周的博客地址放置此:这里 如果大家有兴趣可以去看一下)

相关文章:

【Golang】Golang基础入门级教程 -- 0基础安装搭建Go语言开发环境

目录 安装和下载GO语言 下载 下载地址 版本的选择 安装 Windows安装 Linux下安装 Mac下安装 检查 GOROOT和GOPATH GOPROXY Go开发编辑器 VS Code介绍 下载与安装 配置 Go扩展 第一个Go程序 Hello World go mod init 编写 编译 VSCode切换默认终端 本篇文章…...

MATLAB | 如何解决实验数据散点图重叠问题(overlap)

本期部分实验效果: 这期讲一下如果数据重合严重该咋办(overlap),事先说明,本文中的绘图均使用一个几行的简单小代码进行了修饰: function defualtAxes axgca;hold on;box on ax.XGridon; ax.YGridon; ax.XMinorTickon; ax.YMinor…...

Kubernetes 一键部署利器:kubeadm

文章目录集群部署痛点kubeadm 的工作原理kubeadm init 的工作流程kubeadm join 的工作流程kubeadm 的部署配置参数集群部署痛点 Kubernetes 的部署一直以来都是挡在初学者前面的一只“拦路虎”。尤其是在 Kubernetes 项目发布初期,它的部署完全要依靠一堆由社区维护…...

[jS 事件循环理解] 主线程 宏任务 微任务 - 执行顺序优先级理解

最近看了一个帖子 事件循环机制-宏任务-微任务 把js单线程中 , 主线程 | 宏任务 | 微任务 的调用顺序讲解的很直白精巧 , 记录一下以供查阅 1.主线程, 可以理解为从上到下顺序执行的一个js线程 2. 宏任务 script / setTimeOut /setInterval等 3. 微任务主要有promise等 4. 热…...

顺序表和链表的比较

这两个结构各有优势,相辅相成。 顺序表: 优点: 1.支持随机访问。 2.CPU高速缓存命中率更高。(物理空间连续) 缺点: 1.头部和中部插入和删除时间效率低(O(n))。 2.连续的物理空间,空间不够后需要增容&#xff1a…...

Java为什么只能单继承???

目录 先屡清楚继承和实现的区别: 分析原因: 多继承虽然能使子类同时拥有多个父类的特征,但是其缺点也是很显著的,主要有两方面: (1)如果在一个子类继承的多个父类中拥有相同名字的实例变量,子类在引用该…...

数据安全-分类分级 调研分析报告

目录 前言一、数据分类分级概述1.数据分类2.数据分级二、数据分类分级原则三、数据分类分级的框架和方法1.数据分类分级的框架2.分类标准分类常见的方法2.1 MECE2.2 线分法和面分法及混合分法2.3 数据主题域2.4 技术选型维度2.5 以业务应用维度2.6 信息安全隐私方面的分类法3.分…...

浏览器对象详解

文章目录浏览器对象详解一、参考资料二、认识浏览器运行态下的 js1.问:是否了解浏览器的执行态(分层设计)?2.BOM1.[location](https://developer.mozilla.org/zh-CN/docs/Web/API/Location)拓展方向:2.[History](https…...

异步电路后端实现流程(cdc signOff 后端做什么)

一种后端异步电路的signOff流程同步电路和异步电路分别signOff对于同步电路,后端会分析sta setup/hold,这里不在赘述。在该scenario下 异步电路是不会分析,也不会关注异步电路之间的走线在cdc scenario(mode)下sdc有一下设置:将所…...

Linux网络编程实战介绍

文章目录 前言一、Linux网络编程介绍二、文章目录总结前言 本专栏将为大家讲解Linux网络编程的知识,本专栏只需要有C语言基础即可学习,学习本专栏将大大提高你的C语言水平,当然了我也还会在ARM板子上进行实验将Linux驱动也和网络编程联系起来,方便大家去实现自己的项目。我…...

C++概述 课堂笔记

函数的重载在C语言中函数名是唯一的,不可以重复定义,当我们利用函数执行,功能相似的函数,我们也不能使用同一个函数,比如说,求整型的函数,不能用来求浮点型、字符型。在C中引入函数重载的概念&a…...

一文读懂SpringBoot整合Elasticsearch(一)

(本篇文章主要介绍Spring Boot如何整合Elasticsearch,包括基本配置、数据操作、搜索功能等方面。) 一、前言 Elasticsearch是一款全文搜索引擎,可用于快速、准确地存储、搜索和分析大量数据。而Spring Boot是一款快速开发框架&a…...

(数论)(枚举)(前缀和)1230. K倍区间

目录 题目链接 一些话 切入点 流程 套路 ac代码 题目链接 1230. K倍区间 - AcWing题库 ~数~啦!我草,又~在~水~字~数~啦!我草,又~在~水&…...

万字带你深入理解 Linux 虚拟内存管理(下)

接上文:万字带你深入理解 Linux 虚拟内存管理(上) 6. 程序编译后的二进制文件如何映射到虚拟内存空间中 经过前边这么多小节的内容介绍,现在我们已经熟悉了进程虚拟内存空间的布局,以及内核如何管理这些虚拟内存区域&…...

【iOS】—— JSONModel源码学习

JSONModel 文章目录JSONModel关于JSONModel的用法initWithDictionary等方法load方法实现load方法调用时机init方法__setup__方法__inspectProperties:方法__doesDictionary方法__importDictionary方法关于JSONModel的用法 可以参考之前写的博客:【iOS】—— JSONMo…...

单片机怎么实现真正的多线程?

所谓多线程都是模拟的,本质都是单线程,因为cpu同一时刻只能执行一段代码。模拟的多线程就是任务之间快速切换,看起来像同时执行的样子。据说最近有多核的单片机,不过成本应该会高很多。对于模拟的多线程,我知道的有两种…...

【LeetCode】剑指 Offer(23)

目录 题目:剑指 Offer 46. 把数字翻译成字符串 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过啦!!! 写在最后: 题目:剑指 Offer 46. 把…...

[免费专栏] 汽车威胁狩猎之不应该相信的几个威胁狩猎误区

也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 汽车威胁狩猎专栏长期更新,本篇最新内容请前往: …...

LinuxFTP文件传输服务和DNS域名解析服务

♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维课堂笔记,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生! ♥️夕阳下,是最美的绽放&#xff0…...

二叉搜索树原理及底层实现

二叉搜索树BST 概念 二叉搜索树又称二叉排序树,它可以是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值;若它的右子树不为空,则右子树上所有节点的值都…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

Vite中定义@软链接

在webpack中可以直接通过符号表示src路径&#xff0c;但是vite中默认不可以。 如何实现&#xff1a; vite中提供了resolve.alias&#xff1a;通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么&#xff1f;它的作用是什么&#xff1f; Spring框架的核心容器是IoC&#xff08;控制反转&#xff09;容器。它的主要作用是管理对…...

渗透实战PortSwigger靶场:lab13存储型DOM XSS详解

进来是需要留言的&#xff0c;先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码&#xff0c;输入的<>当成字符串处理回显到页面中&#xff0c;看来只是把用户输…...