บันทึกการอัปเดต Go
เวอร์ชันบำรุงรักษา:
- go1.25 เผยแพร่ครั้งแรก: 2025-08-12 อัปเดตล่าสุด: go1.25.0 (2025-08-12)
- go1.24 เผยแพร่ครั้งแรก: 2025-02-11 อัปเดตล่าสุด: go1.24.6 (2024-08-06)
บันทึกการอัปเดตอย่างเป็นทางการของภาษา Go: Release History - The Go Programming Language
Go อย่างเป็นทางการใช้การกำหนดเวอร์ชันแบบ Semantic Versioning รูปแบบ vMajor.Minor.Patch (ดู Semantic Versioning) การอัปเดตเวอร์ชันหลักหมายถึงมีการเปลี่ยนแปลงที่ทำลายความเข้ากันได้ (Breaking Change) ซึ่งไม่สามารถเข้ากันได้กับเวอร์ชันก่อนหน้า การอัปเดตเวอร์ชันรองหมายถึงมีการเพิ่มฟีเจอร์ใหม่และยังคงรักษาความเข้ากันได้ การอัปเดตเวอร์ชันแพตช์หมายถึงมีการแก้ไขปัญหาและยังคงรักษาความเข้ากันได้
ทีม Go เผยแพร่เวอร์ชันรองทุก ๆ หกเดือน และมีเพียงสองเวอร์ชันรองล่าสุดเท่านั้นที่ได้รับการบำรุงรักษาในระยะยาว เป็นเวลาหกเดือน เนื่องจากทุกการอัปเดตของ Go ยังคงรักษาความเข้ากันได้สูง แนะนำให้อัปเดต Go เป็นเวอร์ชันล่าสุดทันทีหลังจากเวอร์ชันใหม่มีความเสถียร
Go2.0 มีการเสนอร่างครั้งแรกเมื่อวันที่ 19 พฤศจิกายน 2018 ในขณะนั้นยังเป็นเวอร์ชัน go1.13 หลังจากห้าปี เวอร์ชันได้พัฒนาไปถึง go1.21 แนวคิดต่าง ๆ ของ Go2.0 ได้ถูกนำไปใช้ในการอัปเดตแบบเพิ่มทีละน้อยใน Go1.0 ผู้ร่วมก่อตั้งคนหนึ่งเคยระบุอย่างชัดเจนว่าอาจไม่มี Go2.0 ในอนาคต และ Go จะยังคงมุ่งมั่นที่จะรักษาความเข้ากันได้กับเวอร์ชันก่อนหน้า (ดู Go 1 and the Future of Go Programs)
คำแนะนำ
หน้านี้เป็นเพียงการนำบันทึกทางการมาไว้ที่นี่อย่างง่าย ไม่ได้มีการอัปเดตเป็นประจำ หากต้องการรับข้อมูลล่าสุดโปรดไปที่เว็บไซต์ทางการ
1.25
เผยแพร่ครั้งแรก: 2025-08-12
อัปเดตล่าสุด: go1.25.0 (2025-08-12)
สามารถดูบันทึกการอัปเดตโดยละเอียดของเวอร์ชัน go1.25 ได้ที่ Go 1.25 Release Notes และสามารถดูเวอร์ชันแพตช์ทั้งหมดที่เผยแพร่ในช่วงการบำรุงรักษาได้ที่ Go1.25 - Release Patch
ระดับภาษา
- ลบแนวคิด core type ออกจาก generics ดูบทความทางการ Goodbye core types
ไลบรารีมาตรฐาน
- เพิ่ม
test/synctestใช้สำหรับทดสอบโค้ดแบบ concurrent - เพิ่มไลบรารีทดลอง
encoding/json/v2ซึ่งประกอบด้วย:encoding/json/v2ความเร็วในการ deserialize เพิ่มขึ้น 2-10 เท่าเมื่อเทียบกับ v1 ดูการทดสอบประสิทธิภาพที่ go-json-experiment/jsonbenchencoding/json/jsontextให้ความสามารถในการโต้ตอบระดับต่ำกับสตริง json
เครื่องมือ
- การเผยแพร่ Go ในอนาคตจะรวมไบนารีเครื่องมือที่สร้างไว้ล่วงหน้าจำนวนเล็กน้อย
- go mod เพิ่มคำสั่ง
ignoreใช้สำหรับระบุโฟลเดอร์ที่คำสั่ง go ควรละเว้น go doc -httpสามารถเริ่มต้น http server ในท้องถิ่นเพื่อดูเอกสารโค้ด- go vet เพิ่มตัววิเคราะห์
waitgroupและhostport - เมื่อคำสั่ง go อัปเดตเวอร์ชัน go ใน
go.modหรือgo.workจะไม่เพิ่มเวอร์ชัน go toolchain ที่ระบุอีกต่อไป
รันไทม์
GOMAXPROCS จะรับรู้ข้อจำกัด CPU ของคอนเทนเนอร์ในสภาพแวดล้อมคอนเทนเนอร์
GC ทดลองรุ่นใหม่
greenteagcหน่วยการจัดตารางพื้นฐานของ GC เปลี่ยนจาก object เป็น memory spanเมื่อ panic ไม่ถูกจับ จะไม่พิมพ์ซ้ำอีกต่อไป
panic: PANIC [recovered] panic: PANICเปลี่ยนเป็น
panic: PANIC [recovered, repanicked]เพิ่ม
runtime/trace.FlightRecorderสามารถจับข้อมูลการดำเนินการรันไทม์อย่างต่อเนื่องด้วยวิธีที่เบากว่า
คอมไพเลอร์
แก้ไขบักการตรวจสอบ null pointer ล่าช้า (ล่าช้าไปจนถึงหลังการตรวจสอบข้อผิดพลาด) ของ 1.21 โค้ดที่มีปัญหานี้สามารถทำงานได้ปกติในเวอร์ชันก่อน 1.25
gopackage main import "os" func main() { f, err := os.Open("nonExistentFile") name := f.Name() if err != nil { println("should panic") // ก่อน 1.25 จะพิมพ์บรรทัดนี้ return } println(name) }คอมไพเลอร์จะสำรองหน่วยความจำสำรองเพิ่มเติมสำหรับ slice ที่อยู่บนสแต็กเพื่อปรับปรุงประสิทธิภาพ
รองรับการสร้างข้อมูลดีบัก DWARF5
1.24
เผยแพร่ครั้งแรก: 2025-02-11
อัปเดตล่าสุด: go1.24.6 (2025-08-06)
สามารถดูบันทึกการอัปเดตโดยละเอียดของเวอร์ชัน go1.24 ได้ที่ Go 1.24 Release Notes และสามารถดูเวอร์ชันแพตช์ทั้งหมดที่เผยแพร่ในช่วงการบำรุงรักษาได้ที่ Go1.24 - Release Patch
ระดับภาษา
ชื่อเล่นประเภท generics อนุญาตให้สร้างชื่อเล่นสำหรับประเภท generics ซึ่งมีประโยชน์มากเมื่ออ้างอิงถึงประเภท generics ที่กำหนดโดยบุคคลที่สาม เช่น
goimport ( "other" ) type MyQuque[T any] = other.Queue[T]
ไลบรารีมาตรฐาน
- เพิ่มแพ็กเกจ
weak: ให้ weak pointers อนุญาตให้วัตถุถูกอ้างอิงโดยไม่เพิ่มจำนวนการอ้างอิง ป้องกันการรั่วไหลของหน่วยความจำที่เกิดจากแคช ต้องตรวจสอบว่า pointer เป็นnilก่อนใช้งาน - ข้อจำกัดการเข้าถึงระบบไฟล์: แนะนำประเภท
os.Rootจำกัดการดำเนินการไฟล์ภายในไดเรกทอรีเฉพาะ เพิ่มความปลอดภัย - รองรับ cryptography และ hashing: เพิ่มแพ็กเกจ
crypto/mlkem,crypto/hkdf,crypto/pbkdf2และcrypto/sha3ปรับปรุงประสิทธิภาพอัลกอริทึมการเข้ารหัสที่มีอยู่ - เพิ่มฟังก์ชันการทดสอบประสิทธิภาพ
testing.B.Loopเพื่อทำการทดสอบลูปได้ดีขึ้น encoding/json: เพิ่มแท็กomitzeroรองรับกรองค่าศูนย์ตามเมธอดIsZero()stringsและbytes: เพิ่มฟังก์ชัน iterator (เช่นLines,SplitSeq,FieldsSeq)
รันไทม์
- ปรับปรุง map ในตัวใหม่โดยใช้ Swiss Tables ความเร็วในการเข้าถึง map ขนาดใหญ่เพิ่มขึ้น 30% ความเร็วในการวนซ้ำเพิ่มขึ้น 10%-60%
sync.Mapใช้ concurrent hash trie (hash-trie) เพื่อปรับปรุงประสิทธิภาพ โดยเฉพาะในกรณีที่มีการเขียนพร้อมกัน- mutex ภายในรันไทม์ใช้ spinbit ใหม่ ลดการแข่งขันของ lock เพิ่มประสิทธิภาพในสถานการณ์ concurrent สูง
- ปรับปรุงกลยุทธ์การจัดสรรวัตถุขนาดเล็ก ลดความแตกแยกของหน่วยความจำและเวลาหยุด GC
- เพิ่ม
runtime.AddCleanupแทนที่runtime.SetFinalizerรองรับลงทะเบียนฟังก์ชัน cleanup หลายฟังก์ชันสำหรับวัตถุและดำเนินการตามลำดับใน goroutine แยก
Cgo
- รองรับคำอธิบายประกอบ
#cgo noescapeและ#cgo nocallbackประกาศว่าฟังก์ชัน C ไม่หลุดหน่วยความจำและไม่เรียกกลับฟังก์ชัน Go เพิ่มประสิทธิภาพรันไทม์ - Cgo จะปฏิเสธการคอมไพล์การเรียกฟังก์ชัน C ที่มีคำประกาศที่ไม่เข้ากันได้หลายรายการ ตรวจสอบคำประกาศฟังก์ชัน C ที่ไม่เข้ากันได้ข้ามไฟล์อย่างเข้มงวด (เช่น
void f(int)และvoid f(double)) ป้องกันการสร้างลำดับการเรียกที่ผิดพลาด
เครื่องมือ
- การจัดการการพึ่งพาเครื่องมือ: ติดตามการพึ่งพาเครื่องมือผ่านคำสั่ง tool ของ go.mod แทนที่แผนการนำเข้าว่าง tools.go แบบดั้งเดิม
- เอาต์พุตที่มีโครงสร้าง: go build และ go test รองรับแฟลก -json เอาต์พุตผลการสร้างและการทดสอบในรูปแบบ JSON
- การปรับปรุงการคอมไพล์และการลิงก์: คอมไพเลอร์สร้างโค้ดที่มีประสิทธิภาพมากขึ้น ลิงก์เกอร์สร้าง GNU Build ID (แพลตฟอร์ม ELF) และ UUID (macOS) โดยค่าเริ่มต้น
- ห้ามข้ามข้อจำกัดการกำหนดเมธอดสำหรับประเภทที่สร้างโดย CGO ผ่านชื่อเล่น
go buildฝังข้อมูลระบบควบคุมเวอร์ชันลงในไฟล์ไบนารีโดยอัตโนมัติ (รองรับ-buildvcs=falseเพื่อปิดใช้งาน)- ตัวแปรสภาพแวดล้อม
GOAUTHรองรับ authentication สำหรับโมดูลส่วนตัว go.modรองรับคำสั่งtoolเพื่อจัดการการพึ่งพาที่รันได้ แทนที่การนำเข้าว่างtools.go- เพิ่มพารามิเตอร์
go get -toolและคำสั่งgo install toolเพื่อจัดการการพึ่งพาเครื่องมือโมดูล - แคชการสร้างรองรับแคชไบนารีสำหรับ
go runและgo tool objdumpรองรับ disassembly สำหรับ LoongArch, RISC-V, S390Xvetเพิ่มตัววิเคราะห์tests(ตรวจจับข้อผิดพลาดลายเซ็นฟังก์ชันทดสอบ)
ความเข้ากันได้ของแพลตฟอร์ม
- macOS: Go 1.24 จะเป็นเวอร์ชันสุดท้ายที่รองรับ macOS 11 Big Sur Go 1.25 จะต้องการ macOS 12+
- Windows: ทำเครื่องหมายสถาปัตยกรรม ARM 32 บิตว่าไม่สมบูรณ์ (GOOS=windows GOARCH=arm) ดู issue #70705
- Linux: อัปเดตข้อกำหนดเวอร์ชันเคอร์เนลต่ำสุดเป็น 3.2
- ต้องการ Go 1.22.6+ เป็นเครื่องมือ bootstrap
เลิกใช้
math/rand.Seed()ใช้งานไม่ได้โดยสมบูรณ์ ต้องใช้GODEBUG=randseednop=0เพื่อคืนค่าพฤติกรรมเก่าruntime.GOROOT()ถูกทำเครื่องหมายว่าเลิกใช้ แนะนำให้ใช้go env GOROOTเพื่อรับพาธ
1.23
เผยแพร่ครั้งแรก: 2024-08-13
อัปเดตล่าสุด: go1.23.4 (2024-12-03)
สามารถดูบันทึกการอัปเดตโดยละเอียดของเวอร์ชัน go1.23 ได้ที่ Go 1.23 Release Notes และสามารถดูเวอร์ชันแพตช์ทั้งหมดที่เผยแพร่ในช่วงการบำรุงรักษาได้ที่ Go1.23 - Release Patch
ระดับภาษา
for range รองรับฟังก์ชัน iterator ดูรายละเอียดเพิ่มเติมที่ Go Wiki: Rangefunc Experiment
gofunc Upper(s []string) iter.Seq2[int, string] { return func(yield func(int, string) bool) { for i, s1 := range s { if !yield(i, strings.ToUpper(s1)) { return } } return } } func main() { sl := []string{"hello", "world", "golang"} for i, s := range Upper(sl) { fmt.Printf("%d : %s\n", i, s) } } //0 : HELLO //1 : WORLD //2 : GOLANGนี่เป็นฟีเจอร์ที่มีประโยชน์มาก โดยทั่วไปจะใช้ร่วมกับ generics
ไลบรารีมาตรฐาน
เพิ่มไลบรารีมาตรฐาน
iterซึ่งกำหนดและอธิบายรายละเอียดเกี่ยวกับ iteratorไลบรารี
mapsเพิ่มฟังก์ชัน iterator หลายฟังก์ชันไลบรารี
slicesเพิ่มฟังก์ชัน iterator หลายฟังก์ชันเพิ่มไลบรารี
structsให้ความสามารถในการแก้ไขคุณสมบัติของ struct เช่น การจัดวางหน่วยความจำgotype Person struct { Name string Age int _ structs.HostLayout }ปรับปรุงการใช้งานไลบรารีมาตรฐาน
time
Linker
จัดการการใช้งาน
//go:linknameที่ไม่เหมาะสม สำหรับ API ที่ถูกอ้างอิงบ่อย ๆ อนุญาตให้มีอยู่ชั่วคราว เช่นruntime.memhash64,runtime.nanotimeเป็นต้น หลังจากนั้นจะไม่อนุญาตการอ้างอิงใหม่อื่น ๆgo//go:linkname gcinit runtime.gcinit func gcinit() func main() { gcinit() }โค้ดแบบนี้จะไม่สามารถคอมไพล์ได้
link: main: invalid reference to runtime.gcinit
เครื่องมือ
- เพิ่มคำสั่ง
go telemetryสำหรับการจัดการข้อมูล telemetry
1.22
เผยแพร่ครั้งแรก: 2024-02-06
อัปเดตล่าสุด: go1.22.6 (released 2024-08-06)
สามารถดูบันทึกการอัปเดตโดยละเอียดของเวอร์ชัน go1.22 ได้ที่ Go 1.22 Release Notes และสามารถดูเวอร์ชันแพตช์ทั้งหมดที่เผยแพร่ในช่วงการบำรุงรักษาได้ที่ Go1.22 - Release Patch
ระดับภาษา
แก้ไขปัญหาตัวแปรลูปของภาษา go
gofunc main() { var wg sync.WaitGroup const n = 10 wg.Add(n) for i := 0; i < n; i++ { go func() { fmt.Println(i) wg.Done() }() } wg.Wait() }โค้ดนี้ก่อน 1.22 จะพิมพ์ 9 จำนวน 10 ครั้ง หลัง 1.22 จะพิมพ์ 0 ถึง 9 อย่างถูกต้อง
for rangeตอนนี้รองรับการวนซ้ำประเภทตัวเลข ดังนี้gofor i := range 10 { fmt.Println(i) }
ไลบรารีมาตรฐาน
เพิ่มประสิทธิภาพการ routing ของไลบรารีมาตรฐาน
net/httpdatabase/sqlเพิ่มประเภท genericssql.Nullgotype Null[T any] struct { V T Valid bool }ใช้งานดังนี้
gotype Person struct { Name sql.Null[string] Age sql.Null[int] }
1.21
เผยแพร่ครั้งแรก: 2023-08-08
อัปเดตล่าสุด: go1.21.13 (released 2024-08-06)
สามารถดูบันทึกการอัปเดตโดยละเอียดของเวอร์ชัน go1.21 ได้ที่ Go 1.21 Release Notes และสามารถดูเวอร์ชันแพตช์ทั้งหมดที่เผยแพร่ในช่วงการบำรุงรักษาได้ที่ Go1.21 - Release Patch
ระดับภาษา
เพิ่มฟังก์ชัน built-in สองฟังก์ชัน
min,maxใช้สำหรับคำนวณค่าสูงสุดและค่าต่ำสุดเพิ่มฟังก์ชัน built-in
clearใช้สำหรับล้าง map และ sliceอัปเดตลำดับการเริ่มต้น
package- เรียงลำดับแพ็กเกจทั้งหมดตามพาธการนำเข้า
- ทำซ้ำจนกว่ารายการแพ็กเกจจะว่างเปล่า
- ค้นหาแพ็กเกจแรกที่มีการนำเข้าทั้งหมดได้รับการเริ่มต้นแล้วในรายการ
- เริ่มต้นแพ็กเกจนั้นและลบออกจากรายการ
เพิ่มและปรับปรุงความสามารถและความแม่นยำของการอนุมานประเภท ส่วนใหญ่เกี่ยวข้องกับ generics
เปิดตัวเวอร์ชันพรีวิวของการปรับปรุงตัวแปรลูป
for rangeนี่เป็นปัญหาที่รบกวนนักพัฒนา Go มานานเกือบสิบปี ในที่สุดทางการก็จะแก้ไข ดูรายละเอียดเพิ่มเติมที่: LoopvarExperiment · golang/go Wiki (github.com) และ Proposal: Less Error-Prone Loop Variable Scoping (googlesource.com)รับประกันว่าค่าที่ส่งคืนของ
recoverจะไม่เป็นnilหากพารามิเตอร์เป็นnilเมื่อเรียกpanicจะทำให้เกิดpanicอีกครั้ง ส่งคืน*runtime.PanicNilErrorเพื่อความเข้ากันได้ ตั้งค่าGODEBUG=panicnil=1เมื่อคอมไพล์เพื่ออนุญาตให้ส่งnilไปยังpanic
ไลบรารีมาตรฐาน
- เพิ่มไลบรารี
log/slogให้ไลบรารี log แบบมีโครงสร้างมาตรฐาน - เพิ่มไลบรารี
testing/slogtestใช้สำหรับตรวจสอบการใช้งานslog.Handler - เพิ่มไลบรารี
slicesให้ฟังก์ชัน generics หลายฟังก์ชันสำหรับจัดการ slice - เพิ่มไลบรารี
mapsให้ฟังก์ชัน generics หลายฟังก์ชันสำหรับจัดการ map - เพิ่มไลบรารี
cmpใช้สำหรับเปรียบเทียบประเภทที่เรียงลำดับได้
อื่น ๆ
- go1.21.0 อย่างน้อยบนระบบ windows ต้องการ win10 หรือ Windows Server 2016 ขึ้นไปจึงจะรันได้ เวอร์ชันก่อนหน้าไม่รองรับอีกต่อไป
- go1.21.0 อย่างน้อยต้องการ macOS 10.15 Catalina หรือเวอร์ชันที่ใหม่กว่าจึงจะรันได้ เวอร์ชันก่อนหน้าไม่รองรับอีกต่อไป
- เพิ่ม WebAssembly System Interface แบบทดลอง Go ยังคงสำรวจ WASM อย่างต่อเนื่อง
- ใน 1.20 ยังเป็นลักษณะทดลอง (Profile-guide optimization) PGO (ดู Profile-guided optimization - The Go Programming Language) เวอร์ชัน 1.21 เปิดใช้งานอย่างเป็นทางการ หากมีไฟล์
default.pgoในแพ็กเกจ main จะเปิดใช้งานฟังก์ชันนี้ หลังจากเปิดใช้งานประสิทธิภาพอาจเพิ่มขึ้น 2%-7% - เมื่อพิมพ์ call stack รันไทม์ที่ลึกมาก จากเดิมพิมพ์เฉพาะเฟรมแรกหนึ่งร้อยเฟรม ตอนนี้พิมพ์เฟรมแรก 50 เฟรมและเฟรมสุดท้าย 50 เฟรม
- ปรับปรุงประสิทธิภาพการเรียก CGO บนแพลตฟอร์ม Unix จาก 1-3 ไมโครวินาทีปรับปรุงเป็น 100-200 นาโนวินาทีในปัจจุบัน
- ในเวอร์ชัน 1.21 ความเร็วในการคอมไพล์เพิ่มขึ้นเกือบ 6% ซึ่งส่วนใหญ่เป็นผลมาจากการที่คอมไพเลอร์ใช้ PGO ในการสร้าง
1.20
เผยแพร่ครั้งแรก: 2023-02-01
อัปเดตล่าสุด: go1.20.14 (released 2024-02-06)
สามารถดูบันทึกการอัปเดตโดยละเอียดของเวอร์ชัน go1.20 ได้ที่ Go 1.20 Release Notes และสามารถดูเวอร์ชันแพตช์ทั้งหมดที่เผยแพร่ในช่วงการบำรุงรักษาได้ที่ Go1.20 - Release Patch
ระดับภาษา
- เมื่อแปลงประเภท slice เป็น array เดิมต้อง dereference pointer array
*(*[4byte])(x)เพื่อหลีกเลี่ยงการใช้ underlying array เดียวกันกับการดำเนินการ slice ตอนนี้สามารถเขียนแบบนี้ได้โดยตรง[4]byte(x) unsafeเพิ่มฟังก์ชันSliceData,String,StringDataใช้สำหรับสร้างและจัดการ slice และค่าสตริง
ไลบรารีมาตรฐาน
- เพิ่มไลบรารี
crypto/ecdhให้การรองรับ ECDH (Elliptic Curve Diffie-Hellman วิธีการเข้ารหัสแบบอสมมาตร) - go1.20 ขยายการรองรับการห่อหุ้ม error อนุญาตให้ error ห่อหุ้ม error หลายตัว
- เพิ่ม
net/http.ResponseControllerให้วิธีการเพิ่ม handler controls แต่ละตัวที่ชัดเจนและค้นพบได้ง่ายขึ้น httputil.ReverseProxyมีฟังก์ชัน Rewrite Hook ใหม่ใช้แทน Director Hook ก่อนหน้า
อื่น ๆ
- go1.20 เป็นเวอร์ชันสุดท้ายที่รองรับ win7, 8, Server2008 และ Server2012 ในเวอร์ชันอนาคตจะไม่รองรับอีกต่อไป
- go1.20 เป็นเวอร์ชันสุดท้ายที่รองรับ macOS 10.13 หรือ 10.14 ในเวอร์ชันอนาคตจะไม่รองรับอีกต่อไป
- ในเวอร์ชัน 1.18 และ 1.19 เนื่องจากมีการเพิ่ม generics ความเร็วในการคอมไพล์ลดลงเมื่อเทียบกับ 1.17 go1.20 ความเร็วในการคอมไพล์จะเพิ่มขึ้นประมาณ 10%
- เผยแพร่เวอร์ชันพรีวิวของ PGO (Profile-guided optimization) นี่เป็นเทคนิคการปรับปรุงคอมไพเลอร์ในโลกคอมพิวเตอร์ที่สามารถเพิ่มประสิทธิภาพรันไทม์
- ใน go1.20 บนระบบที่ไม่มี C toolchains คำสั่ง go จะปิดใช้งาน cgo
- รองรับรวบรวมไฟล์ความครอบคลุมของโค้ดโปรแกรม ดู Coverage profiling support for integration tests - The Go Programming Language
- ปรับปรุง GC เพิ่มความเสถียร ลดการใช้หน่วยความจำ เพิ่มประสิทธิภาพ CPU โดยรวม 2%
1.19
เผยแพร่ครั้งแรก: 2022-08-02
อัปเดตล่าสุด: go1.19.13 (released 2023-09-06)
สามารถดูบันทึกการอัปเดตโดยละเอียดของเวอร์ชัน go1.19 ได้ที่ Go 1.19 Release Notes และสามารถดูเวอร์ชันแพตช์ทั้งหมดที่เผยแพร่ในช่วงการบำรุงรักษาได้ที่ Go1.19 - Release Patch
การเปลี่ยนแปลงสำคัญ
โมเดลหน่วยความจำปรับให้เข้ากับ c/c++ คล้ายกับ TcMollcate
แพ็กเกจ
sync/atomicตอนนี้ให้ประเภทเพิ่มเติมสำหรับใช้งานรองรับการใช้ฟังก์ชัน
runtime/debug.SetMemoryLimitเพื่อจำกัดหน่วยความจำ go อย่างอ่อน ในบางกรณีสามารถให้ประสิทธิภาพการใช้หน่วยความจำรันไทม์ตอนนี้จะเลือกขนาดที่เหมาะสมสำหรับการเริ่มต้นพื้นที่หน่วยความจำสแต็กตามการใช้งานสแต็กเฉลี่ยของ goroutine ซึ่งสามารถหลีกเลี่ยงการขยายและหดสแต็กบ่อยครั้ง
1.18
เผยแพร่ครั้งแรก: 2022-03-15
อัปเดตล่าสุด: go1.18.10 (released 2023-01-10)
สามารถดูบันทึกการอัปเดตโดยละเอียดของเวอร์ชัน go1.18 ได้ที่ Go 1.18 Release Notes และสามารถดูเวอร์ชันแพตช์ทั้งหมดที่เผยแพร่ในช่วงการบำรุงรักษาได้ที่ Go1.18 - Release Patch
ระดับภาษา
- การอัปเดตครั้งใหญ่ รองรับ generics, type set interface, ข้อจำกัดประเภทพารามิเตอร์
อื่น ๆ
- ปรับปรุงพฤติกรรมการขยายขนาดของฟังก์ชัน
append - เพิ่มแพ็กเกจ
debug/buildinfoสามารถรับข้อมูลการสร้างโปรแกรม go ได้ในรันไทม์ - gofmt ตอนนี้สามารถจัดรูปแบบไฟล์ซอร์สแบบ concurrent
1.17
เผยแพร่ครั้งแรก: 2021-08-16
อัปเดตล่าสุด: go1.17.13 (released 2022-08-01)
สามารถดูบันทึกการอัปเดตโดยละเอียดของเวอร์ชัน go1.17 ได้ที่ Go 1.17 Release Notes และสามารถดูเวอร์ชันแพตช์ทั้งหมดที่เผยแพร่ในช่วงการบำรุงรักษาได้ที่ Go1.17 - Release Patch
ระดับภาษา
- เพิ่มฟังก์ชัน
unsafe.Addรองรับ pointer arithmetic - เพิ่มฟังก์ชัน
unsafe.Sliceรองรับรับ pointer ของ underlying array ของ slice - slice ตอนนี้สามารถแปลงเป็นประเภท pointer array ได้
[]T => *[N]Tภายใต้เงื่อนไขที่ความยาวของ array ต้องน้อยกว่าหรือเท่ากับความยาวของ slice
1.16
เผยแพร่ครั้งแรก: 2021-02-16
อัปเดตล่าสุด: go1.16.15 (released 2022-03-03)
สามารถดูบันทึกการอัปเดตโดยละเอียดของเวอร์ชัน go1.16 ได้ที่ Go 1.16 Release Notes และสามารถดูเวอร์ชันแพตช์ทั้งหมดที่เผยแพร่ในช่วงการบำรุงรักษาได้ที่ Go1.16 - Release Patch
การเปลี่ยนแปลงสำคัญ
เวอร์ชันนี้ไม่มีการเปลี่ยนแปลงไวยากรณ์ที่สำคัญ การเปลี่ยนแปลงที่สำคัญมีดังนี้
- เลิกใช้แพ็กเกจ
ioutil - รองรับฝังไฟล์สถิตลงในโปรแกรมผ่านคำสั่ง
//go:embed - เพิ่มประเภท
io/fs.Fsทำให้มีการ抽象ระบบไฟล์ที่ดีขึ้น
1.15
เผยแพร่ครั้งแรก: 2020-08-11
อัปเดตล่าสุด: go1.15.15 (released 2021-08-05)
สามารถดูบันทึกการอัปเดตโดยละเอียดของเวอร์ชัน go1.15 ได้ที่ Go 1.15 Release Notes และสามารถดูเวอร์ชันแพตช์ทั้งหมดที่เผยแพร่ในช่วงการบำรุงรักษาได้ที่ Go1.15 - Release Patch
การเปลี่ยนแปลงสำคัญ
เวอร์ชันนี้ไม่มีการเปลี่ยนแปลงไวยากรณ์ที่สำคัญ การเปลี่ยนแปลงที่สำคัญมีดังนี้
ปรับปรุงประสิทธิภาพการจัดสรรวัตถุขนาดเล็ก
เพิ่มแพ็กเกจ
time/tzdataรองรับฝังฐานข้อมูลเขตเวลาเข้ากับโปรแกรมผ่านวิธีด้านล่าง เนื่องจากมีหลายระบบที่ไม่มีข้อมูลเขตเวลาในท้องถิ่นgoimport _ "time/tzdata"ปรับปรุงลิงก์เกอร์ go อย่างมีนัยสำคัญ ลดการใช้ทรัพยากรและเพิ่มความแข็งแกร่งของโค้ด
ในบางกรณี อนุญาตให้แปลง
unsafe.Pointerเป็นuintptr
1.14
เผยแพร่ครั้งแรก: 2020-02-25
อัปเดตล่าสุด: go1.14.15 (released 2021-02-04)
สามารถดูบันทึกการอัปเดตโดยละเอียดของเวอร์ชัน go1.14 ได้ที่ Go 1.14 Release Notes และสามารถดูเวอร์ชันแพตช์ทั้งหมดที่เผยแพร่ในช่วงการบำรุงรักษาได้ที่ Go1.14 - Release Patch
ระดับภาษา
รองรับ type set interface แบบซ้อนกัน
gotype MyIO interface { io.WriteCloser }
อื่น ๆ
- 引用การปรับปรุง open coding ค่าใช้จ่ายการเรียก
deferลดลงเกือบเท่ากับการเรียก native - รองรับ asynchronous preemption ระหว่าง goroutine ลูปที่ไม่มีการเรียกฟังก์ชันจะไม่บล็อกการ schedule อีกต่อไป
1.13
เผยแพร่ครั้งแรก: 2019-09-03
อัปเดตล่าสุด: go1.13.15 (released 2020-08-06)
สามารถดูบันทึกการอัปเดตโดยละเอียดของเวอร์ชัน go1.13 ได้ที่ Go 1.13 Release Notes และสามารถดูเวอร์ชันแพตช์ทั้งหมดที่เผยแพร่ในช่วงการบำรุงรักษาได้ที่ Go1.13 - Release Patch
ระดับภาษา
รองรับ numeric literal ที่ทันสมัยกว่า เช่น
go0b101 // ไบนารี 0o10 // ออกทอล 0x1B // เฮกซาเดซิมอลรองรับ underscore เพื่อแบ่งตัวเลขเพื่อให้สามารถอ่านได้ดีขึ้น
go10_000ตอนนี้ suffix
iของจำนวนเชิงซ้อนสามารถเป็นเลขไบนารี ออกทอล เฮกซาเดซิมอล หรือเลขทศนิยมใดก็ได้
อื่น ๆ
- ค่าเริ่มต้นของ
GO111MODULEคือauto - เพิ่มตัวแปรสภาพแวดล้อม
GOPRIVATEเพื่อรองรับ source dependency ส่วนตัว - เพิ่มตัวแปรสภาพแวดล้อม
GOSUMDB - ค่าใช้จ่ายการใช้งาน
deferลดลง 30% - เมื่อเกิดดัชนีเกินขอบเขต
panicตอนนี้จะพิมพ์ข้อมูลดัชนี - go จะตรวจสอบเวอร์ชันแบบ semantic เมื่อดาวน์โหลด dependency
1.12
เผยแพร่ครั้งแรก: 2019-02-25
อัปเดตล่าสุด: go1.12.17 (released 2020-02-12)
สามารถดูบันทึกการอัปเดตโดยละเอียดของเวอร์ชัน go1.12 ได้ที่ Go 1.12 Release Notes และสามารถดูเวอร์ชันแพตช์ทั้งหมดที่เผยแพร่ในช่วงการบำรุงรักษาได้ที่ Go1.12 - Release Patch
การเปลี่ยนแปลงสำคัญ
เวอร์ชันนี้ไม่มีการเปลี่ยนแปลงไวยากรณ์ที่สำคัญ การเปลี่ยนแปลงที่สำคัญมีดังนี้
- เพิ่มประสิทธิภาพการสแกน heap อย่างมีนัยสำคัญ
- รันไทม์จะคืนหน่วยความจำที่ขอไปยังระบบปฏิบัติการอย่างกระตือรือร้นมากขึ้น
- คำสั่งสำหรับดาวน์โหลด go dependency ตอนนี้สามารถใช้งานได้อย่างปลอดภัยแบบ concurrent
1.11
เผยแพร่ครั้งแรก: 2018-08-24
อัปเดตล่าสุด: go1.11.13 (released 2019-08-13)
สามารถดูบันทึกการอัปเดตโดยละเอียดของเวอร์ชัน go1.11 ได้ที่ Go 1.11 Release Notes และสามารถดูเวอร์ชันแพตช์ทั้งหมดที่เผยแพร่ในช่วงการบำรุงรักษาได้ที่ Go1.11 - Release Patch
การเปลี่ยนแปลงสำคัญ
เวอร์ชันนี้ไม่มีการเปลี่ยนแปลงไวยากรณ์ที่สำคัญ การเปลี่ยนแปลงที่สำคัญมีดังนี้
- GoMod เผยแพร่ครั้งแรก สถานการณ์การจัดการ dependency ที่สับสนก่อนหน้านี้น่าจะสิ้นสุดลง
- รองรับ WASM แบบทดลองครั้งแรก
- รันไทม์ใช้ sparse heap layout ไม่จำกัดขนาด heap อีกต่อไป
1.10
เผยแพร่ครั้งแรก: 2018-02-16
อัปเดตล่าสุด: go1.10.8 (released 2019-01-23)
สามารถดูบันทึกการอัปเดตโดยละเอียดของเวอร์ชัน go1.10 ได้ที่ Go 1.10 Release Notes และสามารถดูเวอร์ชันแพตช์ทั้งหมดที่เผยแพร่ในช่วงการบำรุงรักษาได้ที่ Go1.10 - Release Patch
การเปลี่ยนแปลงสำคัญ
เวอร์ชันนี้ไม่มีการเปลี่ยนแปลงไวยากรณ์ที่สำคัญ การเปลี่ยนแปลงที่สำคัญมีดังนี้
- คำสั่ง
go installตอนนี้ใช้สำหรับติดตั้งและคอมไพล์เครื่องมือ command line เท่านั้น ไม่ใช้สำหรับดาวน์โหลด dependency อีกต่อไป - คำสั่ง
go getตอนนี้ใช้สำหรับดาวน์โหลด source dependency - การทดสอบ go ตอนนี้จะแคชผลการทดสอบ และจะรัน
go vetโดยอัตโนมัติก่อนรัน - ลด latency ที่เกิดจาก GC ในขณะทำงานอย่างมีนัยสำคัญ
1.9
เผยแพร่ครั้งแรก: 2017-08-24
อัปเดตล่าสุด: go1.9.7 (released 2018-06-05)
สามารถดูบันทึกการอัปเดตโดยละเอียดของเวอร์ชัน go1.9 ได้ที่ Go 1.9 Release Notes และสามารถดูเวอร์ชันแพตช์ทั้งหมดที่เผยแพร่ในช่วงการบำรุงรักษาได้ที่ Go1.9 - Release Patch
ระดับภาษา
- รองรับ type alias
อื่น ๆ
- รองรับคอมไพล์แบบขนาน
- เพิ่ม
sync.Mapที่ปลอดภัยแบบ concurrent
1.8
เผยแพร่ครั้งแรก: 2017-02-16
อัปเดตล่าสุด: go1.8.7 (released 2018-02-07)
สามารถดูบันทึกการอัปเดตโดยละเอียดของเวอร์ชัน go1.8 ได้ที่ Go 1.8 Release Notes และสามารถดูเวอร์ชันแพตช์ทั้งหมดที่เผยแพร่ในช่วงการบำรุงรักษาได้ที่ Go1.8 - Release Patch
ระดับภาษา
เมื่อทำการแปลงประเภทระหว่างสอง struct จะละเว้นความแตกต่างของ struct tag
gofunc example() { type T1 struct { X int `json:"foo"` } type T2 struct { X int `json:"bar"` } var v1 T1 var v2 T2 v1 = T1(v2) // now legal }
อื่น ๆ
- เวลาหยุดที่เกิดจาก garbage collection ลดลงเหลือ 10 ไมโครวินาที ส่วนใหญ่ต่ำกว่า 100 ไมโครวินาที (จะเห็นว่าเกือบทุกเวอร์ชัน go พยายามปรับปรุง GC)
- ค่าใช้จ่ายการเรียก
deferลดลงเกือบครึ่งหนึ่ง - ค่าใช้จ่ายการเรียก c ของ go ลดลงเกือบครึ่งหนึ่ง
- ปรับปรุงการตรวจจับการใช้งาน map แบบ concurrent
1.7
เผยแพร่ครั้งแรก: 2016-08-15
อัปเดตล่าสุด: go1.7.6 (released 2017-05-23)
สามารถดูบันทึกการอัปเดตโดยละเอียดของเวอร์ชัน go1.7 ได้ที่ Go 1.7 Release Notes และสามารถดูเวอร์ชันแพตช์ทั้งหมดที่เผยแพร่ในช่วงการบำรุงรักษาได้ที่ Go1.7 - Release Patch
การเปลี่ยนแปลงสำคัญ
- เพิ่ม
golang.org/x/net/contextเข้าไลบรารีมาตรฐาน - เวลา gc สั้นลงอย่างมากเมื่อเทียบกับ 1.6
- แพ็กเกจ
testingรองรับ subtests
1.6
เผยแพร่ครั้งแรก: 2016-02-17
อัปเดตล่าสุด: go1.6.4 (released 2016-12-01)
สามารถดูบันทึกการอัปเดตโดยละเอียดของเวอร์ชัน go1.6 ได้ที่ Go 1.6 Release Notes และสามารถดูเวอร์ชันแพตช์ทั้งหมดที่เผยแพร่ในช่วงการบำรุงรักษาได้ที่ Go1.6 - Release Patch
การเปลี่ยนแปลงสำคัญ
เวอร์ชันนี้ไม่มีการเปลี่ยนแปลงไวยากรณ์ ด้านล่างคือการเปลี่ยนแปลงที่สำคัญ
- ตรวจจับการใช้งาน map แบบ concurrent หากตรวจพบว่า map กำลังถูกใช้งานพร้อมกันจะเกิด
fatal - เมื่อเกิด
panicจะพิมพ์เฉพาะ call stack ของ goroutine ที่กำลังรันอยู่ - รองรับ HTTP/2
1.5
เผยแพร่ครั้งแรก: 2015-08-19
อัปเดตล่าสุด: go1.5.4 (released 2016-04-12)
สามารถดูบันทึกการอัปเดตโดยละเอียดของเวอร์ชัน go1.5 ได้ที่ Go 1.5 Release Notes และสามารถดูเวอร์ชันแพตช์ทั้งหมดที่เผยแพร่ในช่วงการบำรุงรักษาได้ที่ Go1.5 - Release Patch
ระดับภาษา
เมื่อเริ่มต้นคีย์ของ map literal อนุญาตให้ละเว้นประเภทองค์ประกอบ
gom := map[Point]string{ Point{29.935523, 52.891566}: "Persepolis", Point{-25.352594, 131.034361}: "Uluru", Point{37.422455, -122.084306}: "Googleplex", } // ละเว้นประเภท m := map[Point]string{ {29.935523, 52.891566}: "Persepolis", {-25.352594, 131.034361}: "Uluru", {37.422455, -122.084306}: "Googleplex", }
อื่น ๆ
- รันไทม์และคอมไพเลอร์เขียนใหม่ด้วย go ทั้งหมด ไม่รวมโค้ด c ใด ๆ อีกต่อไป
- รองรับ garbage collection แบบ concurrent ลดเวลาหยุดของโปรแกรมอย่างมาก
- ค่าเริ่มต้นของ
GOMAXPROCSเปลี่ยนเป็นจำนวน logical core ของเครื่อง - ความหมายของแพ็กเกจ
internalสามารถใช้กับที่ใดก็ได้ ไม่จำกัดอยู่แค่แพ็กเกจซอร์สของ go อีกต่อไป - รองรับ vendor dependency management แบบทดลอง (ในที่สุดก็เริ่มจัดการส่วนการจัดการ dependency แล้ว)
1.4
เผยแพร่ครั้งแรก: 2014-12-10
อัปเดตล่าสุด: go1.4.3 (released 2015-09-22)
สามารถดูบันทึกการอัปเดตโดยละเอียดของเวอร์ชัน go1.4 ได้ที่ Go 1.4 Release Notes และสามารถดูเวอร์ชันแพตช์ทั้งหมดที่เผยแพร่ในช่วงการบำรุงรักษาได้ที่ Go1.4 - Release Patch
ระดับภาษา
ลูป
for rangeสามารถมีพารามิเตอร์การวนซ้ำหนึ่งตัว เช่นfor i := range x { ... }แต่ไม่สามารถไม่มีได้เลย
เมื่อเรียกเมธอดของประเภท double reference จะไม่ dereference โดยอัตโนมัติอีกต่อไป
gotype T int func (T) M() {} var x **T // ไม่ได้รับอนุญาต x.M()
อื่น ๆ
- ก่อน 1.4 รันไทม์ของ go เขียนด้วย c ตอนนี้เขียนด้วย go ทั้งหมด
- รองรับเปลี่ยนชื่อแพ็กเกจเป็น
internalเพื่อระบุว่าเนื้อหาทั้งหมดของแพ็กเกจนั้นเป็นส่วนตัวไม่สามารถ export ได้
1.3
เผยแพร่ครั้งแรก: 2014-06-18
อัปเดตล่าสุด: go1.3.3 (released 2014-09-30)
สามารถดูบันทึกการอัปเดตโดยละเอียดของเวอร์ชัน go1.3 ได้ที่ Go 1.3 Release Notes และสามารถดูเวอร์ชันแพตช์ทั้งหมดที่เผยแพร่ในช่วงการบำรุงรักษาได้ที่ Go1.3 - Release Patch
การเปลี่ยนแปลงสำคัญ
เวอร์ชันนี้ไม่มีการเปลี่ยนแปลงไวยากรณ์ การเปลี่ยนแปลงที่สำคัญมีดังนี้
- โมเดลสแต็ก goroutine เปลี่ยนจาก segmented stack เป็น continuous stack เพิ่มประสิทธิภาพการขยายสแต็ก
- เพิ่มความแม่นยำในการตัดสิน pointer ของ garbage collector
- เมื่อวนซ้ำใน map ความจุเล็ก ลำดับจะคาดเดาไม่ได้เช่นกัน
- เนื่องจากมีการปรับปรุงรันไทม์บางประการ ประสิทธิภาพของโปรแกรม go ในเวอร์ชันปัจจุบันจึงเพิ่มขึ้นอย่างมีนัยสำคัญ
1.2
เผยแพร่ครั้งแรก: 2013-12-01
อัปเดตล่าสุด: go1.2.2 (released 2014-05-05)
สามารถดูบันทึกการอัปเดตโดยละเอียดของเวอร์ชัน go1.2 ได้ที่ Go 1.2 Release Notes และสามารถดูเวอร์ชันแพตช์ทั้งหมดที่เผยแพร่ในช่วงการบำรุงรักษาได้ที่ Go1.2 - Release Patch
ระดับภาษา
การดำเนินการกับตัวแปรที่มีค่าเป็น
nilจะทำให้เกิดpanicเมื่อแบ่ง slice สามารถใช้พารามิเตอร์ที่สามเพื่อจำกัดความจุของ slice ที่ถูกแบ่งเพื่อใช้ slice อย่างปลอดภัยมากขึ้น
govar array [10]int slice := array[2:4:4]
อื่น ๆ
ขนาดหน่วยความจำขั้นต่ำของสแต็ก goroutine เพิ่มจาก 4KB เป็น 8KB
จำกัดจำนวนเธรดสูงสุดที่ 10000
Goroutine ที่รันเป็นเวลานานจะถูก preempt เมื่อเกิดการเรียกฟังก์ชัน (การแนะนำ cooperative preemption ครั้งแรก)
1.1
เผยแพร่ครั้งแรก: 2013-05-13
อัปเดตล่าสุด: go1.1.2 (released 2013-08-13)
สามารถดูบันทึกการอัปเดตโดยละเอียดของเวอร์ชัน go1.1 ได้ที่ Go 1.1 Release Notes และสามารถดูเวอร์ชันแพตช์ทั้งหมดที่เผยแพร่ในช่วงการบำรุงรักษาได้ที่ Go1.1 - Release Patch
ระดับภาษา
- การหารจำนวนด้วย 0 ก่อนหน้านี้จะเกิด
panicใน 1.1 จะไม่สามารถคอมไพล์ได้โดยตรง - เมธอดสามารถเป็นค่าได้
- แนะนำแนวคิด terminating statement กฎการ return ของฟังก์ชันผ่อนคลายมากขึ้น คำจำกัดความของ terminating statement - go-sepc
ด้านประสิทธิภาพ
- โปรแกรม go ที่คอมไพล์ด้วยเครื่องมือ go1.1 ประสิทธิภาพสามารถเพิ่มขึ้นประมาณ 30%-40%
อื่น ๆ:
- บนเครื่อง 64-bit ค่าสูงสุดของ heap memory เพิ่มเป็นหลายสิบ GB
- ปิดใช้งาน cgo โดยค่าเริ่มต้นเมื่อ cross compile
1.0
เผยแพร่ครั้งแรก: 2012-03-28
สามารถดูบันทึกการอัปเดตโดยละเอียดของเวอร์ชัน go1.0 ได้ที่ Go 1.0 Release Notes และสามารถดูเวอร์ชันแพตช์ทั้งหมดที่เผยแพร่ในช่วงการบำรุงรักษาได้ที่ Go1.0 - Release Patch
ระดับภาษา
เมื่อเทียบกับเวอร์ชันพรีวิว ไวยากรณ์มีสิ่งต่อไปนี้เพิ่มเข้ามา
เพิ่มฟังก์ชัน built-in
appendสำหรับเพิ่มองค์ประกอบใน sliceเพิ่มฟังก์ชัน built-in
closeสำหรับปิด channelความหมายแบบ compound เมื่อเริ่มต้นองค์ประกอบ slice, map, struct literal สามารถละเว้นประเภทได้ ดังนี้
go// ประกาศประเภท holiday1 := []Date{ Date{"Feb", 14}, Date{"Nov", 11}, Date{"Dec", 25}, } // ละเว้นประเภท holiday2 := []Date{ {"Feb", 14}, {"Nov", 11}, {"Dec", 25}, }Goroutine ที่ใช้ในฟังก์ชัน
initจะเริ่มต้นโดยตรง ไม่ต้องรอให้ทุกแพ็กเกจเริ่มต้นเสร็จเพิ่มประเภท
runeแสดงถึงอักขระ UTF-8 ตัวหนึ่งเพิ่มอินเทอร์เฟซ built-in
errorแสดงถึงประเภทข้อผิดพลาดเพิ่มฟังก์ชัน built-in
deleteสำหรับลบคู่คีย์-ค่าใน mapลำดับการวนซ้ำ map ด้วย
for rangeจะคาดเดาไม่ได้รองรับกำหนดค่าให้หลายตัวแปรพร้อมกัน
a := 1 b := 2 a, b = 3, 4ปัญหาการซ่อนตัวแปร: เมื่อฟังก์ชันมี named return value หากมีค่าส่งคืนใด ๆ ถูกซ่อน คำสั่ง
returnต้องมีค่าส่งคืน มิฉะนั้นจะไม่ผ่านการคอมไพล์ ด้านล่างเป็นตัวอย่างข้อผิดพลาดgofunc Bug() (i, j, k int) { for i = 0; i < 5; i++ { for j := 0; j < 5; j++ { // Redeclares j. k += i * j if k > 100 { return // Rejected: j is shadowed here. } } } return // OK: j is not shadowed here. }อนุญาตให้คัดลอกค่า struct ที่มีฟิลด์ส่วนตัว
ในกรณีที่ struct และ slice ประกอบด้วยองค์ประกอบที่เปรียบเทียบได้ อนุญาตให้ใช้เป็นคีย์ของ map ในขณะเดียวกันก็ลบความสามารถในการเปรียบเทียบของฟังก์ชันและ map ออก
นอกเหนือจากระดับภาษาแล้ว go1.0 มีการเปลี่ยนแปลงอย่างมากเมื่อเทียบกับเวอร์ชันพรีวิวในด้านการจัดระเบียบแพ็กเกจ ไลบรารีมาตรฐาน และ command line เนื่องจากเนื้อหามากเกินไปที่นี่จะไม่กล่าวถึงโดยละเอียด หากสนใจสามารถไปที่เว็บไซต์ทางการเพื่อดูข้อมูลเพิ่มเติม
pre
ก่อนที่ go1 จะเผยแพร่อย่างเป็นทางการ ทุกเวอร์ชันถูกเรียกว่าเวอร์ชันพรีวิว สำหรับเวอร์ชันพรีวิวเหล่านี้ ทางการจะเผยแพร่เวอร์ชัน snapshot ทุกสัปดาห์ เวอร์ชันที่สำคัญมีดังนี้
- r60(2011-09-07) กำหนดว่าบล็อก else ตอนนี้ต้องใส่เครื่องหมายวงเล็บ
- r59(2011-08-01) ออกแบบแผน struct tag ใหม่
- r58(2011-06-29) แก้ไขปัญหาการใช้ goto มากเกินไปซึ่งทำให้หน่วยความจำไม่ได้เริ่มต้น เพิ่มแพ็กเกจ gui, exec
- r57(2011-05-03) รองรับไวยากรณ์การกำหนดค่าหลายตัวแปรแบบสั้น ออกแบบแพ็กเกจ http, reflect ใหม่ เปลี่ยน gotest เป็นโปรแกรม go แทน shell script
- r56(2011-03-07) เวอร์ชันเสถียรแรก
การพัฒนาเวอร์ชันพรีวิวเริ่มต้นเมื่อวันที่ 09 ธันวาคม 2009 หยุดหลังจาก go1 เผยแพร่อย่างเป็นทางการเมื่อวันที่ 28 มีนาคม 2012 ใช้เวลาเกือบสามปี หลังจากนั้นจะไม่บันทึกเวอร์ชัน snapshot รายสัปดาห์อีกต่อไป ไปที่ Pre-Go 1 Release History เพื่อดูข้อมูลเวอร์ชันหลักเหล่านี้ ไปที่ Weekly Snapshot History เพื่อดูข้อมูลเวอร์ชัน snapshot ทุกสัปดาห์ของเวอร์ชันพรีวิวทั้งหมด
