第1章 Go语言介绍

从现代编程挑战出发,理解Go对开发速度、并发、类型系统和内存管理的取舍,并完成Hello与Playground实验。

从大型软件的反馈速度开始

先预测:快速编译、goroutine和GC是否意味着程序自然正确且资源无泄漏?不是,它们只改变反馈、调度和内存回收方式。

Go语言介绍不是口号列表。它针对编译慢、依赖复杂、网络并发与内存管理成本,选择小语法、快速构建、goroutine、静态类型和GC。是Go工程生产力的第一证据。

开发速度与统一工具

编译器拒绝未使用import和变量,gofmt统一格式,go testgo build共享package模型。减少项目间配置差异,但依赖和生成工具仍需锁定。

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

并发不是自动并行

Goroutine是由运行时调度的独立工作,channel提供通信与同步;是否并行还取决于可用逻辑处理器和工作性质。不能成为正确性依赖。

done := make(chan struct{})
go func() { close(done) }()
<-done

类型系统与组合

Go静态知道每个值的类型和表示,用方法与隐式接口满足实现多态,用嵌入与组合代替类继承。使实现包不需依赖接口包,却要求接口保持小而聚焦。

内存管理与资源边界

逃逸分析决定值可否留栈,GC回收不可达堆对象。不负责关闭文件、停止goroutine或提交业务事务,这些仍要显式生命周期。

func label(id int) *string {
    value := fmt.Sprintf("id-%d", id)
    return &value
}

Hello Go与Playground

本地执行记录go version、module、命令、stdout和status。Playground适合共享小例子,但时间、网络、文件和toolchain版本受限制。决定结果能否迁移生产。

本章回顾

本章覆盖现代编程挑战、开发速度、并发、Go语言的类型系统、内存管理、Hello Go和Go Playground。每项便利都有边界,必须以toolchain、runtime和资源证据验证。

术语表

讨论

评论区加载中…