云原生之高级Go工程师养成记(一):绪论及Go环境安装

news2025/1/4 16:20:45

文章目录

  • 一、绪论
    • 1.1 本专栏适合学习的群体
    • 1.2 为什么选择 Go
    • 1.3 Go 语言的优势
    • 1.4 杂谈
  • 二、Go 开发环境搭建
    • 2.1 在 Windows 下安装 Go
    • 2.2 在 Linux 下安装 Go
    • 2.3 安装 GoLand
    • 2.4 搭建 GoLand 环境
    • 2.5 第一个 Go 程序 “Hello World”
    • 2.6 补充:VSCode 配置 Go 环境

一、绪论

1.1 本专栏适合学习的群体

想短时间内系统转型 Go 工程师 提高 CRUD 水平,无自研框架经验
拔高技术深度,做专、做精需求的同学 进阶工程化,拥有良好开发规范和管理能力

1.2 为什么选择 Go

Go 语言简单易学 国内头部公司纷纷开始使用 Go (BAT、字节跳动、B站、小米、滴滴、京东、360、七牛云、知乎、美团等)
云原生时代的领导语言 Go 适合高并发和微服务开发 快速增长的职位需求 国内使用热度超过国外

1.3 Go 语言的优势

其它语言的弊端:

  1. 对多核 CPU 缺乏支持。很多语言诞生过早,还停留在单核 CPU 时代,未对多核 CPU 并行做优化;
  2. C语言等原生语言缺乏好的依赖管理(C语言依赖头文件)
  3. Java、C++ 等语言过于笨重。很小一个需求,也需要很多代码,甚至需要引入很重的框架
  4. C、C++没有提供垃圾回收,这对很多程序员来说并不友好

Go 设计者推崇 最小方式 思维,即一件事仅有一种方式,或尽可能少的方式去完成。目的是减少开发人员选择的痛苦,减少理解别人选择的苦恼。Go 语言的优势:

仅有25个关键字,简洁的语法 --- 开发效率高
集各种语言的优势 --- 大量参考c和python
执行性能高 - 直接编译成二进制,部署非常简单
内置并发支持,对多核计算机支持友好。goroutine、channel、select 就是为并发而生的
内置垃圾回收器,大大降低程序员管理内存的负担
去除隐式类型转换、去除指针算数,提高语言健壮性
首字母大小写决定可见性,通过约定而不是声明告诉开发者,提高阅读效率
故意不支持函数默认参数,必须明确每个参数意义,提高设计的清晰度和代码可读性
没有面向对象的类,也没有子类,没有构造函数和析构函数
偏好组合
任何类型都可以拥有方法
接口只是方法的集合,其实现是隐式的(无需implements显示声明)
n--、n++都是语句,不是表达式。没有--n、++n
没有三元运算符
内存总是初始化为零值
没有异常
内置字符串、切片、map等类型
官方提供了丰富的工具链,涵盖了编译、编辑、依赖获取、调试、文档、性能分析等诸多方面

1.4 杂谈

杂谈 ①:Go 语言能够做什么?

Web 开发 - gin、beego 等
容器虑拟化 - docker、k8s、istio
中间件 - etcd、tidb、influxdb、nsg等
区块链 - 以太坊、fabric
微服务 - go-zero、dapr、 rpcx、kratos、dubbo-go、 kitex

杂谈 ②:为什么要从0到1自研框架?

初级开发重视功能,高级开发看重原理
自研是了解细节的最好方法
懂微服务细节,提高架构能力
大公司都在自研,非常看重自研能力
面试很容易问到微服务的细节
自研能更好的适应公司内部的定制化需求

杂谈 ③:学习工程化的重要性!

工程化思维在我们每天写代码中都需要具备
好的工程化思维意味着代码质量
工程化思维决定了我们的编码方式

杂谈 ④:工作中遇到的代码规范问题

写出来的代码没法写测试用例
日志打印很随意
对依赖注入等概念不清楚
代码发布流程随意
代码不规范

杂谈 ⑤:实际工作中这些问题不可避免

不知道如何写代码规范
不知道开发上线的流程规范
不够深入,遇到问题很难解决
缺乏架构思维

二、Go 开发环境搭建

学习 Go 语言之前,必须学会如何搭建 Go 语言的开发环境,不同操作系统有不一样的安装方式。官方下载地址为:https://golang.org/dl/ 由于国内网络限制问题,我们可以在 https://golang.google.cn/dl/ 下载安装包。

2.1 在 Windows 下安装 Go

在浏览器访问 https://golang.google.cn/dl/,单击 Windows 的下载链接,浏览器自动下载 MSI安装包,如下图所示:

双击运行下载好的 MSI安装包 即可启动安装程序,在欢迎界面,直接单击 Next 即可,如下所示:

看到 Go 语言的用户许可协议,直接勾选 I accept the terms in the License Agreement 复选框,然后单击 Next 按钮,如下图所示:

在下一个界面选择 Go 语言的安装路径,默认安装到 C:\Program Files\Go\ 文件夹,我将安装路径改为 D:\develop_tools\go 文件夹,如下图所示:

安装路径设置成功后,下一步直接单击 Next 按钮,再单击 Install 按钮,等待程序完成安装,最后单击 Finish 按钮即可完成整个安装过程,如下图所示:

安装完成后打开 CMD 窗口,在 CMD 窗口下输入 go version 并按回车键即可看到当前Go语言的版本信息,说明我们已完成Go语言开发环境的搭建,如下图所示:
在这里插入图片描述
ps: 大多数情况下,使用 MSI安装包 搭建Go语言开发环境无须设置系统的环境变量。如果在 CMD 窗口下查看Go语言的指令信息出现异常,则说明Go语言还没有添加到系统的环境变量,此时需要手动添加。为了后续维护的方便,我这里统一设置一下Go的环境变量(这是在后续文章写完之后进行的补充,建议大家按照操作更改一下,否则在使用VsCode配置Go环境的时候会出现莫名错误)

  1. 首先,右键此电脑 → 属性 → 高级系统设置 → 环境变量
  2. 新建系统变量,按下图所示填写后点击确定:
    在这里插入图片描述
  3. 然后可以找一个位置做为 GOPATH 的目录,这里我选择在 E 盘新建一个名为 go 的目录,然后新建系统变量:
    在这里插入图片描述
  4. 把用户变量里的 GOPATH 也换成自定义的目录:
    在这里插入图片描述
  5. 编辑用户变量里的 Path:这里原本是 %USERPROFILE%\go\bin 改为 %GOPATH%\bin
  6. 在 GOPATH 对应的目录下 (我的是 E:\go) 新建三个文件夹:bin,pkg,src,如下图所示:
    在这里插入图片描述
  7. 最后可以去看一下系统变量里的 Path (点击 Path 然后编辑),一般的话可以看到 Go 的路径已经配置好了,我们不需要动,这是 Go 在安装时自动配置的。之前用 go version 查看版本号也是因为这里的环境变量,如果以后出现命令未找到等问题,可以回到这里检查。
    在这里插入图片描述
  8. 配置环境完变量后,记得点击 「确定」 再退出。最后,Win + R,输入 cmd 打开命令行,输入 go env 可以检查一下,主要是看一下红框里的两个,应该是和我们前面设置的一致:
    在这里插入图片描述

2.2 在 Linux 下安装 Go

目前主流的 Linux 操作系统有 Debian,Ubuntu,RedHat,CentOS,Fedora 等,不同操作系统在使用上存在一定差异,但从整体来看都是大同小异。本小节以64位的 CentOS7 操作系统为例,讲述如何搭建Go语言的开发环境。

从 Windows/MacOS 将下载好的 go1.21.1.linux-amd64.tar.gz 安装包到 /data/soft/ 目录下,如下图所示:

ps: 也可以直接使用命令 wget 进行下载,如下图所示:
在这里插入图片描述
解压:[root@amoxiang soft]# tar -zxvf go1.21.1.linux-amd64.tar.gz
解压成功后,cd go,输入 bin/go version 并按回车键,系统将会显示Go语言的版本信息,如下图所示:
在这里插入图片描述
配置环境变量:[root@amoxiang go]# vim /etc/profile,在文件末尾添加如下内容:

export GOROOT=/data/soft/go  # 设置Go语言的安装路径
# 第三方依赖包安装路径 以前放自己开发的代码,目前不要这样放了
export GOPATH=/data/soft/golang  # 设置开发中的项目工程路径,它指向/data/soft/golang文件夹,该文件夹需要自行创建
export PATH=.:$PATH:$GOROOT/bin # 将Go语言安装路径的bin文件夹添加到系统环境变量

环境变量立刻生效:source /etc/profile。系统环境变量添加成功后,在 CentOS7 命令行的任意路径下输入 go version 指令就能看到Go语言的版本信息,如下图所示:
在这里插入图片描述

2.3 安装 GoLand

环境变量补充:运行命令 go env 查看 Go 的环境变量。

# go早期版本管理依赖包方式使用GOPATH和vendor文件夹
# 从1.11引入Go Module,1.16版本开始GO111MODULE默认为on,会根据go.mod管理和下载依赖
set GO111MODULE=
# GOPROXY 1.13开始支持。国外站点经常失败,建议改为国内镜像站地址
# direct 表示从镜像下载失败后,直接从原版本库地址下载 off 表示不允许从任何源下载
# GOPROXY=https://mirrors.aliyun.com/goproxy/,direct
# GOPROXY=https://repo.huaweicloud.com/repository/goproxy/ 
set GOPROXY=https://proxy.golang.org,direct # 一定要配置,不然后面安装包经常下载包很困难
# 设置命令如下: 
# GO111MODULE=auto: 分别从GOPATH、vendor文件夹或go.mod寻找包。
C:\Users\Administrator>go env -w GO111MODULE=auto  # 为了更好地兼容新旧版本问题
C:\Users\Administrator>go env -w GOPROXY=https://goproxy.cn,direct

Go 语言的开发环境搭建成功后,下一步安装集成开发环境(Integrated Development Environment, IDE)。集成开发环境是提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具,它是集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件。常用的 IDE 软件有 GoLand,VS Code,Vim GO,Sublime Text,LiteIDE,Eclipse,Atom 等。本小节以 GoLand 为例,讲述如何使用 GoLand 搭建 Go 语言的开发环境。

GoLandJetBrains 公司推出的 Go 语言集成开发环境,同样基于 IntelliJ 平台开发,支持 JetBrains 的插件体系。在浏览器打开 https://www.jetbrains.com/go/download 并下载 GoLand,如下图所示:
在这里插入图片描述
GoLand 分别支持 Windows,Linux,macOS 三大系统的使用,选择下载 Windows 安装包并双击运行,根据安装提示完成安装过程即可,安装过程较为傻瓜式,本小节就不再详细讲述了。安装成功后,在桌面双击 GoLand 图标,刚开始提示软件配置,选择默认配置即可进入软件激活界面,激活方式有3种:Jetbrains 用户激活、激活码和许可服务器,如下图所示:

不同版本的 GoLand 有不同的免费激活方式,由于软件版本迭代更新较快,导致每个版本的激活方式各不相同,有需要的读者可以从网上查找最新的激活教程。

2.4 搭建 GoLand 环境

GoLand 激活成功后,再次打开 GoLand,在 Welcome to GoLand 界面单击 Configure,找到并单击 Settings,从而进入 Settings 界面,如下图所示:

Settings 界面打开 Go→GOROOT 选项,然后选择已安装的 Go 语言编译器,如下图所示:
在这里插入图片描述
下一步单击 GOPATH,在该界面看到 Global GOPATHProject GOPATH 配置,如下图所示:

Global GOPATHProject GOPATH 的配置说明如下:

  1. Global GOPATH:代表全局 GOPATH,一般来源于系统环境变量中的 GOPATH,所有 Go 语言项目都能使用该路径,它与 Go 语言的环境变量 GOPATH 相同。
  2. Project GOPATH:代表项目所使用的 GOPATH,仅适用于当前项目。

安装 Go 语言开发环境已设置了环境变量 GOPATH (即 Global GOPATH),我们只需在 Project GOPATH 下配置即可 (此处可以忽略)。在 E:\Code\Spider2023\ 文件夹下创建 go_demo 文件夹,然后在 Project GOPATH 下添加文件夹的路径信息,如下图所示:
在这里插入图片描述

2.5 第一个 Go 程序 “Hello World”

使用 GoLand 创建新项目 E:\Code\Spider2023\learn-go,如下图所示:
在这里插入图片描述
在这里插入图片描述
在该文件夹下创建 hello.go 文件并编写 Go 语言代码,代码如下:

// ① package main 代表程序或项目运行的主入口文件,如果改为package aa,则设为程序或项目的包
package main

import "fmt" // ② import "fmt"代表导入内置包fmt,主要实现数据的标准化输出

func main() { // ③ func main(){}代表程序运行的主入口
	fmt.Println("Hello World")
}

GoLand 中运行 hello.go 的代码,运行结果可以在 Run 窗口下查看,如下图所示:
在这里插入图片描述

2.6 补充:VSCode 配置 Go 环境

① Go 插件:
在这里插入图片描述
② gopls: gopls(发音Go please) 是官方提供的模块,实现语言服务器协议 LSP 的 Language Server,具有构建、格式化、自动完成等功能。LSP 是由微软开发的开发标准,它为便捷器提供对语言特性的支持。当你使用模块和 VSCode 时,在编辑器中点击保存将不再直接运行 go build 命令。现在发生的情况是,一个请求被发送给 gopls,gopls 运行适当的 Go 命令和相关的 API 来提供编辑器反馈和支持。参考 https://github.com/golang/tools/blob/master/gopls/README.md 可以手动安装,也可以在 VSCode 中编辑第一个 xxx.go 文件触发安装,我这里是直接打开刚刚 GoLand 创建的新项目 E:\Code\Spider2023\learn-go 触发安装。
在这里插入图片描述
安装成功之后如下图所示:

命令行中运行:

PS E:\Code\Spider2023\learn-go> go run .\hello.go
Hello World
PS E:\Code\Spider2023\learn-go> 

这个 VSCode 插件安装后,可以方便的阅读 Go 代码,尤其是源代码中有大量函数、结构体、接口时,如下图所示:
在这里插入图片描述
也可以安装 Golang postfix 这样的工具,提高编码效率,如下图所示:
在这里插入图片描述
至此今天的学习就到此结束了,笔者在这里声明,笔者写文章只是为了学习交流,以及让更多学习Go语言的读者少走一些弯路,节省时间,并不用做其他用途,如有侵权,联系博主删除即可。感谢您阅读本篇博文,希望本文能成为您编程路上的领航者。祝您阅读愉快!


在这里插入图片描述

    好书不厌读百回,熟读课思子自知。而我想要成为全场最靓的仔,就必须坚持通过学习来获取更多知识,用知识改变命运,用博客见证成长,用行动证明我在努力。
    如果我的博客对你有帮助、如果你喜欢我的博客内容,请 点赞评论收藏 一键三连哦!听说点赞的人运气不会太差,每一天都会元气满满呦!如果实在要白嫖的话,那祝你开心每一天,欢迎常来我博客看看。
 编码不易,大家的支持就是我坚持下去的动力。点赞后不要忘了 关注 我哦!

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

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

相关文章

dynamic-datasource + parallelStream数据源切换失效

记录一次使用动态数据源java8的ParallelStream并行流导致的数据源切换失效问题,先看一下异常记录: 代码如下: Service DS(DataSourceConst.ORDER) public class OrderService {Resourceprivate VendorService vendorService;public void get…

生态兼容性进一步提升!白鲸开源 WhaleStudio 与火山引擎ByteHouse完成产品互认

数据作为新型生产要素,已快速融入生产、分配、流通、消费和社会服务管理等各环节,深刻改变着生产方式、生活方式和治理方式。越来越多企业也在尝试充分利用数据要素,开辟全新发展路径,进一步实现业务价值提升。 在数字化转型的大…

《C++ Core Guidelines解析》深入理解C++

前言 在计算机编程领域,C一直以其高效、灵活和强大而闻名。然而,C作为一种复杂的编程语言,如果没有正确的理解和使用,很容易导致软件质量的下降和性能问题的出现。幸运的是,一本名为《CCore Guidelines解析》的书籍为…

【RocketMQ】(九)主从同步实现原理

RocketMQ支持集群部署来保证高可用。它基于主从模式,将节点分为Master、Slave两个角色,集群中可以有多个Master节点,一个Master节点可以有多个Slave节点。Master节点负责接收生产者发送的写入请求,将消息写入CommitLog文件&#x…

【数据结构】顺序栈及其基本操作

顺序栈 栈的数组实现(创建) 栈的初始化栈的增加(压栈)栈的删除(弹栈)栈的查询栈的判空和判满 1. 顺序栈 栈是一种数据结构,其主要特点是后进先出,相当于我们在瓶子里面放东西&am…

golang工程——protobuf使用及原理

相关文档 源码:https://github.com/grpc/grpc-go 官方文档:https://www.grpc.io/docs/what-is-grpc/introduction/ protobuf编译器源码:https://github.com/protocolbuffers/protobuf proto3文档:https://protobuf.dev/programmin…

【信创】麒麟v10(arm)-mysql8-mongo-redis-oceanbase

Win10/Win11 借助qume模拟器安装arm64麒麟v10 前言 近两年的国产化进程一直在推进,基于arm架构的国产系统也在积极发展,这里记录一下基于麒麟v10arm版安装常见数据库的方案。 麒麟软件介绍: 银河麒麟高级服务器操作系统V10 - 国产操作系统、银河麒麟、中…

Tomcat(HTTP服务器)下载以及认识

Tomcat是java程序员写网页后端所用到的一个经典工具 一. 搜索Tomcat找到官网,在Download下找到Tomcat8(虽然已经有了更新的版本,但经典版的更稳定) 二. 找到Core,点击zip便能下载Tomcat的压缩包(完全绿色&…

使用API Monitor工具巧妙探测C++程序中监听某端口的模块

目录 1、问题说明 2、API Monitor工具介绍 2.1、API Monitor主要用途 2.2、如何使用API Monitor工具 3、使用API Monitor监测程序对bind函数的调用,定位启用2620端口的模块 3.1、为啥要监控socket API函数bind 3.2、编写演示代码进行说明 3.3、使用API Moni…

COTS即Commercial Off-The-Shelf 翻译为“商用现成品或技术”或者“商用货架产品”

COTS 使用“不再做修理或改进”的模式出售的商务产品 COTS即Commercial Off-The-Shelf 翻译为“商用现成品或技术”或者“商用货架产品”,指可以采购到的具有开放式标准定义的接口的软件或硬件产品,可以节省成本和时间。 中文名 商用现成品或技术 外文…

垂直行业大模型“封神”背后,AI数据服务走入“深水区”

图源:Unsplash 文 | 智能相对论 作者 | 沈浪 由ChatGPT掀起的这股大模型浪潮,从通用领域席卷垂直领域。现阶段,越来越多的行业都在开发专用垂直细分赛道的大模型产品,以加速AI应用的场景化落地进程。 譬如,在电商领…

MASA MAUI iOS 文件下载与断点续传

文章目录 背景介绍方案及代码1、新建MAUI项目2、建立NSUrlSession会话连接3、使用NSUrlSessionDownloadTask 创建下载任务4、DidWriteData 监听下载5、DidFinishDownloading 完成下载6、CancelDownload (取消/暂停)下载7、ResumeDownload 恢复下载8、杀死进程-恢复下载 效果图总…

界面组件DevExpress WPF v23.2新功能预览 - 更轻量级的主题

本文主要描述了DevExpress WPF即将在几个月之后发布的v23.2中包含的新功能,持续关注我们获取更多最新资讯哦~ P.S:DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强…

手把手带你完成安卓登录修改的案例

新建一个空的项目 到这里我们的项目就搭建完成了,接下来就来编写app的页面 提前准备 1.新建一个 登录 的java和xml文件 2.同样的步骤新建一个忘记登录的页面 3.创建一个工具类,这个工具来主要是用来隐藏软键盘的 import android.app.Activity; import an…

【斯坦福cs324w】中译版 大模型学习笔记十 环境影响

环境影响 温室气体排放水足迹:数据中心使用水进行冷却;发电需要用水释放到环境中的化学物质很多是对人类有害的 如何计算数据中心能源消耗 简单表示形式 模型训练过程 参考资料 datawhale so-large-lm学习资料

AWS-Lambda之导入自定义包-pip包

参考文档: https://repost.aws/zh-Hans/knowledge-center/lambda-import-module-error-python https://blog.csdn.net/fxtxz2/article/details/112035627 单来说,以 " alibabacloud_dyvmsapi20170525 " 包为例 mkdir /tmp cd ./tmp mkdir python pip ins…

idea开发Springboot出租车管理系统VS开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot 出租车管理系统是一套完善的完整信息系统,结合springboot框架和bootstrap完成本系统,对理解JSP java编程开发语言有帮助系统采用springboot框架(MVC模式开发), 系统具有完整的源代码和数据…

Mysql基础【操作表中数据入门查询】

一、DML🍓 DML主要是对数据进行增(insert)删(delete)改(update)操作。 (一)、添加数据🥝 语法格式: insert into 表名 (字段名1,字段名2...&a…

2024年【MCM/ICM】美国大学生数学建模竞赛优秀论文(免费下载)

一、前言 美国大学生数学建模竞赛(MCM/ICM)由美国数学及其应用联合会主办,是最高的国际性数学建模竞赛,也是世界范围内最具影响力的数学建模竞赛,一般也指数学建模竞赛。赛题内容涉及经济、管理、环境、资源、生态、医…

APP开发费用估算方法

估算APP开发费用是一个重要的项目管理步骤,它有助于确定项目的总成本,并帮助您在项目规划阶段做出决策。APP开发费用估算的方法可以根据项目的规模、复杂性、功能和技术选择而异,以下是一些常见的APP开发费用估算方法,希望对大家有…