这一版怎么学
- 01 · 泛型函数与类型约束
为整数、浮点数等类型编写相同的聚合算法。
- 02 · strings.Cut
解析 key=value 一类只需要首次分割的数据。
- 03 · 原生模糊测试
给字符串解析、编解码和协议处理补充边界输入。
已有 Go 基础可从示例开始;首次学习建议先完成 Go Tour ↗ 中的函数、切片、接口与并发部分。历史版本用于理解演进,新项目选用受支持的正式版本。
为整数、浮点数等类型编写相同的聚合算法。
解析 key=value 一类只需要首次分割的数据。
给字符串解析、编解码和协议处理补充边界输入。
官方发布说明 ↗ · 核对于 2026-10-06
函数和类型可以声明类型参数,在约束允许的操作范围内复用实现。
怎么用为整数、浮点数等类型编写相同的聚合算法。
旧版做法为每种类型分别写函数,或通过接口加类型断言处理。
注意事项~int 允许底层类型为 int 的自定义类型;约束应只包含算法需要的操作。
官方依据 ↗ · 最低版本 1.18 · 核对于 2026-10-06
运行示例保存为 main.go,在 go.mod 声明 go 1.18 或以上的项目中执行 go run .
package main
import "fmt"
func Sum[T ~int | ~int64](values []T) T {
var total T
for _, value := range values { total += value }
return total
}
func main() { fmt.Println(Sum([]int{2, 3, 5})) }10
一次分割返回前半段、后半段和是否找到分隔符,避免不必要的切片结果。
怎么用解析 key=value 一类只需要首次分割的数据。
旧版做法使用 SplitN 后再检查切片长度。
注意事项只匹配第一次出现;没有分隔符时,before 是原字符串,found 为 false。
官方依据 ↗ · 最低版本 1.18 · 核对于 2026-10-06
运行示例保存为 main.go,在 go.mod 声明 go 1.18 或以上的项目中执行 go run .
package main
import ("fmt"; "strings")
func main() {
key, value, found := strings.Cut("name=Ada", "=")
fmt.Println(key, value, found)
}name Ada true
testing 支持 Fuzz 测试,自动探索输入以寻找崩溃和违反约束的情况。
怎么用给字符串解析、编解码和协议处理补充边界输入。
旧版做法手动列举测试数据,或使用外部模糊测试工具。
注意事项普通 go test 只运行 seed;持续探索需要 go test -fuzz=FuzzCut -fuzztime=10s。
官方依据 ↗ · 最低版本 1.18 · 核对于 2026-10-06
运行示例保存为 lesson_test.go,在 go.mod 声明 go 1.18 或以上的项目中执行 go test -v .
package example
import ("strings"; "testing")
func FuzzCut(f *testing.F) {
f.Add("name=Ada")
f.Fuzz(func(t *testing.T, text string) {
before, after, found := strings.Cut(text, "=")
if found && before + "=" + after != text { t.Fatal("round trip failed") }
})
}没有找到匹配的中文解读。试试其他关键词,或查看下方官方目录。
自动同步官方目录,涵盖语言、标准库、弃用及迁移变化。标题保留官方原文;中文解读精选于上方。
官方目录中没有匹配项。
提示:把 ~float64 加入约束,类型推断会根据传入切片选择 T。
package main
import "fmt"
func Sum[T ~int | ~float64](values []T) T {
var total T
for _, value := range values { total += value }
return total
}
func main() { fmt.Println(Sum([]float64{1.5, 2.5})) }4