go快速开发入门指南(一)

news2024/11/28 3:44:37

Go快速开发指南

💡 由于工作和未来大数据发展需要,需要对Go语言进行一定学习与使用,特此记录。本系列不会说太多文字概念,重在业务实践和相关开发技巧的总结,和错误的排查记录。因此,如有片面或不足之处,请多海涵且欢迎指正!

一、Go的简简简简单介绍

1.1 Go语言_为并发而生

go语言(全称 Golang)是一个Google开发且 开源 编程语言,诞生于2006年,于2009年11月开源,2012年发布稳定版。

主要特征及优点:

  • 自带gc,资源对象自动立即回收。
  • 静态编译,编译好后生成exe,扔服务器直接运行。
  • 语法层支持并发,支持匿名函数和闭包。
  • 简单的思想,没有继承,多态,类等概念,支持函数多返回值。
  • 简洁的语法,提高开发效率,同时提高代码可维护性。
  • 简单的交叉编译,仅需更改环境变量。

总之,感觉就是 Go语言简单易学!!!

1.2 Go的并发特性

Go语言在多核并发上拥有原生的设计优势,因为Go语言从底层设计时就原生支持并发,无须引入第三方库、无需深厚的开发者的编程技巧和开发经验,就可以实现高性能的开发需求。

Go语言的并发是基于 goroutine 的。
goroutine 类似于线程,但又并非线程。可以将 goroutine 理解为一种虚拟线程。【Go 语言运行时会参与调度 goroutine,并将 goroutine 合理地分配到每个 CPU 中,最大限度地使用CPU性能。开启一个goroutine的消耗非常小(大约2KB的内存),你可以轻松创建数百万个goroutine】

1.3 Go与其他语言

Go,主要目标是“兼具Python 等动态语言的开发速度和C/C++等编译型语言的性能与安全性”。

借鉴一张语言开发效率图,如下所示:
语言开发效率图
可以看出,Go 语言的风格类似于C语言,但进行了大幅的简化,使得Go实现了开发效率与执行效率的完美结合,让你像 “ 写Python代码(效率)一样的方式实现C代码(性能)”。

总之,目前很多大互联网公司,热衷使用 Go 语言来改造旧系统,经过 Go 重构的系统往往可以使用更少的硬件资源,却获得更高的并发和I/O吞吐表现。

二、安装Go语言

GO的安装,跟版本有一定的关系,这里单独介绍,是因为不少博文还是旧的方式导致很多新手小伙伴懵圈。。。。

2.1 Go不同版下载

安装包下载地址:https://go.dev/dl/ 或者 https://golang.google.cn/dl/ 。

Windows 下可以使用 .msi 后缀 或者.zip后缀的安装包来安装。
go安装包

根据格式不同,

  • 下载zip的就解压,存放到某盘路径(需手动配置环境变量)。
  • 下载msi的就点击安装(自动配置环境变量),一步步继续即可。

不过呢,.msi文件默认会安装在 c:\Go 目录下,.zip则是一开始就自定义目录。(我这里下载的是.zip安装包)。

具体安装过程这里就跳过了,当go安装后的源文件目录结构有很多。
在这里插入图片描述

2.2 不同Go版的配置

【好吧,这里顺带提一嘴,关于go环境变量的配置,看到很多博文没有特意说清楚,两个常见的东西 GoPATH 和 GOROOT,导致很多刚入门的小伙伴懵了逼。】

安装完go以后,需要对go进行一定的配置,此时,需要根据不同的go版本做不同的配置。(根据你自己的版本选看~)

2.2.1 Go 版本:1.11之前

使用go path模式管理项目环境依赖。

这个版本的go,安装后,需要配置系统变量GOPATH,再任意路径下新建一个项目文件夹,再建bin、pkg、src三个目录。

(比如你下载的是go 1.11之前版本,且是zip安装包进行安装的,还需要配置环境变量GOPATH,.msi的自动配置了)。

1.配置GOPATH

GOPATH 是用来指向你以后的go项目的存放路径,你可以自定义任意盘符。

依次打开我的电脑->属性->高级系统设置。
在这里插入图片描述
(通常GOPATH路径最好只设置一个,以后的项目代码都放到GOPATH的src目录下)。

同时在path里面添加go的安装目录和刚配置的 GOPATH 目录。
在这里插入图片描述

2.新建工作空间

在刚刚自定义的Go项目路径下,手动创建几个文件夹(注意:不是在安装GO的那个文件夹下)。
在这里插入图片描述
这三个文件夹,具体用处是:

  • bin:存放编译后可执行的文件。
  • pkg:存放编译后的应用包。
  • src:存放应用源代码。

你会发现go的源文件目录下也同样自带了这三个文件。

为什么要这么做呢?

这是因为,在早期版本的GO语言中,一个Go工程中主要包含这三个目录。

在进行Go语言开发时,源代码会保存在$GOPATH/src目录下,
而产生的二进制可执行文件放在 $GOPATH/bin 目录下,
而生成的中间缓存文件会被保存在 $GOPATH/pkg 目录下。

当然,这是旧版的方式!!!现在都用 go mod 模式了!不需要在建立这种目录结构。

2.2.2 Go 版本:1.12之后

这个版本后,不再使用go path模式,而是开始使用go mod模式来管理依赖环境。

1.配置goproxy

国内访问不到默认的GOPROXY配置链接,所以我们需要换一个PROXY,大多数使用 https://goproxy.io 或 https://goproxy.cn。

终端中输入设置命令即可:

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

2.设置Go mod

要启用go module支持,首先要设置环境变量GO111MODULE,通过它可以开启或关闭模块支持,它有三个可选值:off、on、auto,默认值是auto。

  • off:表示禁用模块支持,编译时会从GOPATH和vendor文件夹中查找包。
  • on:表示启用模块支持,编译时会忽略GOPATH和vendor文件夹,只根据 go.mod下载依赖。
  • auto:表示当项目在$GOPATH/src外且项目根目录有go.mod文件时,开启模块支持。

通过如下命令查看当前位于什么模式?

> go env

set GO111MODULE=off
set GOMODCACHE=D:\zoutao_code\go_project\pkg\mod
set GOOS=windows
set GOPATH=D:\zoutao_code\go_project
set GOPROXY=https://proxy.golang.com.cn,direct
set GOROOT=D:\zoutao_job\go1.20.2

通过以下命令修改:

go env -w GO111MODULE=on

以此,开启go mod模式。

建议使用go之前,应明确设置该配置项值为 off 或者 on,使用auto会随着版本不同,效果不同,不推荐使用。

题外话,当使用go module模式新建项目时,我们往往需要通过命令:

go mod init 项目名

来对项目进行初始化,该命令会在项目根目录下 生成一个go.mod文件
(比如,我们使用hello作为我们第一个Go项目的名称,执行命令:go mod init hello)

运行之前还可以使用 go mod tidy 命令将所需依赖添加到go.mod文件中,并且能去掉项目中不需要的依赖了。

2.3 配置后测试

不管你是什么Go版本,相信经过上诉的安装后,你的机器上已经有了一个go环境了。

1.检查版本环境。

此时,任意位置打开一个cmd窗口,使用命令 go version ,应输出版本信息。
在这里插入图片描述
可见,本次案例中,我当前使用的是Go 版本:1.20.2。

2.创建go项目测试

任意盘符创建一个工作目录go_demo,其中再创建一个文件名: test.go,内容如下:

package main

import "fmt"

func main() {
    fmt.Println("Hello, World!-zou")
}

如图:

在这里插入图片描述

然后就可以使用go命令执行了:

E:\go_demo> go run test.go
Hello, World!-zou

自此,go环境与go单体项目测试完毕 ~~~

三、Go的两种模式

上面我们提及了安装不同配置,实际上,两种模式会影响Go项目中代码组织 。

很多文章乃至以后的go开发中,可能会在go代码中,import某些本项目下的模块对象,但启动go项目时,会提示错误如下:

在这里插入图片描述
可以看到,存在两条查找记录,一个来自于from $GOROOT,一个是from $GOPATH。

使用命令,查看go的环境变量,可以看到几个关键概念。

> go env

set GO111MODULE=off
set GOMODCACHE=D:\zoutao_code\go_project\pkg\mod
set GOOS=windows
set GOPATH=D:\zoutao_code\go_project
set GOPROXY=https://proxy.golang.com.cn,direct
set GOROOT=D:\zoutao_job\go1.20.2

简单解释:

  • GOPATH:指向的是我们当前go项目的工作目录。我们把它配置成了一个环境变量。(早期是建议只设置一个GOPATH路径,所有的项目代码都放到其src目录下,现在不用,你往下看)。

  • GOROOT:指向的是我们的go语言安装路径。

所以,通常不必设置 $GOROOT,安装go时自动生成,然后就是你可以根据需要,来决定设不设置GOPATH。

那么为什么会存在两条查找记录呢???——项目使用了GO PATH模式。

3.1 go项目模式对比

我们说上面出现两的地方的依赖查找记录,是因为开启了go path模式。

GOPATH 模式

是通过配置环境变量 GO111MODULE=off 来强制开启的。【Go1.11后废弃】

其中特性:

  • 不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。
  • GOPATH 默认为本地电脑的go的安装目录。
  • 使用go get下载的包是存放在$GOPATH/src目录中。
  • 利用GOPATH,可以实现依赖包存放在一个目录, 自己项目的包存放在另外一个目录
  • 没有模块相关的概念。
  • 使用GOPATH 时,Go会在以下为目录中搜索包:GOROOT/src(是Go标准库),GOPATH/src(是应用自身代码和第三方依赖的代码)

【所以上面的报错信息中,出现两行查找。】

GOMOD 模式

是通过配置环境变量 GO111MODULE=on 来强制开启的。【官方推荐】

其中特性:

  • 新版中,Go使用GOMODULE来管理程序文件。
  • 在使用模块的时候,GOPATH 是无意义的。
  • 模块路径需要在模块目录下的 go.mod 文件中使用module指令指定。
  • go命令行会使用modules,而一点也不会去GOPATH目录下查找。
  • 使用go get下载的包存放在$GOPATH/pkg/mod下的相关目录中。
  • 有模块相关的概念及配置, 比如: GOPROXY, GOPRIVATE, GOSUMDB等。
  • 新版Modules和传统的GOPATH管理不同,不再需要创建包含例如src,bin这样的子目录,一个源代码目录甚至是空目录都可以,只要其中有go.mod文件

所以,我们可以使用命令 go env 查看环境。

  • 如果要用 go path 模式,则代码中import 引入包,需从src目录下开始引入,且要关闭 关闭 go mod 模式。

  • 如果使用 go mod 模式,需在目录下执行 go mod init,目录下产生两个文件go.mod 和 go.sum,否则就会报 "xxxx is not in GOROOT " 的错误。

3.2 包(package)和模块(module)

在go的项目中,你可能会接触到这两个概念。

  • 包(package) ,是用来管理 .go 文件的, 有包目录, 包名, 包路径/包导入路径/导入路径等,它是源代码的集合。

  • 模块(module) ,是用来管理包的, 有模块目录, 模块路径等,它是包的集合, 一个目录最多只能有一个模块, 一个模块目录里必须要有go.mod文件。

总结: go mod 模式中只保留了部分的 vendor 特性支持,建议日常开发中使用,可用作依赖存档或 CI/CD 使用。
而go path 模式基本废弃,不建议再使用,如果有老项目仍在使用,建议迁移到 go mod 模式。

四、Go的开发工具

go语言叫Golang,go的一款编辑器叫GoLand。(作为一个附加章节,提前说一下。)

4.1 GoLand 编辑器

直接搜索安装,收费的,破解就是。

GoLand 是 JetBrains 公司推出的 Go 语言集成开发环境编辑器(跟IDEA类似),与 WebStorm、PhpStorm、PyCharm 是一家,同样支持 Windows、Linux、macOS 等操作系统。

下载地址:https://www.jetbrains.com/go/

● Go语言:https://golang.org/
● Go语言中文网:https://studygolang.com/
● Go语言包管理:https://gopm.io/

4.2 VsCode Go插件

使用vs-code编辑器也可以,前端小伙伴直接使用vs-code装go插件好了。

vsCode Go插件它是通过一系列go的小工具来完成ide的相关功能,比如智能提示,括号匹配,代码段之类的语言功能。

安装go插件

安装步骤:

  • 先从vscode的扩展管理中安装Go插件,直接搜索go。
  • 然后安装Go插件所依赖的go tools工具。这个需要编辑器里按ctrl+shift+p 调出命令面板,输入go install tools 选Go: Install/Update Tools。

不出意外,安装go tools这个阶段可能会失败,原因是有墙。

3个解决方法。

  • ● 方法1:开国外vpn或代理,让它安装成功,速度不好说。
  • ● 方法2:设置go proxy 国内代理源。
  • ●方法3:下载别人打包好的tool工具包,解压到自己的go安装bin路径去。

我选用了方法2。

> go env -w GOPROXY=https://goproxy.cn 或 https://goproxy.io/zh/
> go clean --modcache

然后在下载tool工具即可。

4.3 IDEA Go插件

后来用不惯vscode,又不想再安装一个goland,于是用IDEA尝试安装GO插件来开发go的项目。

具体步骤:

1.idea安装go插件

打开IDEA,依次 File-》settings-》Plugins-》搜索go,然后install,重启。然后二次点开 File->settings,在 Languages&Frameworks 中可看到Go的选项了。

在这里插入图片描述

2.idea配置go环境

有很多博客说,要配置GOROOT和GOPATH,这里严重说明,新版go采用go mod 管理,不能与go path模式共存,根本不需要配置GOPATH,只需要配置一个GOROOT即可。

否则你会发现,你的项目启动时会提示$GOPATH/go.mod exists but should not错误。

在这里插入图片描述

最终,以后你不管是新建go项目,还是导入打开一个go项目,只需要确保如下:project gopath,和下面的module gopath 两栏都是空的即可。

在这里插入图片描述

4.4 IDEA调试GO失效

使用idea对go项目,点run运行没有问题,当点debug调试时,会发现无法正常进入断点,总跳到一些莫名的底层文件里去或报错 Version of Delve is too old 。

检查Delve版本

若Delve版本和当前的golang版本不匹配,则需要更新Delve到与go相同版本。

$ dlv
Delve is a source level debugger for Go programs.   //Delve是Go程序的源代码级调试器。

$ dlv version
Delve Debugger                                        
Version: 1.20.2
Build: $Id: e0c278ad8e0126a312b553b8e171e81bcbd37f60

$ go version
go version go1.20.2 windows/amd64

我的delve和Go语言版本一致,无需更新?

这一次我的IDEA,启动go项目,开头报错:WARNING: undefined behavior - version of Delve is too old for Go version 1.20.2 (maximum supported version 1.19)

如图:

在这里插入图片描述
为啥查询到的是相同版本,这里却提示不是呢?只能也安装一次新版的delve了。最后我也重新下载编译了新dlv且在IDEA中指定了其exe的路径。

手动更新Delve版本:

  • 1.找到仓库。https://github.com/go-delve/delve。
  • 2.把仓库克隆到本地:git clone https://github.com/go-delve/delve.git。
  • 3.Doc窗口,进入到cmd/dlv目录,运行 go build, 会生成一个dlv.exe文件。
  • 4.将dlv.exe放到go的安装路径$GOPATH的bin中,比如这里是:D:/zoutao_job/go1.20.2/bin/dlv.exe。
  • 5.打开IDEA -> help -> Edit Custom Properties, 输入 dlv.path=D:/zoutao_job/go1.20.2/bin/dlv.exe。
  • 6.重启IDEA,再次以调试启动项目即可。

如图:

在这里插入图片描述

打开IDEA的 Edit Custom Properties, 输入指定目录:

在这里插入图片描述

指定delve.exe 1.20.2后,go项目就可以正常debug了!

在这里插入图片描述


本文到此结束~~~

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

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

相关文章

Java 实现类似于网盘一样的文件管理功能

**需求是使用阿里云oss存储,实现一个文件管理功能,支持新建文件夹、文件的上传、下载、批量下载、删除、批量删除、预览、移动、名称搜索、文件路径搜索等。**本人也参考了网上的一些项目,这里记录一下后端的Java代码实现: 首先是表设计的实…

SpringBoot共享图书平台(有文档)

1.简介 SpringBoot共享图书平台 本项目比较简单,适合练手,也适合二开 1.访问地址 http://localhost/ 超级管理员账户 账户名:admin 密码:admin123 普通用户 账户名: zhangsan 密码:123456 普通用户 账…

Talk| CMU博士胡亚飞 :基于离线强化学习的机器人自主探索

本期为TechBeat人工智能社区第503期线上Talk! 北京时间6月07日(周三)20:00,CMU Robotics Institute 在读博士生—胡亚飞的Talk将准时在TechBeat人工智能社区开播! 他与大家分享的主题是: “基于离线强化学习的机器人自主探索 ”&#xff0c…

chatgpt赋能python:Python快速复制

Python快速复制 Python是一种高级编程语言,具有简单易学、优雅简洁的编程风格,也被称为“胶水语言”,因为它可以与其他编程语言很好地结合使用。在Python中,复制文件或文件夹是一个常见的任务,因此在本文中&#xff0…

过五关斩六将,欧科云链荣膺2023安博会“创新产品优秀奖”

6月7日,由中华人民共和国公安部指导、中华人民共和国商务部批准,公安部主管的中国安全防范产品行业协会主办和承办的2023中国国际社会公共安全产品博览会(以下简称:安博会)正式开幕。 此次安博会,欧科云链携…

6月9日,亚马逊云科技携手出海新势力一同而来

向全球价值链上游奋进 中国企业增强国际竞争力的关键,是努力朝全球价值链上游奋进,发力技术出海。中国的出海新机遇,背后曾是疫情在全球按下数字互联和数字化升级的快进键,跨境电商、在线社交、移动支付、数字服务等数字经济迎来…

chatgpt赋能python:Python快速处理数据的SEO文章

Python快速处理数据的SEO文章 Python是一种通用的高级编程语言,被广泛用于处理数据和科学计算。它以其简洁和高效的语法闻名,可以在短时间内编写出大量的代码,从而快速处理数据。在本文中,我们将讨论如何使用Python快速处理数据&…

万字详解普遍操作系统进程七态与Linux进程七态

作为一个称职的系统管理员,为了更熟悉进程的管理流程,我们必须要知道进程的不同状态所对应的意义。 目录 了解进程状态普遍操作系统的概念就绪状态运行状态等待状态阻塞状态挂起状态暂停状态终止状态 Linux下的进程状态R (running)运行状态S (sleeping)可…

开关柜无线测温技术的研发与发展前景

安科瑞虞佳豪 开关柜无线测温技术发展前景 当前,随着我国科技水平的迅速提升,无线测温技术的研制与应用越来越多地引起国内外专家学者的关注,同时也推动了电力企业对其进行更为广泛的研究与开发,目前已有多种在线检测系统应用于开…

【Android】WMS(三)Window的更新UI刷新

Window的更新 在 Android 中,窗口的更新是一个非常常见的事情。比如,在使用 App 过程中,需要弹出键盘窗口或者切换横竖屏时,就会发生窗口的更新。 首先,当需要更新窗口时,会调用 WindowManager 的 updateV…

基于Java+SpringBoot+Vue前后端分离校园闲置物品交易网站

博主介绍:✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

POI in Action

POI 组件依赖 按需引入对应依赖 (给出官方的指引) 组件作用Maven依赖POIFSOLE2 FilesystempoiHPSFOLE2 Property SetspoiHSSFExcel XLSpoiHSLFPowerPoint PPTpoi-scratchpadHWPFWord DOCpoi-scratchpadHDGFVisio VSDpoi-scratchpadHPBFPublisher PUBpoi-scratchpadHSMFOutloo…

MCP1501基准电源系列输出电容为什么不能超过300P

1 介绍 在我们通常理解中基准的输出电容需要在100nF以上,才能有较好的性能输出,为什么MCP1501系列官方推荐输出负载电容不能超过300P呢 2 原理分析 如下是MCP1501手册中标注的,最大负载电容不能超过300pF,超过300pF容易振荡 MC…

JavaSE-01【初识Java】

文章目录 JavaSE-01【初识Java】第一章 Java开发序言1.1 Java语言概述1.2 Java语言的发展史1.3 Java语言应用领域1.4 掌握Java可以从事的工作 第二章 Java开发环境2.1 JDK、JRE、JVM2.2 Java虚拟机 (JVM)2.3 JDK JRE JVM三者的关系2.4 JDK的下载2.5 JDK的安装2.6 JDK环境变量的…

华为认证 | HCIE-Big Data-Data Mining 认证即将升级新版本!

华为认证HCIE-Big Data-Data Mining V3.0(中文版)预计将于2023年6月30日正式对外发布。 为了帮助您做好学习、培训和考试计划,现进行预发布通知,请您关注。 01 发布概述 基于“平台生态”战略,围绕“云-管-端”协同的…

使用PowerDesigner生成数据库设计文档

第一步:将现有得数据表通过PowerDesigner导入sql脚本(同时保证注释不丢失及name code comment) 1:依次点击File->Reverse Engineer->Database... 2.弹出弹窗对模型进行命名,同时在DBMS下拉选择框中需要选择自己对应的数据库类型&#…

Vue+SpringBoot打造生活废品回收系统(附源码文档)

作者主页:Designer 小郑 作者简介:Java全栈软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发、系统定制、远程技术指导。CSDN学院、蓝桥云课认证讲师,全栈领域优质创作者。 一、摘要…

数据库管理-第八十一期 保姆级EMCC搭建教程(20230606)

数据库管理 2023-06-06 第八十一期 保姆级EMCC搭建教程1环境说明2 EMCC安装前准备3安装EMCC4 进入EMCC5 添加主机与数据库5.1 添加主机5.2 添加数据库 6 注意事项总结 第八十一期 保姆级EMCC搭建教程 EMCC,全称Oracle Enterprise Manager Cloud Control&#xff0c…

巨详细的一份Python学习路径文档--如何精准的入手Python

当谈论学习Python编程时,有许多不同的途径和资源可供选择。为了帮助你建立起一个学习Python的有效路线,下面是一个包含基本步骤和关键资源的建议。 「请注意,这只是一个指南,你可以根据自己的兴趣和学习风格进行调整。」 简章 「确…

《水经注地图服务》新版发布

《水经注地图服务》已发布新版,请各位新老客户到官方网站下载新版试用或升级更新。 当前版本主要对Windows 64位版和Linux版进行升级,从该版开始,Windows32位版将不再升级。 服务管理界面 版本号 当前版本号:5.0.0-beta Window…