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

news2024/12/21 15:43:39

欢迎来到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文件,执行之后出现结果:

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

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

相关文章

mysql,sqlserver数据库查询表,获得表结构,结构类型说明,获得这些数据,可以拿去创建表

mysql,sqlserver数据库查询表,获得表结构,结构类型说明,获得这些数据,可以拿去创建表 //表名p_order select * from information_schema.COLUMNS where TABLE_NAMEp_order;1、TABLE_CATALOG ,nvarchar(128…

C++ | Leetcode C++题解之第89题格雷编码

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> grayCode(int n) {vector<int> ret(1 << n);for (int i 0; i < ret.size(); i) {ret[i] (i >> 1) ^ i;}return ret;} };

47 tcp网络程序

网路聊天 API详解 下面用到的API&#xff0c;都在sys/socket.h中 socket (): socket() 打开一个网络通讯端口&#xff0c;如果成功的话&#xff0c;就像open() 一样返回一个文件描述符应用程序可以像读文件一样用read/write在网络上收发数据如果调用出错返回-1对于IPv4&am…

读人工智能时代与人类未来笔记03_演变

1. 演变 1.1. 每个社会都找到了属于自己的一套适应世界的方法 1.1.1. 适应的核心&#xff0c;是有关人类心智与现实之间关系的概念 1.1.2. 人类认识周围环境的能力 1.1.2.1. 这种能力通过知识获得&#xff0c;同时也受到知识…

研发管理-选择研发管理系统-研发管理系统哪个好

选择研发管理系统-研发管理系统哪个好 选择研发管理系统时&#xff0c;并没有一个绝对的“最好”的系统&#xff0c;因为每个企业的需求和情况都是独特的。然而&#xff0c;我可以向您介绍一些在市场上广受欢迎且功能强大的研发管理系统&#xff0c;供您参考&#xff1a; 1、彩…

OpenAI 推出 GPT-4o:实现多模态 AI 交互

一、前言 OpenAI 推出了其最新的 AI 模型——GPT-4o&#xff0c;此次发布的并非 GPT-4.5 或 GPT-5&#xff0c;而是一款全新的“全模态模型(Omnimodel)”。这是一个将文本、语音和视觉能力集成到单一无缝 AI 体验中的突破性发展。 GPT-4o 于 2024 年 5 月 14 日发布&#xff0…

生产消费者模型-环形队列与信号量

文章目录 前言一、怎样的环形队列&#xff1f;二、什么是信号量三、使用步骤信号量的接口函数1. sem_init2.sem_destroy3.sem_wait4.sem_post 环形队列的设计测试用例 前言 之前我们使用互斥锁和条件变量实现过一个生产者消费者模型&#xff0c;那么那个生产消费者模型具有一个…

Github20K星开源团队协作工具:Zulip

Zulip&#xff1a;让团队协作的每一次交流&#xff0c;都精准高效。- 精选真开源&#xff0c;释放新价值。 概览 随着远程工作的兴起和团队协作的需求不断增加&#xff0c;群组聊天软件成为了日常工作中不可或缺的一部分。Zulip 是github上一个开源的团队协作工具&#xff0c;…

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

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

谷歌Gemini时代来了!加固搜索护城河、赋能全家桶,Gemini 1.5 Pro升级至200万token

3 月中旬&#xff0c;谷歌宣布 Google I/O 定档北京时间 5 月 15 日凌晨 1 点。而当大会开幕时间临近&#xff0c;本应是讨论度最高的时候&#xff0c;「宿敌」OpenAI 却半路杀出&#xff0c;抢先一天&#xff0c;仅耗时 27 分钟就发布了颠覆性巨作 GPT-4o&#xff0c;将新一轮…

HTTP代理可以应用在那些领域呢

HTTP代理是IP代理领域中一个重要组成部分&#xff0c;它基于HTTP协议传输&#xff0c;使用海外服务器帮助用户绕开访问限制&#xff0c;浏览查看海外资讯信息。 HTTP代理可以应用在哪些领域呢&#xff1f; 1.保护使用者隐私 当今越来越数据被上传到网络云端上&#xff0c;用户…

Gone框架介绍17 - 创建一个可运行在生产环境的Web项目

gone是可以高效开发Web服务的Golang依赖注入框架 github地址&#xff1a;https://github.com/gone-io/gone 文档原地址&#xff1a;https://goner.fun/zh/guide/auto-gen-priest.html 请帮忙在github上点个 ⭐️吧&#xff0c;这对我很重要 &#xff1b;万分感谢&#xff01;&a…

【爬虫之scrapy框架——尚硅谷(学习笔记two)--爬取电影天堂(基本步骤)】

爬虫之scrapy框架--爬取电影天堂——解释多页爬取函数编写逻辑 &#xff08;1&#xff09;爬虫文件创建&#xff08;2&#xff09;检查网址是否正确&#xff08;3&#xff09;检查反爬&#xff08;3.1&#xff09; 简写输出语句&#xff0c;检查是否反爬&#xff08;3.2&#x…

Nginx生产环境最佳实践之配置灰度环境

你好呀&#xff0c;我是赵兴晨&#xff0c;文科程序员。 下面的内容可以说是干货满满建议先收藏再慢慢细品。 今天&#xff0c;我想与大家深入探讨一个我们日常工作中不可或缺的话题——灰度环境。你是否在工作中使用过灰度环境&#xff1f;如果是&#xff0c;你的使用体验如…

flutter开发实战-compute将工作交由isolate处理

flutter开发实战-compute将工作交由isolate处理 最近查看flutter文档时候&#xff0c;看到了compute可以将工作交由isolate处理。通过 Flutter 提供的 compute() 方法将解析和转换的工作移交到一个后台 isolate 中。这个 compute() 函数可以在后台 isolate 中运行复杂的函数并…

Leetcode 第 129 场双周赛题解

Leetcode 第 129 场双周赛题解 Leetcode 第 129 场双周赛题解题目1&#xff1a;3127. 构造相同颜色的正方形思路代码复杂度分析 题目2&#xff1a;3128. 直角三角形思路代码复杂度分析 题目3&#xff1a;3129. 找出所有稳定的二进制数组 I思路代码复杂度分析 题目4&#xff1a;…

JavaScript异步编程——11-异常处理方案【万字长文,感谢支持】

异常处理方案 在JS开发中&#xff0c;处理异常包括两步&#xff1a;先抛出异常&#xff0c;然后捕获异常。 为什么要做异常处理 异常处理非常重要&#xff0c;至少有以下几个原因&#xff1a; 防止程序报错甚至停止运行&#xff1a;当代码执行过程中发生错误或异常时&#x…

数字人解决方案——ID-Animator可保持角色一致生成视频动画

一、引 言 个性化或自定义生成在图像和视频生成领域是一个不断发展的研究方向&#xff0c;尤其是在创建与特定身份或风格一致的内容方面。您提到的挑战和解决方案为这一领域提供了有价值的见解&#xff1a; 训练成本高&#xff1a;这是一个普遍问题&#xff0c;因为个性化生成…

手机触控面板中应用的电容式触摸芯片

手机触控屏&#xff08;Touch panel&#xff09;又称为触控面板&#xff0c;是个可接收触头等输入讯号的感应式液晶显示装置&#xff0c;当接触了屏幕上的图形按钮时&#xff0c;屏幕上的触觉反馈系统可根据预先编程的程式驱动各种连结装置&#xff0c;可用以取代机械式的按钮面…

【AI】DeepStream(03):deepstream_test1_app

1、简介 deepstream-test1:演示各种 DeepStream 插件构建 GStreamer 管道。从文件中获取视频、解码、批处理,然后进行对象检测,最后在屏幕上渲染框。 源码路径:/opt/nvidia/deepstream/deepstream/sources/apps/sample_apps/deepstream-test1 先看下效果 2、编译 1)…