前言
这里只是简单列出GO语言的知识点
一、基础语法
1.1 程序结构
1 2 3 4 5 6 7
| package main
import "fmt"
func main() { fmt.Println("Hello, 世界!") }
|
1.2 变量与常量
1 2 3 4 5 6 7 8 9
| var name string = "Go" var age = 10 height := 1.75
const PI = 3.14 const ( StatusOK = 200 NotFound = 404 )
|
1.3 基本数据类型
| 类型 |
说明 |
示例 |
bool |
布尔值 |
true, false |
string |
字符串 |
"Go" |
int int8-int64 |
整型 |
42 |
uint uint8-uint64 |
无符号整型 |
255 |
float32 float64 |
浮点型 |
3.14 |
complex64 complex128 |
复数 |
1+2i |
byte |
uint8别名 |
0xFF |
rune |
int32别名(Unicode) |
'中' |
二、运算符
2.1 算术运算符
2.2 关系运算符
2.3 逻辑运算符
2.4 位运算符
2.5 赋值运算符
1
| = += -= *= /= %= <<= >>= &= ^= |=
|
2.6 其他运算符
三、流程控制
3.1 条件语句
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| if x > 0 { } else if x == 0 { } else { }
switch os := runtime.GOOS; os { case "darwin": fmt.Println("macOS") case "linux": fmt.Println("Linux") default: fmt.Printf("%s.\n", os) }
|
3.2 循环结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| for i := 0; i < 10; i++ { }
for x < 100 { }
for { break }
for idx, val := range slice { }
|
四、函数
4.1 函数定义
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| func add(a int, b int) int { return a + b }
func swap(x, y string) (string, string) { return y, x }
func split(sum int) (x, y int) { x = sum * 4 / 9 y = sum - x return }
|
4.2 高阶函数
1 2 3 4 5 6 7 8 9 10 11 12 13
| func compute(fn func(float64, float64) float64) float64 { return fn(3, 4) }
func adder() func(int) int { sum := 0 return func(x int) int { sum += x return sum } }
|
五、复合数据类型
5.1 数组与切片
1 2 3 4 5 6
| var a [3]int b := [...]int{1, 2, 3}
s := []int{1, 2, 3} s = append(s, 4) sub := s[1:3]
|
5.2 映射(Map)
1 2 3 4
| m := make(map[string]int) m["key"] = 42 delete(m, "key") val, ok := m["key"]
|
5.3 结构体
1 2 3 4 5 6 7 8
| type Vertex struct { X, Y float64 }
v := Vertex{1, 2} v.X = 4 p := &v p.Y = 8
|
六、方法与接口
6.1 方法
1 2 3 4 5 6 7 8 9 10
| func (v Vertex) Abs() float64 { return math.Sqrt(v.X*v.X + v.Y*v.Y) }
func (v *Vertex) Scale(f float64) { v.X = v.X * f v.Y = v.Y * f }
|
6.2 接口
1 2 3 4 5 6 7
| type Abser interface { Abs() float64 }
var a Abser a = Vertex{3, 4} fmt.Println(a.Abs())
|
6.3 类型断言与类型开关
1 2 3 4 5 6 7 8 9 10 11 12 13
| var i interface{} = "hello"
s := i.(string) s, ok := i.(string)
switch v := i.(type) { case int: case string: default: }
|
七、并发编程
7.1 Goroutine
1 2
| go say("world") say("hello")
|
7.2 Channel
1 2 3 4 5 6 7
| ch := make(chan int) buffered := make(chan int, 100)
ch <- 42 v := <-ch
close(ch)
|
7.3 Select
1 2 3 4 5 6 7 8 9 10
| select { case msg1 := <-ch1: fmt.Println(msg1) case msg2 := <-ch2: fmt.Println(msg2) case <-time.After(time.Second): fmt.Println("timeout") default: fmt.Println("no activity") }
|
八、错误处理
8.1 错误类型
1 2 3 4 5 6 7
| func doSomething() error { return errors.New("something went wrong") }
if err := doSomething(); err != nil { log.Fatal(err) }
|
8.2 自定义错误
1 2 3 4 5 6 7 8
| type MyError struct { When time.Time What string }
func (e *MyError) Error() string { return fmt.Sprintf("at %v, %s", e.When, e.What) }
|
九、标准库常用包
| 包名 |
用途 |
fmt |
格式化I/O |
os |
操作系统接口 |
io |
基本I/O接口 |
bufio |
缓冲I/O |
strconv |
字符串转换 |
strings |
字符串操作 |
bytes |
字节操作 |
sort |
排序 |
encoding/json |
JSON处理 |
net/http |
HTTP协议 |
sync |
同步原语 |
time |
时间处理 |
testing |
测试支持 |
十、最佳实践
- 遵循Go代码风格(
gofmt)
- 使用短变量声明(函数内)
- 错误处理而非异常
- 优先组合而非继承
- 使用接口解耦
- 避免全局变量
- 并发安全设计
- 编写单元测试(
go test)
- 文档注释(
godoc)
- 保持简单和可读性
注:本文档基于Go 1.18+版本,部分特性如泛型需要较新版本支持。
版权声明: 此文章版权归曦曦所有,如有转载,请注明来自原作者