学Go一小时之初学者学Go的疑惑
本文介绍了Go语言的学习价值、应用场景及入门指南。作为一门高性能后端开发语言,Go在云原生生态、微服务架构和系统工具开发中具有显著优势。与Python相比,Go是静态类型、编译型语言,适合构建高并发服务。文章详细展示了Go在Web后端、命令行工具、网络编程等领域的实际应用,并提供了新手入门指南:从创建项目目录、初始化模块到编写第一个"Hello Go"程序。通过解释packag
一、引言
上一章节过后,本打算开始学习go的数据类型,但是刚开始学习Go这门开发语言,我和其他初学者一样,有一些学习的疑惑,需要理解和学习一下。这样在入门学习的时候,能理解清楚,对后面深入长远的学习Go这门语言,也会有很多帮助。
二、为什么要学习Go
2.1、Go能开发高性能后端服务或者微服务架构
2.2、是目前主流云原生(Kubernetes、Docker、Prometheus等)生态核心语言,适配云原生生态
2.3、静态类型和编译检查
2.4、语法简洁,容易上手,编写部署简单、高性能的系统工具
三、与Python语言的区别
如果你已经学习了Python语言,学习Go还有必要学习吗?下面是与Python语言的对比:
特性 | Python | Go |
---|---|---|
设计目标 |
简洁、易读、快速开发 |
高并发、高性能、简洁部署 |
类型系统 |
动态类型 |
静态类型 |
编译方式 |
解释型 |
编译型(生成可执行文件) |
并发支持 |
通过线程、协程(如 asyncio) |
原生 goroutine,轻量高效 |
适合人群 |
数据分析、AI、Web开发、脚本编写 |
后端开发、微服务、系统编程、云原生 |
部署方式 | 依赖解释器和环境 | 单文件部署,跨平台 |
如果你有以下目标,学习 Go 是非常值得的:
-
想开发高性能后端服务或微服务架构。
-
对云原生技术栈(Kubernetes、Docker)感兴趣。
-
想写部署简单、性能高的系统工具。
-
想拓展编程视野,掌握静态类型语言。
如果你主要做数据分析、AI、脚本自动化,Python 已经非常够用了。
总之,技多不压身,多学习,某些场景一定能用上
四、Go实际应用场景
目前Go实际应用非常广泛,主要有以下的实际应用:
应用场景 | 说明与优势 | 推荐使用 Go 的理由 |
---|---|---|
Web 后端开发 | 构建高性能 RESTful API,常用框架如 Gin、Fiber | 高并发处理能力,部署简单 |
微服务架构 | 每个服务独立部署,适合容器化和服务拆分 | 编译为单文件,启动快,资源占用低 |
云原生开发 | Kubernetes、Docker、Prometheus 等核心项目均使用 Go | 云原生生态核心语言 |
命令行工具开发 | 构建跨平台 CLI 工具,如 kubectl 、gh |
编译后为可执行文件,跨平台部署方便 |
网络编程 | 构建高并发网络服务,如聊天服务器、代理服务器 | goroutine 并发模型高效且易用 |
系统工具与运维脚本 | 替代 Python 编写系统工具、自动化脚本 | 性能更高,部署更方便 |
日志与数据处理 | 实时日志收集、Kafka 消费者等场景 | 并发处理能力强,适合流式数据处理 |
区块链开发 | 以太坊客户端 Geth、Hyperledger Fabric 等均使用 Go | 适合构建分布式系统和底层协议 |
嵌入式与边缘计算 | 在部分嵌入式场景中使用,如 IoT 网关、边缘服务 | 编译后体积小,运行效率高 |
五、新手怎么开始写Go程序
5.1、新建工作目录
mkdir my-go-project
cd my-go-project
go mod init my-go-project
5.1.1、go mod init my-go-project是什么意思?
这是 Go 的模块初始化命令,用来创建一个新的 Go 模块。它的作用是:
-
创建
go.mod
文件:这是 Go 项目的配置文件,记录模块名、依赖包版本等信息。 -
定义你的模块名:
my-go-project
是你给这个模块起的名字,通常是项目名或仓库路径(比如github.com/kunx/my-go-project
)。 -
启用 Go Modules 管理依赖:Go Modules 是 Go 官方推荐的依赖管理方式,替代了以前的 GOPATH 模式。
5.1.2、为什么要这么做?
使用 go mod init
有几个重要好处:
-
依赖管理更清晰
你可以使用 go get
安装第三方包,Go 会自动记录版本信息到 go.mod
和 go.sum
文件中。
-
项目更易维护
别人拿到你的项目,只要运行 go build
或 go run
,Go 会自动下载依赖,保证一致性。
-
支持多版本和私有包
你可以指定依赖的版本,也可以引用私有仓库或本地模块。
5.2、写第一个Go程序
在my-go-project目录创建一个名为main.go的文件,写入以下内容:
package main // 声明这是一个可执行程序
import "fmt" // 引入标准库中的 fmt 包,用于输出
func main() { // 主函数,程序从这里开始执行
fmt.Println("Hello, Go!") // 打印一行文本
}
5.2.1、为什么文件名要定义main.go,是必须的吗?
不是必须叫 main.go
,你可以叫它 app.go
、start.go
等,但在某些情况下这样命名是约定俗成的做法,尤其是对于 Go 新手或小项目来说,它有一些实际好处。
当你运行 go run .
或 go build
时,Go会寻找包含 package main
,并且定义了 func main()的文件
,程序就可以运行。
好处是什么:
-
清晰表达程序入口
Go 程序的入口是 main
包中的 main()
函数。把文件命名为 main.go
,可以让人一眼看出这是 程序的启动文件。
- 方便管理多个文件
如果你的项目有多个文件,比如:
main.go
utils.go
handler.go
那么 main.go
通常是负责启动程序的主文件,其他文件是辅助模块。
- 工具和框架兼容性好
一些构建工具或部署脚本默认查找 main.go
,所以用这个名字可以避免配置麻烦。
5.2.2、为什么要定义 package main
-
每个 Go 文件都必须声明一个包(package)。
-
package main
是特殊的包名,表示这是一个可执行程序,而不是一个库。 -
只有
package main
才能包含main()
函数,Go 编译器会从这里开始执行程序。
5.2.3、为什么要 import
包
-
import
用于引入其他包的功能,比如标准库中的fmt
(用于格式化输出)、os
(操作系统接口)等。 -
Go 的模块化设计鼓励你只引入需要的包,保持代码简洁。
5.2.4、为什么要写func main()函数
-
main()
是程序的入口函数,Go 程序从这里开始执行。 -
它必须在
package main
中定义,不能带参数或返回值。
六、总结
本章节,熟悉了为什么要学习Go,与Python的区别,实际应用场景,以及新手怎么开始第一个Go程序。下一章节,继续学习go的数据类型,GoGoGo
更多推荐
所有评论(0)