【启程Golang之旅】环境设置、工具安装与代码实践

欢迎来到Golang的世界!在当今快节奏的软件开发领域,选择一种高效、简洁的编程语言至关重要。而在这方面,Golang(又称Go)无疑是一个备受瞩目的选择。在本文中,带领您探索Golang的世界,一步步地了解这门语言的基础知识和实用技巧。

目录

初识Golang

工具选择安装

环境安装与配置

语言编译特点


初识Golang

     go语言由谷歌传奇大牛 肯·汤普逊 于2007年设计创建,他也是B和C语言的发明者,2012年发布了开源版本1.0版本,go语言的设计初衷就是简单高效,这也是我们常常说go而不是golang的原因,其源代码编译成机器代码,意味着通常优于解释性语言,因go极快的编译速度而出名。

     尽管go是静态类型语言,但是其提供了执行类型的推断,来让语法更简洁和实用,此外其也具有包和模块系统,方便再项目开发期间导入导出代码,当然go还支持并行开发,能够指定哪些函数可以与其他函数同时运行,go语言的发展简史大致如下:

2007年,谷歌工程师RobPike,KenThompson和RobertGrisemer开始设计一门全新的语言,这是Go语言的最初原型。

2009年11月,Google将Go语言以开放源代码的方式向全球发布。

2015年8月,Go1.5版发布,本次更新中移除了"最后残余的c代码”

2017年2月,Go语言G01.8版发布。

2017年8月,Go语言Go1.9版发布。

2018年2月,Go语言Go1.10版发布。

2018年8月,Go语言Go1.11版发布。

2019年2月,Go语言Go1.12版发布。

2019年9月,Go语言Go1.13版发布。

2020年2月,Go语言Go1.14版发布。

2020年8月,Go语言Go1.15版发布。

一个go语言的应用程序,在运行的时候是不需要依赖外部库的,把执行时需要的所有库都打包到程序当中,所以go的程序比较大,如果import的包在程序中没有使用的话,程序是不允许编译的。

工具选择安装

开发go语言许多开发者工具都可以支持,如下:

1)visual studio code,Microsoft产品(简称VSCode):一个运行于Mac Os、Windows和Linux之上的,默认提供Go语言的语法高亮,安装Go语言插件,还可以支持智能提示,编译运行等功能。

2)SublimeText,可以免费使用,默认也支持Go代码语法高亮,只是保存次数达到一定数量之后就会提示是否购买,点击取消继续用,和正式注册版本没有任何区别

3)Vim:Vim是从vi发展出来的一个文本编辑器,代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用

4)Emacs:Emacs传说中的神器,她不仅仅是一个编辑器,因为功能强大,可称它为集成开发环境

5)Eclipse IDE工具,开源免费,并提供GoEclipse插件

6)LiteIDE,LiteIDE是一款专门为Go语言开发的跨平台轻量级集成开发环境(IDE),是中国人开发的。

7)JetBrains公司的产品:PhpStrom、WebStrom和PyCharm等IDE工具,都需要安装Go插件,还要一款特别开发go语言的工具,名称就叫做Golang。

这里我们选择JetBrains公司的Golang开发者工具进行后期的go语言的开发,其安装教程如下:

首先我们先打开工具下载 官网 ,点击Download下载即可,如下:

下载完成双击下载的exe文件进行安装,然后傻瓜式安装即可,这里安装的文件位置记得不要放在C盘即可,然后下载完成双击打开工具,这里安装一下中文的插件然后重启工具即可:

环境安装与配置

随着golang的发展衍生了许多版本,不同的项目可能用到的golang的版本不同,所以这里我们需要使用一个版本控制工具进行安装,当然你只安装一个版本也是可以的,打开 官网 ,进行傻瓜式的安装然后配置一下环境变量即可,这里不再赘述,本文讲解一下多版本管理的操作:

首先先确保你电脑之前没有下载过golang环境,然后点击 链接 ,进入github页面点击下载,这里根据自己电脑的系统情况进行安装,这里我拿window进行举例,点击下载:

压缩包解压之后,将其放置在自定义目录里面,尽量不要放在C盘,如下:

接下来打开系统中的环境变量,来配置环境,需要进行如下几点的配置:

设置镜像:国内无法自由访问官网,为确保使用现在安装go流程,设置国内镜像点,配置系统变量如下:

G_MIRROR = https://golang.google.cn/dl/

设置g的工作目录:这里放在我自定义的golang目录里面,配置系统变量如下:

G_HOME = D:\environment\golang

配置GOROOT:这个指向g工作目录下的go,g安装go版本后,会在这个路径下建立一个软链到versions目录下的指定版本,靠这个方法来控制当前的go版本,如果安装g之前已经安装过go了,需要修改GOROOT这个环境变量,配置系统变量如下:

GOROOT = %G_HOME%\go

支持自定义安装目录:开启所有的实验特性,配置支持自定义安装目录,并配置GOBIN:

G_EXPERIMENTAL = true
GOBIN = %GOROOT%\bin

配置path变量:设置 g.exe 目录(及 g.exe 文件所在目录),这样就可以使用命令行随时访问,并配置 golang 执行文件目录:

D:\environment\golang\g

%GOBIN%

cmd测试: 配置完上面的环境变量之后,接下来我们打开终端输入 g 进行测试,如下说明成功:

输入 g env 可以看到g的环境变量配置;输入 g -v 可以看到当前g的版本信息:

以下是 g 工具常用的命令:

# 自动升级至最新版本
g self update
# 查询已安装的go版本
g ls
# 查询可供安装的所有go版本
g ls-remote
#查询当前可供安装的stable状态的go版本
g ls-remote stable
#安装指定go版本1.22.1
g install 1.22.1
# 切换至指定版本,需已下载
g use 1.22.1
# 卸载一个已安装的go版本
g uninstall 1.22.1

接下来我们开始给我们的电脑开始安装go环境,执行如下命令查看可以按钮的go环境:

这里我选择安装两个版本:1.22.1 和 1.16.3 ,如下:

回到我们自定义的安装go环境的目录,可以看到我们的版本都已经安装成功了:

现在我们cmd执行go version可以查看到我们当前使用的go环境版本如下:

环境工具安装配置好之后,接下来我们开始正式在编辑器中编写代码,如下:

package main // 声明文件所在的包,每个go文件必须有归属的包
import "fmt" // 引入程序需要的包,为了使用包里面封装好的函数

func main() { // main主函数,程序的入口
	fmt.Println("Hel12lo, World!") // 在控制台打印输出一句话,双引号中的内容会原样输出
}

这里借助go包中的打印函数,在控制台输出 hello world 字样:

go语言的项目,需要有特定的目录结构进行管理,不能随便写,一个标准的go工程需要有三个目录,需要用一个名为GOPATH的环境变量来指定,如下,我们新建项目直接打开src文件即可:

src:存储项目的源代码

bin:编译之后的程序之后,使用标准命令go install之后存放位置

pkg:存放缓存包

语言编译特点

go语言是不区分平台的,在windows下面也可以编译一个程序,在linux下运行,需要两个环境变量来控制,如下:

GOOS设定运行的平台

mac:GOOS = darwin;linux:GOOS = linux;windows:GOOS = windows

GOARCH目标平台的体系构架

386:GOARCH = 386;amd64:GOARCH = amd64;arm:GOARCH = arm

执行 go env 可以看到我们在 windows 系统下运行的环境变量:

我们也可以将go编辑成linux下的运行的代码,我们可以通过命令 go build -o 命名文件 源文件,将一个go项目打包成一个exe文件,并且可以在windows系统下运行,如下:

如果想把文件编辑成linux系统下运行的可执行文件,通过改变goos可以操作,如下:

然后我们打包一个项目在windows运行肯定会出错的:

如果想把打包好的exe文件安装到一个目录上,我们就需要通过 go install 目录去执行,这里需要配置一下 GOBIN 环境变量的内容,修改一下其默认的位置, 这里我将其设置到如下目录:

执行如下命令之后

可以在设置文件夹下出现编译完成的exe文件,执行之后出现结果:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LearnOpenGL(十七)之混合

一、丢弃片段 有些图片并不需要半透明,只需要根据纹理颜色值,显示一部分(alpha值为1.0),或者不显示一部分(alpha值为0.0),没有中间情况。我们需要丢弃(Discard)显示纹理中透明部分的…

嵌入式学习71-(内核定时器和传感器)

缺少内核配置文件.config 解决:cp config_mini2440_td35 .config 1.make 编译一下 生成timer.ko文件 2. cp timer.ko ~/nfs/rootfs 为什么要拷贝到rootfs中,这是挂载的根文件系统 ,使用nfs作为根文件系统 实际上内核启动的时候并不知道…

【问题实操】银河高级服务器操作系统实例分享,网卡drop问题分析

1.服务器环境以及配置 系统环境 物理机/虚拟机/云/容器 物理机 网络环境 外网/私有网络/无网络 私有网络 硬件环境 机型 华鲲振宇 TG225B1 处理器 kunpeng 920 内存 1024GB 主板型号 TG225B1 HZKY 整机类型/架构 aarch64 固件版本 6.57 软件环境 具体操作系…

基于梯度流的扩散映射卡尔曼滤波算法的信号预处理matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 扩散映射(Diffusion Maps) 4.2 卡尔曼滤波 4.3 基于梯度流的扩散映射卡尔曼滤波(GFDMKF) 5.完整程序 1.程序功能描述 基于梯度流的扩散…

Golang | Leetcode Golang题解之第89题格雷编码

题目&#xff1a; 题解&#xff1a; func grayCode(n int) []int {ans : make([]int, 1<<n)for i : range ans {ans[i] i>>1 ^ i}return ans }

vue3使用el-radio-group获取表格数据无法选中问题

这里是引用 今天写项目发现使用el-radio-group无法获取表格中的数据&#xff0c;于是去官网查看了一下&#xff0c;发现写的没啥问题&#xff0c;就是 <el-radio value"1" size"large"> 未知</el-radio>这样的写法&#xff0c;又在网上看了一些…

RGMII基于V2.0规范解读

一、说明 RGMII&#xff08;Reduced Gigabit Media Independent Interface&#xff09;是Reduced GMII&#xff08;吉比特介质独立接口&#xff09;&#xff0c;旨在替代IEEE802.3u MII、IEEE802.3z GMII和TBI。主要目标是将MAC和PHY互连所需的引脚数量从最大28个引脚&#xf…

求正方形阴影部分面积

正方形边长6&#xff0c;求阴影部分面积 xy6① vw6② 1/26v1/23x1/263③ 1/26v1/26y1/266④ ③是左下角三角形的面积&#xff0c;④是左上角三角形的面积。 求解方程组得到x2 阴影部分面积1/2*3x3.

第2章Spring Boot实践,开发社区登录模块【仿牛客网社区论坛项目】

第2章Spring Boot实践&#xff0c;开发社区登录模块【仿牛客网社区论坛项目】 前言推荐项目总结第2章Spring Boot实践&#xff0c;开发社区登录模块1.发送邮件配置MailClient测试 2.开发注册功能访问注册页面提交注册数据激活注册账号 3.会话管理体验cookie体验session 4.生成验…

idea使用gitee基本操作流程

1.首先&#xff0c;每次要写代码前&#xff0c;先切换到自己负责的分支 点击签出。 然后拉取一次远程master分支&#xff0c;保证得到的是最新的代码。 写完代码后&#xff0c;在左侧栏有提交按钮。 点击后&#xff0c;选择更新的文件&#xff0c;输入描述内容&#xff08;必填…

数据结构--链表的基本操作

1. 链表的概念及结构 概念&#xff1a;链表是⼀种物理存储结构上⾮连续、⾮顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表 中的指针链接次序实现的 。 链表也是线性表的一种。 链表的结构跟⽕⻋⻋厢相似&#xff0c;淡季时⻋次的⻋厢会相应减少&#xff0c;旺季时…

Java(四)---方法的使用

文章目录 前言1.方法的概念和使用2.方法的定义3.实参和形参的关系4.方法重载4.1.改进4.2.注意事项 5.递归5.1 生活中的故事5.2 递归的概念 5.3.练习 前言 前面一章我们学习到了程序逻辑语句&#xff0c;在写代码的过程中&#xff0c;我们会遇到需要重复使用的代码块&#xff0…

运维别卷系列 - 云原生监控平台 之 05.prometheus alertManager 实践

文章目录 [toc]Alertmanager 简介Alertmanager 实现的核心概念GroupingInhibitionSilencesClient behaviorHigh Availability Alertmanager 配置文件globaltemplatesrouteinhibit_rulesreceivers Alertmanager 部署创建 cm创建 svc创建 stsPrometheus 配置告警Prometheus 配置文…

React Native 开发心得分享

有一段时间没更新了&#xff0c;花了点时间研究了下 React Native&#xff08;后续用 RN 简称&#xff09;&#xff0c;同时也用该技术作为我的毕设项目(一个校园社交应用&#xff0c;仿小红书)&#xff0c;经过了这段时间的疯狂折腾&#xff0c;对 RN 生态有了一定的了解&…

3.TCP的三次握手和四次挥手

一、前置知识 TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。在传输数据前通信双方必须建立连接&#xff08;所谓连接&#xff0c;是指客户端和服务端各自保存一份关于对方的信息&#xff0c;比如ip地址&#xff0c;端口号等&#xff09;。TCP通过三次握手建立一个…

iOS 创建pch文件

1.参考链接&#xff08;xcode8添加方法&#xff0c;之前的跟这个差不多&#xff09;&#xff1a; 参考链接 2.自我总结&#xff1a; &#xff08;1&#xff09;创建pch文件: 注意点&#xff1a;1&#xff09;注意选中所有的targets&#xff08;看图明义&#xff09; 2&…

风电功率预测 | 基于CNN卷积神经网络的风电功率预测(附matlab完整源码)

风电功率预测 风电功率预测完整代码风电功率预测 基于卷积神经网络(Convolutional Neural Network, CNN)的风电功率预测可以通过以下步骤实现: 数据准备:收集与风电场发电功率相关的数据,包括风速、风向、温度、湿度等气象数据以及风电场的历史功率数据。 数据预处理:对…

ACM8628 2×41W立体声1×82W单通道数字功放中文寄存器表

ACM8628M是一款国产高度集成、高效率的双通道数字输入功放。供电电压范围在4.5V-26.4V,数字接口电源支持3.3V或1.8V。在8欧负载下&#xff0c;输出功率可以到241W&#xff0c;PBTL模式下单通道可以输出182W1% THDN. 器件介绍见 内置DSP多种音频处理效果ACM8628M-241W立体声…

「51媒体」家居生活发布会,展览展会有哪些媒体邀约资源

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 家居生活类媒体包括多种类型&#xff0c;包括门户网站家居生活消费频道&#xff0c;专业的家居消费生活门户&#xff0c;以及行业媒体&#xff0c;平面媒体&#xff0c;KOL和意见领袖。下…

高通Android 11/12/13 通过包名设置默认launcher

背景&#xff1a;最近在封装供第三应用系统SDK 接口&#xff0c;遇到一个无法通过包名设置主launcher代码坑所以记录下。 涉及类roles.xml # <!---~ see com.android.settings.applications.defaultapps.DefaultHomePreferenceController~ see com.android.settings.appl…