go.mod, tidy, vet, fix, workspace
ลง Go 1.27 แต่เห็น go 1.25? ปกติ Go ตั้งใจให้เลขต่ำไว้ก่อนเพื่อให้เพื่อนเปิดได้ ไม่ต้องแก้ อยากขยับค่อย:
โครงง่ายๆ พอ:
1 โฟลเดอร์ = 1 package ชื่อสั้นตัวเล็ก
go get github.com/fatih/color # ยืมของ
go get github.com/fatih/color@v1.18 # ล็อกเวอร์ชัน
go mod tidy # เก็บกวาด (1.27 รวม require เหลือ 2 ก้อน direct/indirect เอง)
go mod vendor # ก็อปของมาไว้ในโปรเจกต์ (เหมาะกับเน็ตบริษัทช้า/ห้ามออกเน็ต)
go work init ./api ./web # มีหลาย module อยากแก้พร้อมกันใช้ workspacego.sum = ใบเสร็จกันของปลอม อย่าลบมั่ว
go fmt ./... # แม่บ้านจัดหน้า
go vet ./... # หมอตรวจ (print ผิด, %w ผิด, atomic ผิด)
go fix ./... # ครูแก้โค้ดเก่าเป็นแบบใหม่ (1.26 รื้อใหม่ เก่งมาก)
go doc fmt.Println
go doc example.com/pkg@v1.2.3 # ใหม่ 1.27: ดูของเวอร์ชันนั้นได้เลยใช้ทุกวันก่อน git push:
go fix ตอนนี้มีตัวช่วยชื่อ modernizers (รันแล้วถามก่อนแก้ ไม่แก้เงียบ):
atomictypes — เปลี่ยน atomic.AddInt64(&x) เก่าเป็น atomic.Int64 ใหม่อ่านง่ายembedlit — เปลี่ยน struct ฝังแบบห่อยาวเป็นแบบสั้น 1.27 Gopher{Burrow: ...}slicesbackward — เปลี่ยน loop ถอยหลังมือเขียนเป็น slices.Backward ที่ถูกกว่าunsafefuncs — เตือนจุดใช้ unsafe เสี่ยงพังinline — พยายาม inline func เล็กๆ ที่มี //go:fix inlineของใหม่ 1.26-1.27 ที่ต้องรู้ชื่อ (เอาไว้ปิดของใหม่ชั่วคราวตอนไล่บั๊ก):
GODEBUG=tlssecpmlkem=0 # ปิด TLS hybrid กันควอนตัม กลับแบบเก่า (เจอ server เก่า)
GODEBUG=urlstrictcolons=0 # กลับไป parse URL แบบหยวนๆ (1.26 เข้มขึ้น)
GODEBUG=gctrace=1 # ดู GC ทำงาน (Green Tea 1.26 หยุดสั้นลง)
GOEXPERIMENT=norandomizedheapbase64 # ปิดสุ่ม heap (สาย cgo เท่านั้น)เช็ก env:
อ้างอิง: Go 1.26 blog (go fix rewrite), Go 1.27 blog (new modernizers, doc@version, tidy), Release History 1.27.1
github.com/ทีม/โปรเจกต์) ย้ายทีหลังปวดหัวgo mod tidy ทุกครั้งก่อน commit + ส่ง go.sum ขึ้น git ด้วยreplace แค่ตอน dev อย่าลืมเอาออกก่อน releaseGOTOOLCHAIN ให้ทีมใช้เวอร์ชันเดียวกันgo vet ./... + go fix ./... ก่อน push ทุกครั้ง