诞生背景(2007年):Go 语言由 Google 的三位工程师 Robert Griesemer 、Rob Pike 和 Ken Thompson 于 2007 年开始设计开发。
设计动机
当时 Google 面临的主要问题:
初期探索(2007-2009年)
很久以前,有一个IT公司,这公司有个传统,允许员工拥有20%自由时间来开发实验性项目。在2007的某一天,公司的几个大牛,正在用c++开发一些比较繁琐但是核心的工作,主要包括庞大的分布式集群,大牛觉得很闹心,后来c++委员会来他们公司演讲,说c++将要添加大概35种新特性。这几个大牛的其中一个人,名为:Rob Pike,听后心中一万个xxx飘过,“c++特性还不够多吗?简化c++应该更有成就感吧”。于是乎,Rob Pike和其他几个大牛讨论了一下,怎么解决这个问题,过了一会,Rob Pike说要不我们自己搞个语言吧,名字叫“go”,非常简短,容易拼写。其他几位大牛就说好啊,然后他们找了块白板,在上面写下希望能有哪些功能(详见文尾)。接下来的时间里,大牛们开心的讨论设计这门语言的特性,经过漫长的岁月,他们决定,以c语言为原型,以及借鉴其他语言的一些特性,来解放程序员,解放自己,然后在2009年,go语言诞生。
标准化阶段(2010-2015年)
生态扩张期(2016年至今)
语言特性发展
核心理念
"Less is more" - 简洁胜于复杂
设计原则
主要应用场景
① 云计算与容器化
Docker
与 Kubernetes
:Docker的容器引擎和Kubernetes的编排系统均使用Go开发,其高并发能力和低内存占用特性完美契合容器化需求。② 高并发网络服务
API网关与微服务:高性能HTTP服务器(如Gin、Echo框架)可轻松处理每秒数万级请求,适合构建RESTful API和gRPC服务。
实时通信:WhatsApp使用Go构建消息推送系统,单机支持数百万并发连接。
代码示例:
// 基于Gin的HTTP服务
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{"message": "pong"})
})
r.Run() // 默认监听8080端口
}
③ 命令行工具与DevOps
④ 区块链与分布式系统
Hyperledger Fabric
:企业级区块链平台的核心模块使用Go编写,利用其高效密码库和网络协议支持。⑤ 边缘计算与物联网
纵向对比(Go vs 其他语言):
维度 | Go语言 | Java | Python | C++ |
---|---|---|---|---|
编译速度 | 毫秒级(单文件) | 中等(依赖JVM启动) | 解释执行(无编译) | 慢(模板实例化耗时) |
内存占用 | 低(静态编译无VM开销) | 高(JVM堆内存) | 高(对象模型开销) | 极低(手动内存管理) |
并发模型 | goroutine(轻量级协程) | 线程池(高上下文切换成本) | 多进程/GIL限制 | 线程/异步IO复杂 |
类型系统 | 强类型+类型推断 | 强类型(显式声明) | 动态类型 | 强类型(显式模板) |
典型应用 | 云原生/微服务 | 企业级应用/Android | 数据分析/脚本 | 游戏引擎/高频交易 |
性能实测数据:
局限性:
未来发展方向:
Go 语言以其简洁、高效、并发友好的特性,在现代软件开发中占据重要地位,特别适合构建高性能的后端服务和云原生应用。
Go 官网下载地址:https://golang.org/dl/
Go 官网镜像站(推荐):https://golang.google.cn/dl/
根据自己的系统选择下载,然后选择好自己的安装路径安装即可,此时就可以检测是否安装成功了,如下:
然后我们也可以查看我们的 Go 环境,如下:
C:\Users\千>go env
set AR=ar
...
go: stripping unprintable or unescapable characters from %"GOMODCACHE"%
set GOMODCACHE=C:\Users\���\go\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
go: stripping unprintable or unescapable characters from %"GOPATH"%
set GOPATH=C:\Users\���\go
....
我们可以发现这里的环境变量我们也是自动配好的,而不需要去手动配置了
这里的话我们用 vscode 来当作我们的编辑器,需要去下个 go 的插件,如下:
定义:gopls 是 Go 语言的官方语言服务器实现,基于 语言服务器协议(LSP)。LSP 是由微软创建的一个协议,旨在标准化编辑器或 IDE 与语言服务器之间的通信方式,从而提供诸如自动完成、转到定义、查找所有引用等语言功能。
gopls 提供了一系列智能功能,包括:
其实一般来说安装了 go 插件之后,然后新建 main.go 就会弹出查看安装,如下:
install All 即可,当然很可能会出现安装失败的情况(由于 国内的网络环境基本上都会出现安装失败),这个时候就需要更换代理,操作如下:
① 检查并修复 GOPROXY 设置,如下:
# 查看当前设置
go env GOPROXY
# 重新设置正确的代理(注意格式)
go env -w GOPROXY=https://goproxy.cn,direct
# 或者使用阿里云代理
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct
# 或者使用官方代理 + direct
go env -w GOPROXY=https://proxy.golang.org,direct
② 如果设置正确但仍有问题,尝试重置
# 重置为默认值
go env -u GOPROXY
# 然后重新设置
go env -w GOPROXY=https://goproxy.cn,direct
注意:设置完成后重启 VS Code,应该就能正常安装 gopls 了
③ 手动安装 goal
# 设置好代理后,手动安装
go install golang.org/x/tools/gopls@latest
④ 在 VS Code 中重新安装 Go 工具
Ctrl+Shift+P
Go: Install/Update Tools
⑤ 验证设置
# 验证 GOPROXY 设置
go env GOPROXY
# 测试网络连接
ping goproxy.cn
新建一个 main.go 的文件, 代码如下:
package main
import "fmt"
func main(){
fmt.Println("你好 golang")
}
package
main
import:一种加载包的机制
“fmt”:包路径(package path)只是一个字符串,并非标识符的列表。
func:一个关键字,用于引入函数(类型、变量、常量),易于编译器解析。
在 vs 中运行 Go 代码需要好几分钟,原因可能如下:
① 网络问题导致的包下载
如果代码依赖需要从网络下载,而网络连接较慢:
# 设置 Go 模块代理(推荐)
go env -w GOPROXY=https://goproxy.cn,direct
# 或者使用阿里云代理
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct
② 首次运行需要编译
第一次运行时 Go 需要编译标准库:
# 预编译标准库
go install std
③ 优化建议
# 先编译
go build main.go
# 再运行(秒级)
.\main.exe
这个怎么说呢,反正我用的是 vscode,对于初学者而言 vscode 已经足够了,因为 Goland 真的好贵,hh
GoLand 官网:GoLand by JetBrains: More than just a Go IDE
这个大家可以去网上搜搜教程吧,我这里推荐一篇:【Go】Goland下载与安装教程(详细)-CSDN博客
① 简洁易学
// 语法简洁直观
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
② 并发友好
// goroutine 并发
go doSomething() // 启动并发任务
③ 快速编译
④ 垃圾回收
⑤ 静态类型 + 强类型
⑥ 跨平台
① 内置并发支持
// goroutine 和 channel
ch := make(chan int)
go func() {
ch <- 42
}()
result := <-ch
② 接口设计
// 隐式接口实现
type Writer interface {
Write([]byte) (int, error)
}
③ 错误处理
// 显式错误处理
if err != nil {
return err
}
④ 包管理系统
// 简洁的包管理
import "fmt"
import "github.com/user/project"
目标:理解 Go 语言的基本语法和编程概念,能够编写简单的 Go 程序。
1.1 GoLang 简介与环境搭建
1.2 Go 基础语法
1.3 函数与方法
1.4 错误处理
1.5 Go 中的指针
此时可以适当做些小练习:Hello World、计算器程序、简单的数据处理
目标:理解 Go 的面向对象编程特性,能够有效使用结构体和接口,并且掌握 Go 的并发特性,能够编写高并发、高性能的程序。
2.1 数据结构深入
2.2 函数高级特性
2.3 面向对象编程
2.4 并发编程基础
此时就可以做些简单的项目:简单的 Web 服务器、文本处理工具、并发数据处理程序
目标:深入理解 Go 语言的高级特性,提升编程水平。
3.1 并发编程深入
3.2 错误处理 & 优化 & 测试
3.3 Go 标准库
3.4 Go 泛型(Go 1.18+)
3.5 包管理与模块
这个阶段的实践项目:命令行工具、简单的微服务
目标:掌握 Go Web 开发,能够构建 RESTful API 或 Web 应用,并且能够在 Go 中进行数据库操作,理解数据库连接与查询。
4.1 Web 开发
4.2 数据库操作
4.3 构建 RESTful API
这个阶段的实践项目:RESTful API 服务、完整的 Web 应用、微服务架构、DevOps 工具开发
目标:通过实际项目,巩固和应用所学知识。
5.1 小型项目
5.2 高级项目
官方网站:
书籍推荐:《Go 语言实战》 - William Kennedy 著(实践)
在线教程