Files
notes/resource/go/待总结/001 Go 语言环境准备.md
T
2026-03-01 01:43:46 +08:00

8.1 KiB
Raw Blame History

环境准备

下载安装

下载地址: https://go.dev

双击“下一步”安装,注意安装位置尽可能不放 C 盘,可以建立自己的环境目录。

安装完成后在 cmd 控制台输入 go version 查看 Go 版本,检测是否安装成功。

环境变量在新版本后不需要过多额外设置,但需注意用户变量中默认有 GOPATH 的设置,如果不希望放在默认用户目录下,需进行修改。

GOPATH 即为存储 Go 语言项目的路径,包含 src(已不强制要求)、pkg、bin 三个目录。

打开 cmd 控制台,输入 go env 查看 Go 的环境变量配置。

依次在 cmd 控制台设置代理和 GO111MODULE

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

关于 GOPATH

在 Go 语言开发中,GOPATH 是一个环境变量,用于定义 Go 代码的工作区。传统的 Go 项目结构基于 GOPATH 下的三个经典目录,分别是:

  1. src 存放 Go 源代码文件。按照惯例,源代码文件组织成以包为单位的目录,例如:github.com/user/project
  2. pkg 存放编译后的包文件(以 .a 结尾)。这些文件通常用于加速编译。
  3. bin 存放编译生成的可执行文件。执行 go install 时,生成的二进制文件会放在 bin 目录中,方便直接运行。

示例目录结构

GOPATH
├── src        // 源代码目录,存放你的 Go 项目代码
├── bin        // 可执行文件目录,存放编译后的可执行文件
└── pkg        // 已编译的包目录
    ├── linux_amd64    // 针对特定平台和架构编译的包文件
    │   ├── foo.a      // 编译后的 foo 包文件
    │   └── bar.a      // 编译后的 bar 包文件
    └── mod            // 在 Go Modules 模式下使用,存放模块缓存

为什么现在不再注重 GOPATH

自从 Go 1.11 引入了 Go Modules 后,GOPATH 不再是项目管理的核心部分,以下是原因:

  1. 模块化依赖管理
    Go Modules 使用 go.mod 文件来管理依赖和版本,解决了 GOPATH 下多个项目共享依赖库时的冲突问题,避免了“依赖地狱”。
  2. 无需固定目录
    使用 Go Modules 后,项目可以放在任意目录下,而不再需要存放在 GOPATH 的 src 目录中,增加了开发的灵活性。
  3. 版本控制
    Go Modules 原生支持版本控制和依赖管理,确保项目中使用的是正确版本的依赖,而 GOPATH 无法提供这种能力。
  4. 更简单的构建
    通过 Go Modules,开发者可以直接运行 go buildgo run,无需考虑是否在 GOPATH 内,提升了开发体验。

开发工具

采用 VsCode,如果写过 Java 可以使用 GoLand,会更顺手,一样的 UI。

  1. 安装 VsCode 软件,在插件市场安装 GO 插件。
  2. VsCode 软件的settings.json 文件中新增以下配置, 设置 go tools 的全局安装目录。
    • "go.toolsGopath": "D:\\MyGo\\go-tools"
  3. 安装扩展:快捷键 ctrl+shift+p,输入 Go install,选择 Install/Update Tools,勾选所有插件(插件显示可能会反应慢一些,稍等。)进行安装。
  4. 等待安装完成。

Hello World

创建文件:hello.go

package main

import "fmt"

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

1. package(声明包)

定义:Go 源文件必须以 package 开头,声明其所属的包。

  1. 包名与文件夹一一对应,但可以不同。
  2. 一个程序必须有且仅有一个 main 包,作为入口包。
  3. main 包的程序无法生成可执行文件。

2. import(导入包)

格式: import "包名" 或用括号引入多个包:

import (
    "name1"
    "name2"
)

注意:
只能导入已使用的包,未使用的包会导致编译错误。
fmt 是 Go 标准库,用于格式化输入输出。

3. main 函数

Go 程序的入口函数,必须声明在 main 包中,且只能有一个。

其他包中不能定义 main 函数。

func 函数名 (参数列表) (返回值列表) {
    函数体
}
  • 参数列表:变量名 类型 组合,如 a int, b string
  • 返回值列表:支持多个返回值,用 return 返回。
  • 函数体左大括号 { 必须与函数声明在同一行。

4. 打印 Hello World

Printlnfmt 包的函数,用于格式化输出,自动换行。

点号 . 表示调用 fmt 包的函数。

结尾无需分号 ;Go 编译器会自动处理。

编译和运行

Go 是编译型静态语言,在运行程序之前需将代码编译为二进制可执行文件。Go 提供两种主要命令用于编译和运行:go buildgo run

命令 功能 生成文件 适用场景
go build 编译 Go 程序为可执行文件 生成 .exe 文件 用于生产环境或打包分发
go run 编译后立即运行程序,不生成可执行文件 不生成文件,仅临时编译运行 用于调试、快速测试

go build 命令

go build fileName

fileName:Go 源文件名,可以是一个或多个,多个文件名用空格分隔;也可省略,省略时默认为当前目录。

参数不为空:

  • 如果 fileName 属于 main 包,生成与第一个 fileName 同名的可执行文件(如 abc.go 生成 abc.exe)。
  • 如果 fileName 不属于 main 包,只进行语法检查,不生成可执行文件。

参数为空:

  • 如果当前目录包含 main 包,生成与目录同名的 .exe 文件(如 hello 目录下生成 hello.exe)。
  • 如果目录中无 main 包,仅进行语法检查。
go build .\hello.go

Windows 系统:当前目录使用 .\ 表示。

类 Unix 系统:当前目录使用 ./ 表示。

常用 Print 方式

1. Print

将内容直接输出到控制台。

不接受任何格式化,占位符无效。

等价于对每一个操作数应用 %v

示例:

fmt.Print("Hello, World!")

输出:Hello, World!

2. Println

输出内容后自动换行

同样不支持格式化,占位符无效。

示例:

fmt.Println("Hello,", "World!")
fmt.Println("Hello,", "World!")

输出:

Hello, World!
Hello, World!

3. Printf

支持格式化输出,可按照指定的格式输出数据。

需要提供格式化占位符。

语法:

fmt.Printf(format, values...)

示例:

var a, b, c = 1, 2, 3
fmt.Printf("a = %d, b = %d, c = %d\n", a, b, c)

输出:

a = 1, b = 2, c = 3

\n 为占位符。

常见占位符

占位符 描述
%v 以默认格式打印变量的值(适用于大多数类型)
%T 打印变量的类型(类型名)
%s 输出字符串
%t 输出布尔值(truefalse
%d 打印整数的十进制表示
%b 打印整数的二进制表示
%o / %#o 八进制,不带零 / 带零(0o,零加小写字母 o)
%x / %#x 小写十六进制 / 带 0x 前缀的小写十六进制
%X / %#X 大写十六进制 / 带 0X 前缀的大写十六进制
%f / %.3f 浮点数,默认精度 6 位小数 / 保留 3 位小数,位数可控
%e / %.3e 科学计数法,默认精度 6 位小数 / 保留 3 位小数
%U / %#U Unicode 字符 / 带字符的 Unicode,用 rune 声明
%p 打印指针的地址,带 0x 前缀,变量前加 & 取指针
%q 带双引号的字符串,字符串内的引号用转义符
%c 打印一个 Unicode 字符(根据整数值打印对应的字符)