← 学习

学习学习专题:go

Go语言基础与编程思维-Go 语言入门与程序执行01

Go 语言入门与程序执行 从零理解 Go 第一章:认识 Go——为什么我们要学习它? 1.1 Go 是什么? Go(Golang) Go 是一种由 Google 开发的静态类型、编译型、具有垃圾回收机制的通用编程语言。 它的设计尤其重视简洁性、可维护性、工程效率和并发编程。 Go…

目录 · 10 节

Go 语言入门与程序执行

从零理解 Go

第一章:认识 Go——为什么我们要学习它?

1.1 Go 是什么?

Go(Golang)

Go 是一种由 Google 开发的静态类型、编译型、具有垃圾回收机制的通用编程语言。

它的设计尤其重视简洁性、可维护性、工程效率和并发编程。

Go 于 2009 年公开发布,设计者包括 Robert Griesemer、Rob Pike 和 Ken Thompson。

这里有一个值得思考的问题:

为什么 Google 这样的公司需要专门设计一门新语言?

因为大型软件工程中存在几个长期问题:

  1. 编译速度慢,开发反馈周期长。
  2. 复杂语言特性增加团队协作和维护成本。
  3. 并发程序开发复杂,容易产生错误。
  4. 大型代码库需要统一、简单的工程规范。

Go 希望在执行效率、开发效率和工程可维护性之间取得平衡。

1.2 Go 和 Python 的本质区别

维度 Python Go
类型系统 动态类型 静态类型
主要执行方式 通常由解释器执行字节码 编译为机器代码
变量声明 通常不声明类型 通常需要明确或推断类型
内存管理 自动垃圾回收 自动垃圾回收
并发工具 Thread、asyncio、multiprocessing Goroutine、Channel
错误处理 异常机制 显式 Error 返回值
面向对象 Class、继承 Struct、Interface、组合

三个关键点。

第一个:静态类型。

Python:

x = 10
x = "hello"

这在 Python 中是合法的。

Go:

var x int = 10
x = "hello" // 编译错误

为什么?

因为 Go 的变量具有确定的静态类型。x 一旦声明为 int,就不能直接赋值为字符串。

这意味着很多类型错误可以在程序运行之前被编译器发现。

第二个:编译执行。

Python 通常通过解释器运行程序:

python main.py

Go 通常先编译:

go build main.go

生成可执行文件,再运行:

./main

Go 也提供:

go run main.go

它会帮助你完成编译和运行,适合开发阶段。

第三个:并发设计。

Python 有 Thread 和 asyncio 等并发工具。

Go 则把 Goroutine 作为语言生态中的重要并发抽象。

第二章:搭建 macOS Go 开发环境

现在进入真正的动手环节。

  • 列表项
  • 列表项

你的开发环境是:

  • 操作系统:macOS
  • 编辑器:VS Code
  • 终端:macOS Terminal 或 VS Code 集成终端
  • 编程语言:Go

我们的目标是建立一个以后所有 Go 项目都能复用的开发环境。

2.1 先理解 Go 开发环境由什么组成

一个完整的 Go 开发环境主要包含四个部分:

工具 作用
VS Code 编辑 Go 源代码
Go Extension + gopls 代码补全、跳转、诊断、调试支持
Go Toolchain 编译器、链接器、go 命令及标准工具
macOS 加载并运行编译后的程序

第三章:Go 程序究竟是怎么执行的?

3.1 先理解编译型语言

我们从 Python 对比开始。

Python 代码:

print("Hello Python")

通常执行:

python main.py

Python 解释器负责读取和执行程序。

Go 代码:

package main

import "fmt"

func main() {
    fmt.Println("Hello Go")
}

通常执行:

go build

Go 编译器将 Go 源代码编译为机器代码,链接器再将程序需要的代码组织成可执行文件。

整体流程可以理解为:

Go 程序执行流程

image

这也是为什么 Go 通常被称为编译型语言。

3.2 Go 的三个重要命令

  • 命令 A:go run
go run main.go

作用:编译并运行 Go 程序。

适合开发阶段快速测试。

注意:它并不意味着 Go 直接解释执行源代码,而是背后仍然需要编译。

  • 命令 B:go build
go build

作用:编译当前包,生成可执行文件。

适合构建项目。

例如:

go build -o inventory

会将构建结果命名为 inventory。

  • 命令 C:go install
go install

作用:编译并安装 Go 包或可执行程序。

对于可执行程序,默认会安装到 Go 的可执行工具目录,通常是 $(go env GOPATH)/bin。

3.3 一个重要问题:Go 程序从哪里开始执行?

观察这个程序:

package main

import "fmt"

func main() {
    fmt.Println("Hello Go")
}

其中:

func main()

是程序的入口函数。

先理解两个不同的概念:

  • package main:声明当前文件所属的包是特殊的可执行程序包。
  • func main():声明程序启动后执行的入口函数。

它们不是同一个东西。

如果你未来写一个普通工具库,例如:

package inventory