文章目录
- 从0开始学习Go
-
- 0 与C++对比
- 1 代码框架
-
- 1.1 helloworld式代码示例
- 1.2 主体代码元素(核心三部分)
- 1.3 其他
- 2 与C/C++区别
- 3 有用的小工具
- 4 注意事项
从0开始学习Go
0 与C++对比
编译型语言 | 需要编译为机器码 | 直接编译为二进制可执行文件 |
静态类型 | 类型在编译时确定 | 类型系统更严格,支持类型推断 |
指针操作 | 支持指针(包括多级指针) | 支持指针(但无指针运算) |
控制结构 | if/else for switch 相同 | 语法更简洁(省略括号) |
函数多返回值 | 需通过引用参数或结构体返回 | 原生支持多返回值 |
内存管理 | 手动管理(new/delete) | 自动垃圾回收(GC) |
并发模型 | 基于线程(std::thread)和锁 | 原生协程(goroutine)和通道(channel) |
面向对象 | 类继承、多态、运算符重载 | 通过接口(interface)和组合实现多态 |
错误处理 | 异常机制(try/catch) | 显式错误返回(多返回值模式) |
包管理 | 头文件包含(#include) | 模块化设计(go.mod 依赖管理) |
泛型 | 模板(template) | 1.18+ 支持泛型(语法更简单) |
编译速度 | 较慢(尤其大型项目) | 极快(依赖分析高效) |
1 代码框架
1.1 helloworld式代码示例
package main
import "fmt"
func main() {
fmt.Println("Hello, world!")
}
1.2 主体代码元素(核心三部分)
- package
- 包,表示一组代码。每个go文件都以package开头
- import
- 导入其他包
- func
- 即function,由一行或多行代码组成的组,可被其他程序调用。
- go程序运行时会寻找main,并首先运行
1.3 其他
并发编程
- 关键模式转换:// 传统线程 → Go协程
go func() { // 启动一个协程
// 并发任务
}()// 共享内存 → 通道通信
ch := make(chan int)
go func() { ch <- 42 }()
value := <-ch
接口与组合
- 面向对象思维转换:type Writer interface {
Write([]byte) (int, error)
}type FileWriter struct { /* 字段 */ }
func (fw FileWriter) Write(data []byte) (int, error) {
// 实现接口
}
2 与C/C++区别
3 有用的小工具
go fmt go自带格式化工具,不需要像c++一样借助clang等工具
go test go test -bench . # 基准测试
go tool go tool pprof # 性能剖析
依赖管理
- 创建模块:go mod init your-project
go get github.com/gin-gonic/gin@v1.7.7
4 注意事项
- 需避免的常见陷阱
-
过度设计
- ❌ 用 C++ 的类层次结构设计 Go 程序
- ✅ 使用小而精的接口 + 组合
-
并发误用
- ❌ 直接共享内存(sync.Mutex 不是首选方案)
- ✅ 优先使用通道通信
-
错误处理
- ❌ 忽略错误返回值
- ✅ 始终检查错误:if result, err := someFunc(); err != nil {
// 处理错误
}
评论前必须登录!
注册