go入门Windows环境搭建
简介
Go 即 Golang,是 Google 公司 2009 年 11 月正式对外公开的一门编程语言。
根据 Go 语言开发者自述,近 10 多年,从单机时代的 C 语言到现在互联网时代的 Java,都没有令人满意的开发语言,而 C++往往给人的感觉是,花了 100%的经历,却只有 60%的开发效率,产出比太低,Java 和 C#的哲学又来源于 C++。并且,随着硬件的不断升级,这些语言不能充分的利用硬件及 CPU。因此,一门高效、简洁、开源的语言诞生了。
Go 语言不仅拥有静态编译语言的安全和高性能,而且又达到了动态语言开发速度和易维护性。有人形容 Go 语言:Go = C + Python , 说明 Go 语言既有 C 语言程序的运行速度,又能达到 Python 语言的快速开发。
Windows环境搭建
- 下载golang
Go 官网下载地址
Go 官方镜像站(没有VPN就选择这个地址)
- 安装
- 点击安装即可
- 验证
go version
- 查看go环境
go env
说明:Go1.11 版本之后无需手动配置环境变量,使用 go mod 管理项目,也不需要非得把项目放到 GOPATH 指定目录下,你可以在你磁盘的任何位置新建一个项目。
Go1.13 以后可以彻底不要 GOPATH 了。
说白了就是让用户更简单的使用go
开发工具
-
goland
-
vscode
个人喜欢jetbrains所有产品,但是由于需要收费(你懂的),所以这里暂时用vscode。
- vscode安装
详细安装参考这篇博客
- vscode安装go插件
- 本地创建一个目录
- vscode打开这个目录
创建一个以go结尾的文件,vscode就会识别出用go插件解析:
此时就会让安装go提示工具,安装即可
注意如果vscode写代码没有提示,可以配置下面环境变量
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn //将代理设置为国内源
- GO111MODULE 是 Go 1.11 引入的一个环境变量,用于控制 Go 模块(Module)的行为。设置为 on 表示强制启用 Go 模块模式,无论项目是否在 GOPATH 目录下。在模块模式下,Go 会忽略 GOPATH 和 vendor 目录,转而使用 go.mod 文件来管理依赖。
- GOPROXY 是 Go 模块模式下用于指定模块代理服务器的环境变量。默认情况下,Go 会直接从版本控制系统(如 GitHub)下载依赖模块,但在国内访问这些源可能会比较慢或不稳定。
设置为 https://goproxy.cn 表示使用国内的 Go 模块代理服务器,这样可以加速依赖模块的下载。
- 编写hello world代码进行测试
后记
vscode和goland体验差距太大了:
-
如果仍然有出现写代码没有提示的情况,那么请手动安装相关的包:
把所有的包都选上安装,最好有VPN
然后重启vscode。
此时就会自动安装,安装成功后就会有提示了。
-
需要手动初始化模块,否则提示:initialization failed: packages.Load error: err: exit status 1: stderr: go: go.mod file not found in current directory or any parent directory; see 'go help modules’go list。
这意味着你的项目目录中没有 go.mod 文件,而 Go 工具链期望在模块模式下工作。
此时只要执行下面命令:
go mod init <module-name>
此时项目根目录就会多了一个go.mod文件,并且提示信息也没有了
go.mod简介
go.mod
文件是 Go 语言中用于模块管理的核心文件。它定义了当前项目的模块路径、Go 版本以及项目所依赖的其他模块(第三方库或内部模块)。Go 模块(Module)是 Go 1.11 版本引入的依赖管理机制,用于取代旧的 GOPATH
模式。
go.mod
文件的作用
-
定义模块路径:
go.mod
文件的第一行通常定义了模块的名称(模块路径),例如:
这个路径是唯一的,通常与代码仓库的路径一致,用于标识模块。module github.com/username/myproject
-
管理依赖:
go.mod
文件会记录项目所依赖的其他模块及其版本。例如:
这些依赖项会在运行require ( github.com/gin-gonic/gin v1.9.1 golang.org/x/sync v0.3.0 )
go mod tidy
或go build
时自动下载到本地。
-
锁定依赖版本:
- 除了
go.mod
文件,Go 还会生成一个go.sum
文件,用于记录依赖模块的完整哈希值,确保每次构建时使用的依赖版本一致,避免因依赖版本不一致导致的问题。
- 除了
-
指定 Go 版本:
go.mod
文件可以指定项目所需的 Go 版本,例如:
这表示该项目需要 Go 1.20 或更高版本来编译。go 1.20
-
支持模块化开发:
- Go 模块允许你将代码拆分为多个模块,每个模块可以独立管理依赖和版本,适合大型项目或微服务架构。
go.mod
文件的结构
一个典型的 go.mod
文件如下:
module github.com/username/myproject
go 1.20
require (
github.com/gin-gonic/gin v1.9.1
golang.org/x/sync v0.3.0
)
replace github.com/old/module => github.com/new/module v1.2.3
exclude github.com/deprecated/module v1.0.0
module
:定义模块路径。go
:指定 Go 版本。require
:列出项目依赖的模块及其版本。replace
:用于替换某个依赖模块的路径或版本(例如,使用本地的模块或 fork 的模块)。exclude
:排除某个模块的特定版本。
如何生成 go.mod
文件
如果你还没有 go.mod
文件,可以通过以下命令生成:
go mod init <module-name>
例如:
go mod init github.com/username/myproject
运行后,Go 会生成一个 go.mod
文件,并根据项目中的 import
语句自动添加依赖。
常用的 Go 模块命令
go mod init
:初始化模块,生成go.mod
文件。go mod tidy
:根据代码中的import
语句,自动添加或删除go.mod
中的依赖。go mod download
:下载依赖模块到本地缓存(通常在$GOPATH/pkg/mod
目录下)。go mod vendor
:将依赖复制到项目的vendor
目录中,用于离线构建。go list -m all
:列出当前模块的所有依赖。
为什么需要 go.mod
文件?
在 Go 1.11 之前,Go 使用 GOPATH
模式管理代码和依赖,所有项目都必须放在 GOPATH
目录下,且依赖管理非常不方便。引入 go.mod
文件后:
- 项目可以放在任何位置。
- 依赖版本可以精确控制。
- 支持模块化开发,适合现代软件工程实践。
参考文献
https://go.dev/doc/tutorial/getting-started
https://gobyexample.com/
https://www.w3schools.com/go/
https://go.dev/doc/tutorial/
https://www.geeksforgeeks.org/golang-tutorial-learn-go-programming-language/