ภาษา Go เวอร์ชันใหม่ 1.24 ออกมาหกเดือนหลังจากนั้น ไปที่ 1.23- การเปลี่ยนแปลงส่วนใหญ่เกิดขึ้นในส่วนของการใช้งานของ toolchain, runtime และไลบรารี เช่นเคย การปล่อยตัวให้ สัญญาแห่งความเข้ากันได้ 1. นักออกแบบภาษาคาดหวังว่าโปรแกรม Go เกือบทั้งหมดจะยังคงสามารถคอมไพล์และทำงานได้เหมือนเดิม
การเปลี่ยนแปลงของภาษา
Go 1.24 รองรับเต็มรูปแบบแล้ว นามแฝงประเภททั่วไป: สามารถกำหนดพารามิเตอร์นามแฝงประเภทเป็นประเภทที่ประกาศไว้ได้ รายละเอียดใน ข้อกำหนดภาษา- สำหรับตอนนี้ คุณสมบัตินี้สามารถปิดใช้งานได้โดยการตั้งค่า GOEXPERIMENT=noaliastypeparams อย่างไรก็ตาม ตัวเลือก aliastypeparams จะถูกลบออกใน Go 1.25
เครื่องมือ
ไปสั่ง
ตอนนี้โมดูล Go สามารถติดตามการอ้างอิงของไฟล์ปฏิบัติการได้โดยใช้คำสั่งเครื่องมือใน go.mod วิธีนี้จะทำให้ไม่ต้องใช้วิธีแก้ปัญหาชั่วคราวแบบเดิมในการเพิ่มเครื่องมือเป็นไฟล์นำเข้าเปล่าที่มักเรียกว่า "tools.go" ขณะนี้คำสั่ง go tool สามารถรันเครื่องมือเหล่านี้ได้นอกเหนือจากเครื่องมือที่มาพร้อมกับ Go สามารถดูข้อมูลเพิ่มเติมได้ที่ เอกสาร.
แฟล็ก -tool ใหม่สำหรับ go get ทำให้มีการเพิ่มคำสั่งเครื่องมือลงในโมดูลปัจจุบันสำหรับแพ็คเกจที่ระบุ นอกเหนือจากการเพิ่มคำสั่ง require
ใหม่ เครื่องมือเมตาแพทเทิร์น หมายถึงเครื่องมือทั้งหมดในโมดูลปัจจุบัน สามารถใช้สิ่งนี้เพื่ออัปเดตทั้งหมดผ่านเครื่องมือ Go Get หรือติดตั้งลงในไดเร็กทอรี GOBIN ของคุณผ่านเครื่องมือ Go Install
ไฟล์ปฏิบัติการที่ถูกสร้างผ่าน go run และการทำงานของเครื่องมือ go ใหม่นั้นจะถูกแคชไว้ในแคชการสร้าง Go แล้ว ทำให้สามารถเปิดใช้งานซ้ำได้เนื่องจากแคชที่เพิ่มขึ้น #69290.
คำสั่ง go build และ go install ตอนนี้ยอมรับแฟล็ก -json ซึ่งรายงานผลลัพธ์การสร้างและข้อผิดพลาดเป็นผลลัพธ์ JSON ที่มีโครงสร้างบนผลลัพธ์มาตรฐาน รายละเอียดรูปแบบสามารถดูได้ใน go help buildjson
นอกจากนี้ go test -json ยังรายงานเอาท์พุตและข้อผิดพลาดในการสร้างในรูปแบบ JSON ผสมกับผลลัพธ์การทดสอบในรูปแบบ JSON อีกด้วย สามารถแยกแยะได้จากประเภทการดำเนินการใหม่ แต่หากก่อให้เกิดปัญหาในระบบบูรณาการการทดสอบ คุณสามารถย้อนกลับไปใช้ข้อความเอาต์พุตของการสร้างได้ผ่านทาง การตั้งค่า GODEBUG gotestjsonbuildtext=1.
ตัวแปรสภาพแวดล้อม GOAUTH ใหม่มอบวิธีการที่ยืดหยุ่นสำหรับการอนุญาตการดึงโมดูลส่วนตัว คุณสามารถดูรายละเอียดได้ใน go help goauth
ตอนนี้คำสั่ง go build ได้รับการติดตั้งแล้ว เวอร์ชันของโมดูลหลัก ในไบนารีที่คอมไพล์แล้ว โดยอิงตามแท็ก และ/หรือการคอมมิตการควบคุมเวอร์ชัน คำว่า "+dirty" จะถูกเพิ่มเข้าไปหากมีการเปลี่ยนแปลงที่ยังไม่ได้ยืนยัน สามารถใช้แฟล็ก -buildvcs=false เพื่อละเว้นข้อมูลการควบคุมเวอร์ชันจากไบนารีได้
ใหม่ การตั้งค่า GODEBUG เครื่องมือติดตามโซ่=1 ตอนนี้สามารถใช้เพื่อติดตามกระบวนการเลือกเครื่องมือในคำสั่ง go ได้
ซีจีโอ
Cgo รองรับคำอธิบายประกอบใหม่สำหรับฟังก์ชัน C เพื่อปรับปรุงประสิทธิภาพของรันไทม์ #cgo noescape cFunctionName แจ้งให้คอมไพเลอร์ทราบว่าหน่วยความจำที่ส่งผ่านไปยังฟังก์ชัน C cFunctionName ไม่ได้ถูกหลีกเลี่ยง #cgo nocallback cFunctionName แจ้งคอมไพเลอร์ว่าฟังก์ชัน C cFunctionName จะไม่เรียกฟังก์ชัน Go กลับมาใดๆ สามารถดูข้อมูลเพิ่มเติมได้ที่ เอกสาร CGO.
ปัจจุบัน Cgo ปฏิเสธที่จะคอมไพล์การเรียกไปยังฟังก์ชัน C ที่มีการประกาศที่เข้ากันไม่ได้หลายรายการ ตัวอย่างเช่น ถ้า f ถูกประกาศเป็นทั้ง void f(int) และ void f(double) cgo จะรายงานข้อผิดพลาดแทนที่จะสร้างลำดับการเรียกที่ไม่ถูกต้อง f(0) สิ่งใหม่ในการเปิดตัวนี้คือการปรับปรุงการตรวจจับเงื่อนไขข้อผิดพลาดนี้เมื่อคำประกาศที่เข้ากันไม่ได้ปรากฏในไฟล์ที่แตกต่างกัน #67699.
ออบเจดัมพ์
ตอนนี้เครื่องมือ objdump รองรับการถอดประกอบบน LoongArch 64 บิต (GOARCH=loong64), RISC-V (GOARCH=riscv64) และ S390X (GOARCH=s390x) แล้ว
สัตว์แพทย์
เครื่องวิเคราะห์การทดสอบแบบใหม่จะรายงานข้อผิดพลาดทั่วไปในการทดสอบ เครื่องทดสอบข้อผิดพลาด การประเมินประสิทธิภาพ และการประกาศตัวอย่างในชุดการทดสอบ เช่น ชื่อผิดรูปแบบ ลายเซ็นไม่ถูกต้อง หรือตัวอย่างที่มีการบันทึกตัวระบุที่ไม่มีอยู่จริง ข้อผิดพลาดบางประการเหล่านี้อาจทำให้การทดสอบล้มเหลว
ตอนนี้ตัวแยกวิเคราะห์ printf ที่มีอยู่จะรายงานการวินิจฉัยสำหรับการเรียกฟอร์ม fmt.Printf(s) โดยที่ s คือสตริงรูปแบบไม่คงที่และไม่มีอาร์กิวเมนต์อื่น ๆ การเรียกดังกล่าวเกือบทุกครั้งจะเกิดข้อผิดพลาด เนื่องจากค่าของ s อาจมีอักขระ % ใช้ fmt.Print แทน 60529- การตรวจสอบนี้มักจะค้นหาสิ่งต่างๆ ในโค้ดที่มีอยู่ ดังนั้นจึงใช้ได้เฉพาะเมื่อเวอร์ชันภาษา (ตามที่ระบุโดยไดเรกทิฟ go ของไฟล์ go.mod หรือความคิดเห็น `//go:build`) เป็นอย่างน้อย Go 1.24 เพื่อหลีกเลี่ยงการหยุดการทำงานแบบบูรณาการยาวนานเมื่ออัปเกรดเป็นเครื่องมือ Go 1.24
ตัววิเคราะห์ buildtag ที่มีอยู่จะรายงานการวินิจฉัยเมื่อมี buildtag ที่ไม่ถูกต้อง ข้อจำกัดการสร้างเวอร์ชันเก่า เข้าไปในคำสั่ง //go:build ตัวอย่างเช่น //go:build go1.23.1 หมายถึงจุดปล่อย ใช้ //go:build go1.23 แทน #64127.
ตัววิเคราะห์ copylock ที่มีอยู่จะรายงานการวินิจฉัยเมื่อมีการประกาศตัวแปรในลูป "for" สามรอบ เช่น for i := iter(); เสร็จแล้ว(i); i = next(i) { … } มี sync.Locker เช่น sync.Mutex ไปที่ 1.22 เปลี่ยนพฤติกรรมของลูปดังกล่าวเพื่อสร้างตัวแปรใหม่สำหรับการวนซ้ำแต่ละครั้งโดยคัดลอกค่าจากการวนซ้ำครั้งก่อน การคัดลอกนี้ไม่ปลอดภัยต่อล็อค #66387.
โกคาเชพร็อก
ขณะนี้ไบนารี cmd/go ภายในและกลไกการแคชการทดสอบสามารถนำมาใช้ได้โดยกระบวนการย่อยที่ใช้งานโปรโตคอล JSON ระหว่างเครื่องมือ cmd/go กับกระบวนการย่อยที่ตั้งชื่อโดยตัวแปรสภาพแวดล้อม GOCACHEPROG ก่อนหน้านี้จะเป็นของ GOEXPERIMENT รายละเอียดของพิธีการสามารถดูได้ใน เอกสาร.
เวลาที่เสร็จสิ้น
การปรับปรุงประสิทธิภาพรันไทม์หลายประการช่วยลดค่าใช้จ่ายของ CPU ลง 2-3% โดยเฉลี่ยจากชุดเกณฑ์มาตรฐานที่เป็นตัวแทน ผลลัพธ์อาจแตกต่างกันไปขึ้นอยู่กับการใช้งาน การปรับปรุงเหล่านี้รวมถึงการใช้งานแผนที่ในตัวใหม่ตาม ตารางภาษาสวีเดนการจัดสรรหน่วยความจำของอ็อบเจ็กต์ขนาดเล็กที่มีประสิทธิภาพมากขึ้น และการใช้งานมิวเท็กซ์ภายในแบบรันไทม์ใหม่
สามารถปิดการใช้งานการใช้งานแผนที่ภายในใหม่และมิวเท็กซ์รันไทม์ภายในใหม่ได้โดยตั้งค่า GOEXPERIMENT=noswissmap และ GOEXPERIMENT=nospinbitmutex ในเวลาที่สร้างตามลำดับ
คอมไพเลอร์
คอมไพเลอร์ห้ามการกำหนดวิธีการใหม่ด้วยประเภทตัวรับที่สร้างโดย cgo อยู่แล้ว แต่สามารถหลีกเลี่ยงข้อจำกัดนี้ได้โดยใช้ชื่อแฝงประเภท Go 1.24 ตอนนี้จะรายงานข้อผิดพลาดเสมอหากตัวรับระบุประเภทที่สร้างโดย cgo ไม่ว่าโดยตรงหรือโดยอ้อม (ผ่านนามแฝงประเภท)
ลิงค์เกอร์
ขณะนี้ลิงก์เกอร์จะสร้างตัวระบุการสร้าง GNU (รายการ ELF NT_GNU_BUILD_ID) บนแพลตฟอร์ม ELF และ UUID (คำสั่งโหลด Mach-O LC_UUID) บน macOS ตามค่าเริ่มต้น ID การสร้างหรือ UUID ได้มาจาก ID การสร้างของ Go สามารถปิดได้โดยใช้แฟล็กตัวเชื่อม -B none หรือแทนที่ด้วยแฟล็กตัวเชื่อม -B 0xNNNN ด้วยค่าเลขฐานสิบหกที่ผู้ใช้ระบุ
การส่งเสริม
ตามที่ระบุไว้ใน หมายเหตุการเปิดตัว Go 1.22Go 1.24 จำเป็นต้องติดตั้ง Go 1.22.6 ขึ้นไป นักพัฒนาคาดหวังว่า Go 1.26 จะต้องมีการเปิดตัว Go 1.24 หรือใหม่กว่าก่อนจึงจะเปิดตัวได้
ห้องสมุดมาตรฐาน
การเข้าถึงระบบไฟล์ที่จำกัดไดเร็กทอรี
ประเภทใหม่ ระบบปฏิบัติการราก ให้ความสามารถในการดำเนินการระบบไฟล์ภายในไดเร็กทอรีที่ระบุ
ฟังก์ชัน ระบบปฏิบัติการ OpenRoot เปิดไดเรกทอรีและส่งกลับ ระบบปฏิบัติการราก- วิธีการบน ระบบปฏิบัติการราก ดำเนินการในไดเร็กทอรีนั้นและไม่อนุญาตให้เส้นทางอ้างอิงไปยังตำแหน่งภายนอกไดเร็กทอรี รวมถึงตำแหน่งที่ตามลิงก์สัญลักษณ์ภายนอกไดเร็กทอรีด้วย วิธีการใน os.Root สะท้อนถึงการทำงานของระบบไฟล์ส่วนใหญ่ที่มีอยู่ในแพ็คเกจ os รวมถึง ตัวอย่างเช่น os.Root.เปิด, os.Root.สร้าง, os.Root.Mkdir и ระบบปฏิบัติการ.Root.Stat.
ฟีเจอร์เกณฑ์มาตรฐานใหม่
ตอนนี้เกณฑ์มาตรฐานสามารถใช้วิธีที่เร็วกว่าและเกิดข้อผิดพลาดน้อยลงได้ การทดสอบ B.Loop เพื่อทำการวนซ้ำในเกณฑ์มาตรฐาน เช่น สำหรับ b.Loop() { … } แทนโครงสร้างลูปทั่วไปที่เกี่ยวข้องกับ bN เช่น สำหรับช่วง bN ซึ่งจะให้ข้อดีที่สำคัญสองประการ:
- ฟังก์ชันการประเมินประสิทธิภาพจะดำเนินการเพียงครั้งเดียวต่อการนับ ดังนั้นขั้นตอนการตั้งค่าและการล้างข้อมูลที่มีราคาแพงจึงดำเนินการเพียงครั้งเดียวเท่านั้น
- พารามิเตอร์การเรียกใช้ฟังก์ชันและผลลัพธ์จะยังคงมีอยู่ ซึ่งป้องกันไม่ให้คอมไพเลอร์ปรับแต่งเนื้อหาของลูปให้เหมาะสมได้อย่างสมบูรณ์
ปรับปรุงตัวสรุปผลแล้ว
ลูกเล่นใหม่ รันไทม์.AddCleanup เป็นกลไกการดำเนินการให้เสร็จสมบูรณ์ซึ่งมีความยืดหยุ่นมากขึ้น มีประสิทธิภาพมากขึ้น และมีโอกาสเกิดข้อผิดพลาดน้อยลง รันไทม์.SetFinalizer- AddCleanup แนบฟังก์ชันการล้างข้อมูลให้กับอ็อบเจ็กต์ที่จะทำงานทันทีที่อ็อบเจ็กต์นั้นไม่พร้อมใช้งาน อย่างไรก็ตาม ไม่เหมือนกับ SetFinalizer การล้างข้อมูลหลายรายการสามารถแนบไปกับอ็อบเจ็กต์เดียวได้ การล้างข้อมูลสามารถแนบไปกับตัวชี้ภายในได้ การล้างข้อมูลโดยทั่วไปจะไม่ทำให้เกิดการรั่วไหลเมื่ออ็อบเจ็กต์สร้างรอบ และการล้างข้อมูลจะไม่ทำให้การจัดสรรอ็อบเจ็กต์ที่ชี้ไปล่าช้า โค้ดใหม่ควรเลือก AddCleanup มากกว่า SetFinalizer
แพ็คเกจใหม่ที่อ่อนแอ
แพคเกจใหม่ อ่อนแอ ให้คำแนะนำที่อ่อนแอ
ตัวชี้ที่อ่อนแอคือโปรแกรมดั้งเดิมระดับต่ำที่จัดทำไว้สำหรับสร้างโครงสร้างที่ใช้หน่วยความจำอย่างมีประสิทธิภาพ เช่น พจนานุกรมที่อ่อนแอสำหรับการแมปค่า พจนานุกรมการกำหนดมาตรฐานสำหรับสิ่งใดก็ตามที่ไม่ได้ครอบคลุมโดยแพ็คเกจ ที่ไม่เหมือนใครและแคชหลากหลายประเภท เพื่อรองรับกรณีการใช้งานเหล่านี้ รุ่นนี้ยังมี รันไทม์.AddCleanup и maphash.เปรียบเทียบได้.
แพ็คเกจ crypto/mlkem ใหม่
แพคเกจใหม่ คริปโต/mlkem ใช้ ML-KEM-768 และ ML-KEM-1024
ML-KEM เป็นกลไกการแลกเปลี่ยนคีย์หลังควอนตัม ซึ่งเดิมเรียกว่า Kyber และระบุไว้ใน สพป.203.
แพ็คเกจใหม่ crypto/hkdf, crypto/pbkdf2 และ crypto/sha3
แพคเกจใหม่ คริปโต/hkdf ใช้ฟังก์ชัน HKDF ซึ่งเป็นฟังก์ชันการอนุมานคีย์ "Extract-and-Expand" บนพื้นฐาน HMAC ตามที่กำหนดไว้ใน RFC 5869.
แพคเกจใหม่ คริปโต/pbkdf2 ใช้ฟังก์ชันการอนุมานคีย์ตามรหัสผ่าน PBKDF2 ตามที่กำหนดไว้ใน RFC 8018.
แพคเกจใหม่ คริปโต/sha3 ใช้ฟังก์ชันแฮช SHA-3 และฟังก์ชันเอาต์พุตที่ขยายได้ SHAKE และ cSHAKE ตามที่กำหนดไว้ใน สพป.202.
แพ็คเกจทั้งสามนี้มีพื้นฐานมาจากแพ็คเกจ golang.org/x/crypto/… ที่มีอยู่
การปฏิบัติตาม FIPS 140-3
การเปิดตัวนี้รวมถึง กลไกชุดใหม่เพื่อให้มั่นใจว่าเป็นไปตามมาตรฐาน FIPS 140-3.
โมดูล Go crypto เป็นชุดแพ็คเกจไลบรารีมาตรฐานภายในที่ใช้อย่างโปร่งใสเพื่อใช้ในการใช้งานอัลกอริทึมที่ได้รับการอนุมัติตาม FIPS 140-3 แอปพลิเคชันไม่จำเป็นต้องเปลี่ยนแปลงเพื่อใช้โมดูล Go crypto สำหรับอัลกอริทึมที่ได้รับการอนุมัติ
ตัวแปรสภาพแวดล้อมใหม่ GOFIPS140 ใช้เพื่อเลือกเวอร์ชันของโมดูล Go crypto ที่จะใช้ในการสร้างได้ ใหม่ การตั้งค่า GODEBUG สามารถใช้ fips140 เพื่อเปิดใช้งานโหมด FIPS 140-3 ในระหว่างการรันไทม์ได้
Go 1.24 ประกอบด้วยโมดูล Go crypto v1.0.0 ซึ่งขณะนี้กำลังได้รับการทดสอบกับห้องปฏิบัติการที่ได้รับการรับรองจาก CMVP
การทดสอบแพ็คเกจทดลองใหม่/synctest
แพ็คเกจทดลองใหม่ การทดสอบ/การทดสอบแบบซิงก์ ให้การสนับสนุนสำหรับการทดสอบโค้ดพร้อมกัน
- ฟังก์ชัน ซิงค์เทสรัน รันกลุ่มของ goroutines ใน "ฟอง" ที่แยกออกจากกัน ในฟังก์ชั่นฟองอากาศของแพ็กเกจ เวลา ทำงานบนนาฬิกาปลอม
- ฟังก์ชั่น ซิงค์เทส.รอ รอจนกระทั่ง goroutines ทั้งหมดถูกบล็อคในฟองปัจจุบัน
รายละเอียดสามารถดูได้ในเอกสารแพ็คเกจ
แพ็คเกจ synctest เป็นแพ็คเกจทดลองและจะต้องเปิดใช้งานโดยตั้งค่า GOEXPERIMENT=synctest API ของแพ็คเกจอาจเปลี่ยนแปลงได้ในรุ่นต่อๆ ไป ใน #67434 คุณสามารถดูรายละเอียดเพิ่มเติมและแสดงความคิดเห็นได้
การเปลี่ยนแปลงเล็กน้อยในห้องสมุด
เก็บ
การใช้งาน (*Writer.AddFS) ใน archive/zip และ archive/tar ตอนนี้เขียนส่วนหัวไดเร็กทอรีสำหรับไดเร็กทอรีว่างเปล่า
ไบต์
บรรจุภัณฑ์ ไบต์ เพิ่มฟังก์ชันต่างๆ หลายอย่างที่ทำงานร่วมกับตัววนซ้ำ:
- . ส่งคืนตัววนซ้ำผ่านสตริงที่คั่นด้วยบรรทัดใหม่ในสไลซ์ไบต์
- สปลิทเซค ส่งคืนตัววนซ้ำสำหรับส่วนย่อยทั้งหมดของไบต์ที่คั่นด้วยตัวคั่น
- แยกหลังจากSeq ส่งคืนตัววนซ้ำผ่านส่วนย่อยของส่วนไบต์ โดยแยกออกหลังจากการเกิดขึ้นแต่ละครั้งของตัวคั่น
- ฟิลด์ Seq ส่งคืนตัววนซ้ำผ่านส่วนย่อยของไบต์สไลซ์รอบลำดับอักขระช่องว่างตามที่กำหนด ยูนิโค้ด.IsSpace
- ฟิลด์ฟังก์ชันSeq ส่งคืนตัววนซ้ำบนส่วนย่อยของส่วนไบต์โดยรอบลำดับของจุดโค้ด Unicode ที่เป็นไปตามเงื่อนไข
คริปโต/เออีเอส
ค่าส่งคืน นิวชิเฟอร์ ไม่ใช้วิธีการ NewCTR, NewGCM, NewCBCEncrypter และ NewCBCDecrypter อีกต่อไป วิธีการเหล่านี้ไม่ได้มีการบันทึกไว้และไม่สามารถใช้ได้กับสถาปัตยกรรมทั้งหมด ตอนนี้ความหมาย ปิดกั้น จะต้องส่งต่อไปยังฟังก์ชั่นที่เหมาะสมโดยตรง การเข้ารหัส- ปัจจุบัน การเข้ารหัส/การเข้ารหัสยังคงตรวจสอบวิธีการเหล่านี้กับค่าบล็อก แม้ว่าจะไม่รองรับโดยไลบรารีมาตรฐานอีกต่อไปแล้วก็ตาม
การเข้ารหัส
ลูกเล่นใหม่ GCM ใหม่พร้อมการสุ่มแบบ Nonce ผลตอบแทน กศนซึ่งใช้งาน AES-GCM ด้วยการสร้าง nonce แบบสุ่มในระหว่าง Seal และเติมไว้ข้างหน้าในข้อความเข้ารหัส
การดำเนินงาน กระแส, กลับมาแล้ว นิวCTR เมื่อใช้ร่วมกับ คริปโต/เออีเอส ตอนนี้เร็วขึ้นหลายเท่าบน amd64 และ ARM64
ใหม่OFB, ตัวเข้ารหัส CFBE ใหม่ и ตัวถอดรหัส CFBD ใหม่ ถูกประกาศให้ล้าสมัยแล้ว โหมด OFB และ CFB ไม่ผ่านการตรวจยืนยัน ซึ่งโดยทั่วไปอนุญาตให้การโจมตีที่ใช้งานอยู่สามารถจัดการและกู้คืนข้อความธรรมดาได้ แอปพลิเคชันที่แนะนำในการใช้งาน กศน เพื่อเป็นการตอบแทน หากอยู่ในโหมดไม่ผ่านการตรวจสอบสิทธิ์ กระแส จำเป็น,สามารถใช้ได้ นิวCTR เพื่อเป็นการตอบแทน
คริปโต/อีซีดีเอสเอ
PrivateKey.ลงชื่อ ตอนนี้สร้างลายเซ็นแบบกำหนดตาม RFC 6979ถ้าแหล่งความสุ่มเป็นค่าศูนย์
คริปโต/md5
ค่าส่งคืน md5.ใหม่ตอนนี้ยังใช้อินเทอร์เฟซอีกด้วย การเข้ารหัส.binaryappender.
คริปโต/แรนด์
ฟังก์ชัน อ่าน ตอนนี้รับประกันว่าไม่มีความล้มเหลว หาก Read พบข้อผิดพลาดขณะอ่าน ผู้อ่านโปรแกรมจะยุติลงถาวร โปรดทราบว่า Reader เริ่มต้นได้รับการบันทึกไว้ว่าสามารถทำงานได้สำเร็จเสมอ ดังนั้นการเปลี่ยนแปลงนี้ควรส่งผลต่อโปรแกรมที่แทนที่ตัวแปร Reader เท่านั้น ข้อยกเว้นประการหนึ่งคือเคอร์เนล Linux ก่อนรุ่น 3.17 โดยที่ Reader เริ่มต้นยังคงเปิด /dev/urandom และอาจล้มเหลวได้
บน Linux 6.11 และรุ่นใหม่กว่า ขณะนี้ Reader จะใช้การเรียกใช้ระบบ getrandom ผ่าน vDSO วิธีนี้เร็วกว่าหลายเท่า โดยปกติแล้วจะใช้สำหรับการอ่านข้อมูลจำนวนน้อย
บน OpenBSD Reader ตอนนี้ใช้ arc4random_buf(3)
ลูกเล่นใหม่ ข้อความ ตอนนี้สามารถสร้างสตริงข้อความสุ่มที่ปลอดภัยด้วยการเข้ารหัสได้แล้ว
คริปโต/อาร์เอสเอ
สร้างคีย์ ตอนนี้จะส่งกลับข้อผิดพลาดหากมีการร้องขอความยาวคีย์น้อยกว่า 1024 บิต วิธีการ Sign, Verify, Encrypt และ Decrypt ทั้งหมดส่งคืนข้อผิดพลาดหากใช้กับขนาดคีย์น้อยกว่า 1024 บิต กุญแจดังกล่าวไม่ปลอดภัยและไม่ควรใช้ การตั้งค่า GODEBUG rsa1024min=0 จะคืนสภาพการทำงานเดิม แต่ผู้พัฒนา Go แนะนำให้ดำเนินการนี้เฉพาะเมื่อจำเป็นและในการทดสอบเท่านั้น เช่น โดยการเพิ่มบรรทัด //go:debug rsa1024min=0 ลงในไฟล์ทดสอบ ใหม่ ตัวอย่าง GenerateKey ให้คีย์ทดสอบมาตรฐาน 2024 บิตที่ใช้งานง่าย
ตอนนี้การโทรมีความปลอดภัยและมีประสิทธิภาพมากขึ้น PrivateKey.คำนวณล่วงหน้า ไปยัง PrivateKey.ตรวจสอบ- การคำนวณล่วงหน้าจะเร็วขึ้นในกรณีที่มีการเติมข้อมูลเพียงบางส่วน ค่าที่คำนวณไว้ล่วงหน้าเช่นเมื่อแยกคีย์จาก JSON
ตอนนี้แพ็คเกจจะปฏิเสธคีย์ที่ไม่ถูกต้องมากขึ้นแม้ว่าจะไม่มีการเรียก Validate ก็ตาม สร้างคีย์ ตอนนี้สามารถส่งคืนข้อผิดพลาดใหม่สำหรับแหล่งที่มาของความสุ่มที่เสียหายได้ ทุ่งนา ช่วงเวลา и คำนวณไว้ล่วงหน้า โครงสร้าง PrivateKey ตอนนี้ถูกนำมาใช้และตรวจสอบแล้ว แม้ว่าบางค่าจะหายไปก็ตาม นอกจากนี้ยังมีการเปลี่ยนแปลงใน crypto/x509 สำหรับการแยกวิเคราะห์และแยกคีย์ RSA ตามที่อธิบายไว้ด้านล่าง
ป้าย PKCS1v15 и ตรวจสอบ PKCS1v15 ตอนนี้รองรับ SHA-512/224, SHA-512/256 และ SHA-3
สร้างคีย์ ตอนนี้ใช้วิธีการที่แตกต่างกันเล็กน้อยเพื่อสร้างเลขชี้กำลังส่วนตัว (ฟังก์ชัน Carmichael แทนฟังก์ชัน Euler) แอปพลิเคชันที่หายากซึ่งสร้างคีย์ใหม่จากตัวเลขเฉพาะภายนอกเท่านั้นอาจสร้างผลลัพธ์ที่แตกต่างแต่เข้ากันได้
การดำเนินการกับคีย์สาธารณะและคีย์ส่วนตัวเร็วขึ้นสองเท่าบน wasm
คริปโต/ชา*
- คริปโต/sha1:ค่าส่งคืน sha1.ใหม่ ตอนนี้ยังใช้อินเทอร์เฟซอีกด้วย การเข้ารหัส.binaryappender.
- คริปโต/sha256:ค่าที่ส่งคืน sha256.ใหม่ и sha256.ใหม่224 ตอนนี้ยังใช้อินเทอร์เฟซอีกด้วย การเข้ารหัส.binaryappender.
- คริปโต/sha512:ค่าที่ส่งคืน sha512.ใหม่, sha512.ใหม่384, sha512.ใหม่512_224 и sha512.ใหม่512_256ตอนนี้ยังทำการใช้งานอินเทอร์เฟซด้วย การเข้ารหัส.binaryappender.
คริปโต/ละเอียดอ่อน
ลูกเล่นใหม่ ด้วยข้อมูลการกำหนดเวลาอิสระ ช่วยให้ผู้ใช้สามารถดำเนินการฟังก์ชันที่เปิดใช้คุณสมบัติเฉพาะของสถาปัตยกรรมเพื่อให้แน่ใจว่าคำสั่งบางอย่างจะไม่เปลี่ยนแปลงเมื่อเทียบกับเวลาของค่าข้อมูล สิ่งนี้ใช้เพื่อให้แน่ใจว่าโค้ดที่เขียนเพื่อทำงานในเวลาคงที่ไม่ได้รับการปรับให้เหมาะสมโดยฟังก์ชันระดับโปรเซสเซอร์ ทำให้ทำงานในเวลาที่แปรผันได้ ปัจจุบัน WithDataIndependentTiming จะใช้บิต PSTATE.DIT บน arm64 และไม่ทำอะไรกับสถาปัตยกรรมอื่น ๆ ทั้งหมด การตั้งค่า GODEBUG dataindependenttiming=1 เปิดใช้งานโหมด DIT ให้กับโปรแกรม Go ทั้งหมด
เอาท์พุต XORไบต์ จะต้องทับซ้อนกับอินพุตอย่างสมบูรณ์หรือไม่ต้องทับซ้อนเลย ก่อนหน้านี้พฤติกรรมจะไม่ถูกกำหนดไว้เป็นอย่างอื่น แต่ตอนนี้ XORBytes จะเกิดอาการตื่นตระหนก
การเข้ารหัสลับ/tls
ตอนนี้เซิร์ฟเวอร์ TLS รองรับ Encrypted Client Hello (ECH) แล้ว คุณสามารถเปิดใช้งานคุณสมบัตินี้ได้โดยการกรอกข้อมูลลงในช่อง การกำหนดค่า EncryptedClientHelloKeys.
กลไกการแลกเปลี่ยนคีย์หลังควอนตัมใหม่ X25519MLKEM768 ตอนนี้ได้รับการสนับสนุนและเปิดใช้งานตามค่าเริ่มต้นเมื่อ การกำหนดค่าเส้นโค้ง เป็นศูนย์ การตั้งค่า GODEBUG tlsmlkem=0 คืนค่าค่าเริ่มต้น
การสนับสนุนสำหรับการแลกเปลี่ยนคีย์ X25519Kyber768Draft00 ในเชิงทดลองถูกลบออกแล้ว
ขณะนี้คำสั่งแลกเปลี่ยนคีย์ได้รับการจัดการโดยแพ็คเกจ crypto/tls ทั้งหมดแล้ว คำสั่ง การกำหนดค่าเส้นโค้ง จะถูกละเว้นตอนนี้และเนื้อหาจะถูกใช้เพื่อกำหนดว่าจะรวมการแลกเปลี่ยนคีย์ใดเมื่อกรอกข้อมูลในฟิลด์เท่านั้น
สนามใหม่ ส่วนขยายไคลเอนต์ HelloInfo แสดงรายการตัวระบุส่วนขยายที่ได้รับในข้อความ Hello ของไคลเอนต์ สิ่งนี้มีประโยชน์สำหรับการเก็บรวบรวมลายนิ้วมือไคลเอนต์ TLS
คริปโต/x509
การตั้งค่า GODEBUG x509sha1 ได้ถูกลบออกไปแล้ว การรับรอง.ตรวจสอบ ไม่รองรับลายเซ็นที่ใช้ SHA-1 อีกต่อไป
ออย ตอนนี้ใช้งานอินเทอร์เฟซแล้ว การเข้ารหัส.binaryappender и การเข้ารหัส.TextAppender.
ฟิลด์นโยบายใบรับรองเริ่มต้นได้รับการเปลี่ยนแปลงจาก ใบรับรอง.ตัวระบุนโยบาย บน ใบรับรอง.นโยบาย- เมื่อทำการวิเคราะห์ใบรับรอง จะมีการเติมข้อมูลในฟิลด์ทั้งสอง แต่เมื่อสร้างนโยบายใบรับรอง ข้อมูลเหล่านั้นจะถูกนำมาจากฟิลด์ Certificate.Policies แทนที่จะเป็น Certificate.PolicyIdentifiers การเปลี่ยนแปลงนี้สามารถกลับคืนได้ การตั้งค่า GODEBUG x509ใช้นโยบาย=0
สร้างใบรับรอง ตอนนี้จะสร้างหมายเลขซีเรียลโดยใช้วิธีที่สอดคล้องกับ RFC 5280 เมื่อส่งฟิลด์เทมเพลต ใบรับรอง.หมายเลขประจำเครื่อง ไม่มีอะไรเลยแทนที่จะเกิดการขัดข้อง
ใบรับรอง.ตรวจสอบ ตอนนี้รองรับการตรวจสอบนโยบายตามที่กำหนดไว้ใน RFC 5280 และ RFC 9618 ฟิลด์ใหม่ ตรวจสอบตัวเลือก.นโยบายใบรับรอง สามารถกำหนดเป็นนโยบายชุดที่ยอมรับได้ OID แปลว่า- จะมีการส่งคืนเฉพาะโซ่ใบรับรองที่มีกราฟนโยบายที่ถูกต้องเท่านั้น ใบรับรอง.ตรวจสอบ.
มาร์แชลPKCS8คีย์ส่วนตัว ตอนนี้ส่งคืนข้อผิดพลาดแทนที่จะดึงคีย์ RSA ที่ไม่ถูกต้อง -มาร์แชลPKCS1คีย์ส่วนตัว ไม่มีการส่งคืนข้อผิดพลาดและพฤติกรรมเมื่อระบุคีย์ที่ไม่ถูกต้องจะยังคงไม่ถูกกำหนด)
การแยกวิเคราะห์ PKCS1 คีย์ส่วนตัว и การแยกวิเคราะห์ PKCS8 คีย์ส่วนตัว ตอนนี้ใช้และตรวจสอบค่า CRT ที่เข้ารหัสได้ ดังนั้นจึงปฏิเสธคีย์ RSA ที่ไม่ถูกต้องที่เคยยอมรับได้ก่อนหน้านี้ได้ การใช้งาน การตั้งค่า GODEBUG x509rsacrt=0 กลับไปคำนวณค่า CRT ใหม่
ดีบัก/เอลฟ์
บรรจุภัณฑ์ ดีบัก/เอลฟ์ เพิ่มการรองรับการจัดการเวอร์ชันสัญลักษณ์ในไฟล์ ELF (Executable and Linkable Format) แบบไดนามิก วิธีการใหม่ ไฟล์.เวอร์ชันไดนามิก ส่งคืนรายการเวอร์ชันไดนามิกที่กำหนดไว้ในไฟล์ ELF วิธีการใหม่ ไฟล์.DynamicVersionNeeds ส่งคืนรายการเวอร์ชันไดนามิกที่จำเป็นสำหรับไฟล์ ELF นี้ ซึ่งกำหนดไว้ในอ็อบเจ็กต์ ELF อื่นๆ ในที่สุดก็มีสนามใหม่ สัญลักษณ์ HasVersion и สัญลักษณ์.VersionIndex ระบุรุ่นของสัญลักษณ์
การเข้ารหัส
สองอินเทอร์เฟซใหม่ การเพิ่มข้อความ и ไบนารีแอปเพนเดอร์ ถูกนำมาใช้เพื่อเพิ่มข้อความหรือการแสดงแบบไบนารีของวัตถุลงในสไลซ์ไบต์ อินเทอร์เฟซเหล่านี้มีฟังก์ชันการทำงานเหมือนกัน เท็กซ์มาร์แชลเลอร์ и ไบนารีมาร์ชาเลอร์แต่แทนที่จะจัดสรรสไลซ์ใหม่ทุกครั้ง พวกเขาผนวกข้อมูลลงในสไลซ์ที่มีอยู่โดยตรง อินเทอร์เฟซเหล่านี้ปัจจุบันใช้งานโดยประเภทไลบรารีมาตรฐานที่ใช้งาน TextMarshaler และ/หรือ BinaryMarshaler อยู่แล้ว
การเข้ารหัส/json
ขณะสร้าง ฟิลด์โครงสร้างที่มีตัวเลือก omitzero ใหม่ในแท็กฟิลด์โครงสร้างจะถูกละเว้นหากค่าเป็นศูนย์ หากประเภทฟิลด์มีวิธีการบูลีน IsZero() ระบบจะใช้ในการพิจารณาว่าค่าเป็นศูนย์หรือไม่ มิฉะนั้นค่าจะเป็นศูนย์หาก ค่าว่างสำหรับประเภทของมัน- แท็กฟิลด์ omitzero นั้นสะอาดกว่าและเกิดข้อผิดพลาดน้อยกว่า omitempty เมื่อมีจุดประสงค์เพื่อละเว้นค่า null โดยเฉพาะอย่างยิ่ง แตกต่างจาก omitempty omitzero จะละเว้นค่าศูนย์ เวลา.เวลา ค่าที่เป็นที่มาของปัญหาร่วมกัน
ถ้าระบุทั้ง omitempty และ omitzero ฟิลด์จะถูกละเว้นถ้าค่าเป็นค่าว่างหรือเป็นศูนย์ (หรือทั้งสองอย่าง)
ข้อผิดพลาด UnmarshalType ฟิลด์ ตอนนี้มีโครงสร้างในตัวเพื่อให้ข้อความแสดงข้อผิดพลาดมีรายละเอียดมากขึ้น
ไป/พิมพ์
โครงสร้างข้อมูล go/types ทั้งหมดที่เปิดเผยลำดับของคู่เมธอด เช่น Len() int และ At(int) T ตอนนี้มีเมธอดที่ส่งคืนตัววนซ้ำด้วย ช่วยให้เขียนโค้ดง่ายขึ้น เช่นนี้:
params := fn.Type.(*types.Signature).Params() สำหรับ i := 0; ฉัน < params.Len(); i++ { ใช้(params.At(i)) }
ในเรื่องนี้:
สำหรับพารามิเตอร์ := ช่วง fn.Signature().Params().Variables() { ใช้(พารามิเตอร์) }
วิธีการ: อินเทอร์เฟซ EmbeddedTypes อินเทอร์เฟซ วิธีการที่ชัดเจน อินเทอร์เฟซ.วิธีการ MethodSet วิธีการ วิธีการตั้งชื่อ ขอบเขต.เด็ก โครงสร้าง.ทุ่งนา ทูเพิล.ตัวแปร TypeList ประเภท ประเภทรายการ TypeParamList สหภาพ.เงื่อนไข
กัญชา/*
- แฮช/แอดเลอร์32:ค่าส่งคืน ใหม่ตอนนี้ยังใช้อินเทอร์เฟซอีกด้วย การเข้ารหัส.binaryappender
- แฮช/crc32:ค่าที่ส่งคืน ใหม่ и ใหม่IEEEตอนนี้ยังทำการใช้งานอินเทอร์เฟซด้วย การเข้ารหัส.binaryappender
- แฮช/crc64:ค่าส่งคืน ใหม่ตอนนี้ยังใช้อินเทอร์เฟซอีกด้วย การเข้ารหัส.binaryappender
- แฮช/fnv:ค่าที่ส่งคืน New32 นิว32เอ New64 นิว64เอ New128 и นิว128เอตอนนี้ยังทำการใช้งานอินเทอร์เฟซด้วย การเข้ารหัส.binaryappender
- แฮช/แมพช: คุณสมบัติใหม่ เทียบเคียง и เขียนเปรียบเทียบได้ สามารถคำนวณค่าแฮชของค่าใด ๆ ที่สามารถเปรียบเทียบได้ สิ่งนี้ทำให้คุณสามารถแฮชสิ่งใดๆ ก็ตามที่สามารถใช้เป็นคีย์ของพจนานุกรม Go ได้
บันทึก/บันทึก
ใหม่ ตัวจัดการการทิ้ง เป็นตัวจัดการที่ไม่เคยเปิดใช้งานและจะละทิ้งเอาต์พุตอยู่เสมอ
ชั้น и ระดับตัวแปร ตอนนี้ใช้งานอินเทอร์เฟซแล้ว การเข้ารหัส.TextAppender.
คณิตศาสตร์/*
- คณิตศาสตร์/ใหญ่: ลอย, Int и หนู ตอนนี้ใช้งานอินเทอร์เฟซแล้ว การเข้ารหัส.TextAppender.
- คณิตศาสตร์/แรนด์: การเรียกใช้ฟังก์ชันระดับสูงสุดที่ไม่สนับสนุนอีกต่อไป เมล็ดพันธุ์ ไม่มีผลอะไรอีกต่อไป. หากต้องการคืนพฤติกรรมเดิม คุณสามารถใช้ การตั้งค่า GODEBUG แรนด์ซีดน็อป=0. บริบทเพิ่มเติมใน เสนอ 67273.
- คณิตศาสตร์/แรนด์/v2: ชะชะช่า 8 и PCG ตอนนี้ใช้งานอินเทอร์เฟซแล้ว การเข้ารหัส.binaryappender.
สุทธิ
ฟังคอนดิก ตอนนี้ใช้ MPTCP ตามค่าเริ่มต้นบนระบบที่รองรับ (ปัจจุบันใช้เฉพาะ Linux เท่านั้น)
IP ตอนนี้ใช้งานอินเทอร์เฟซแล้ว การเข้ารหัส.TextAppender.
สุทธิ/http
ข้อจำกัดได้เปลี่ยนแปลงแล้ว การขนส่ง เพื่อรับข้อมูลตอบกลับจำนวน 1xx รายการ ตามคำร้องขอ ก่อนหน้านี้การดำเนินการนี้จะหยุดการร้องขอและส่งกลับข้อผิดพลาดหลังจากได้รับการตอบสนอง 5xx มากกว่า 1 ครั้ง ตอนนี้จะส่งกลับข้อผิดพลาดเฉพาะในกรณีที่ขนาดรวมของการตอบสนอง 1xx ทั้งหมดเกินการตั้งค่าคอนฟิก การขนส่ง.MaxResponseHeaderBytes.
นอกจากนี้เมื่อคำขอมีจุดติดตาม เน็ต/http/httptrace.ClientTrace.ได้รับคำตอบ 1xxขณะนี้ไม่มีการจำกัดจำนวนคำตอบทั้งหมด 1xx แล้ว ฮุก Got1xxResponse สามารถส่งคืนข้อผิดพลาดเพื่อหยุดการร้องขอได้
การขนส่ง и เซิร์ฟเวอร์ ตอนนี้มีฟิลด์ HTTP2 ที่ช่วยให้สามารถกำหนดค่าการตั้งค่าโปรโตคอล HTTP/2 ได้
ทุ่งใหม่ เซิร์ฟเวอร์.โปรโตคอล и การขนส่ง.โปรโตคอล ให้วิธีง่ายๆ ในการกำหนดค่าโปรโตคอล HTTP ที่เซิร์ฟเวอร์หรือไคลเอนต์ใช้
สามารถกำหนดค่าเซิร์ฟเวอร์และไคลเอนต์ให้รองรับการเชื่อมต่อ HTTP/2 ที่ไม่ได้เข้ารหัสได้
เมื่อ เซิร์ฟเวอร์.โปรโตคอล มี UnencrypterHTTP2 เซิร์ฟเวอร์จะยอมรับการเชื่อมต่อ HTTP/2 บนพอร์ตที่ไม่เข้ารหัส เซิร์ฟเวอร์สามารถยอมรับทั้ง HTTP/1 และ HTTP/2 ที่ไม่เข้ารหัสบนพอร์ตเดียวกันได้
เมื่อ การขนส่ง.โปรโตคอล มี UnencryptedHTTP2 และไม่มี HTTP1 การขนส่งจะใช้ HTTP/2 ที่ไม่เข้ารหัสสำหรับที่อยู่ http://. หากกำหนดค่าการขนส่งให้ใช้ทั้ง HTTP/1 และ HTTP/2 ที่ไม่เข้ารหัส การขนส่งจะใช้ HTTP/1
การสนับสนุนสำหรับ HTTP/2 ที่ไม่เข้ารหัสใช้ "HTTP/2 พร้อม Forward-Learning" (RFC 9113, ส่วนที่ 3.3) ส่วนหัวที่ไม่ใช้แล้ว "อัปเกรด: h2c" ไม่ได้รับการรองรับ
เน็ต/เน็ตทิป
addr, ที่อยู่พอร์ต и อุปสรรค ตอนนี้ใช้งานอินเทอร์เฟซแล้ว การเข้ารหัส.binaryappender и การเข้ารหัส.TextAppender.
เน็ต/url
URL ตอนนี้ยังใช้อินเทอร์เฟซอีกด้วย การเข้ารหัส.binaryappender.
ระบบปฏิบัติการ/ผู้ใช้
บน Windows ปัจจุบัน ตอนนี้สามารถใช้งานใน Windows Nano Server ได้แล้ว การใช้งานได้รับการอัปเดตเพื่อหลีกเลี่ยงการใช้ฟังก์ชันจากไลบรารี NetApi32 ซึ่งไม่มีใน Nano Server
บน Windows ปัจจุบัน, ค้นหา и รหัสการค้นหา ตอนนี้รองรับบัญชีผู้ใช้บริการภายในต่อไปนี้:
- NT ระบบอำนาจ
- สำนักงาน ก.พ. บริการท้องถิ่น
- บริการ NT AUTHORITYNETWORK
บน Windows ปัจจุบัน ได้รับการเร่งความเร็วอย่างเห็นได้ชัดเมื่อผู้ใช้ปัจจุบันเข้าร่วมโดเมนที่ช้า ซึ่งเป็นกรณีทั่วไปสำหรับผู้ใช้ในองค์กรจำนวนมาก ประสิทธิภาพการใช้งานใหม่ในขณะนี้อยู่ในระดับมิลลิวินาที เมื่อเทียบกับการใช้งานครั้งก่อน ซึ่งอาจต้องใช้เวลาหลายวินาทีหรือแม้แต่หลายนาทีจึงจะเสร็จสมบูรณ์
บน Windows ปัจจุบัน ตอนนี้ส่งคืนผู้ใช้เจ้าของกระบวนการเมื่อเธรดปัจจุบันกำลังปลอมตัวเป็นผู้ใช้รายอื่น ก่อนหน้านี้เกิดข้อผิดพลาดขึ้น
regexp
นิพจน์ทั่วไป ตอนนี้ใช้งานอินเทอร์เฟซแล้ว การเข้ารหัส.ตัวแปลงข้อความ.
รันไทม์
ฟังก์ชัน โกรูท ไม่ได้รับการสนับสนุนอีกต่อไปแล้ว ในสภาพแวดล้อมใหม่กว่า คุณควรใช้เส้นทางระบบเพื่อกำหนดไบนารี "go" และใช้ go env GOROOT เพื่อกำหนด GOROOT
เงื่อนไข
บรรจุภัณฑ์ เงื่อนไข เพิ่มฟังก์ชันต่างๆ สำหรับการทำงานกับตัววนซ้ำ:
- . ส่งคืนตัววนซ้ำบนบรรทัดที่คั่นด้วยบรรทัดใหม่ในสตริง
- สปลิทเซค ส่งคืนตัววนซ้ำสำหรับสตริงย่อยทั้งหมดของสตริงที่คั่นด้วยตัวคั่น
- แยกหลังจากSeq ส่งคืนตัววนซ้ำผ่านสตริงย่อยของสตริง โดยแยกออกหลังจากการเกิดขึ้นแต่ละครั้งของตัวคั่น
- ฟิลด์ Seq ส่งคืนตัววนซ้ำผ่านสตริงย่อยของสตริงรอบลำดับของอักขระช่องว่างตามที่กำหนดยูนิโค้ด.IsSpace
- ฟิลด์ฟังก์ชันSeq ส่งคืนตัววนซ้ำบนสตริงย่อยของสตริงรอบๆ ลำดับของจุดโค้ด Unicode ที่เป็นไปตามเงื่อนไข
ซิงค์
การดำเนินงาน แผนที่ซิงค์ มีการเปลี่ยนแปลงเพื่อปรับปรุงประสิทธิภาพโดยเฉพาะการเปลี่ยนแปลงพจนานุกรม ตัวอย่างเช่น การแย่งชิงการเปลี่ยนแปลงชุดที่ไม่ต่อเนื่องนั้นมีโอกาสเกิดขึ้นน้อยลงในพจนานุกรมขนาดใหญ่ และไม่จำเป็นต้องใช้เวลาในการสร้างขึ้นอีกต่อไปเพื่อให้บรรลุภาระพจนานุกรมการแย่งชิงที่ต่ำ
หากคุณพบปัญหาใดๆ ให้ตั้งค่า GOEXPERIMENT=nosynchashtriemap ในระหว่างการสร้างเพื่อกลับไปใช้การใช้งานแบบเดิม และโปรด กรอกแบบฟอร์มปัญหา.
การทดสอบ
วิธีการใหม่ T.บริบท и ข.บริบท ส่งคืนบริบทที่ถูกละทิ้งหลังจากการทดสอบเสร็จสิ้นและก่อนที่จะดำเนินการฟังก์ชันการล้างการทดสอบ
วิธีการใหม่ ต.ชเดียร์ и บ.ชเดียร์ สามารถใช้เพื่อเปลี่ยนไดเร็กทอรีการทำงานระหว่างการทดสอบหรือการประเมินประสิทธิภาพได้
ข้อความ/เทมเพลต
ตอนนี้เทมเพลตรองรับ range-over-func และ range-over-int แล้ว
เวลา
เวลา ตอนนี้ใช้งานอินเทอร์เฟซแล้ว การเข้ารหัส.binaryappender и การเข้ารหัส.TextAppender.
พอร์ต
ลินุกซ์
อย่างที่เป็นอยู่ ประกาศ ตามบันทึกการเปิดตัว Go 1.23 นั้น Go 1.24 ต้องใช้เคอร์เนล Linux เวอร์ชัน 3.2 ขึ้นไป
ดาร์วิน
Go 1.24 เป็นรุ่นสุดท้ายที่จะสามารถทำงานบน macOS 11 Big Sur ได้ Go 1.25 จะต้องใช้ macOS 12 Monterey ขึ้นไป
WebAssembly
มีการเพิ่มคำสั่งคอมไพเลอร์ go:wasmexport ให้กับโปรแกรม Go เพื่อส่งออกฟังก์ชันไปยังโฮสต์ WebAssembly
ใน WebAssembly System Interface Preview 1 (GOOS=wasip1 GOARCH=wasm) Go 1.24 รองรับการสร้างโปรแกรม Go เป็น เครื่องปฏิกรณ์/ห้องสมุด โดยระบุแฟล็กการสร้าง -buildmode=c-shared
ตอนนี้มีการอนุญาตให้ใช้ประเภทต่างๆ มากขึ้นเป็นประเภทอาร์กิวเมนต์หรือผลลัพธ์สำหรับฟังก์ชัน go:wasmimport โดยเฉพาะอย่างยิ่ง อนุญาตให้ใช้ bool, string, uintptr และตัวชี้ไปยังประเภทบางประเภทได้ (ดูรายละเอียดใน เอกสาร) พร้อมกับชนิดจำนวนเต็มและจุดลอยตัวขนาด 32 บิตและ 64 บิต และ unsafe.Pointer ซึ่งได้รับอนุญาตแล้ว ประเภทเหล่านี้ยังได้รับอนุญาตให้เป็นประเภทอาร์กิวเมนต์หรือผลลัพธ์สำหรับฟังก์ชัน go:wasmexport อีกด้วย
ไฟล์สนับสนุนสำหรับ WebAssembly ได้ถูกย้ายไปยัง lib/wasm จาก misc/wasm แล้ว
ขนาดหน่วยความจำเริ่มต้นลดลงอย่างมาก โดยเฉพาะอย่างยิ่งสำหรับแอปพลิเคชัน WebAssembly ขนาดเล็ก
Windows
พอร์ต windows/arm แบบ 32 บิต (GOOS=windows GOARCH=arm) ถูกทำเครื่องหมายว่าเสียหาย รายละเอียดใน #70705
ที่มา: linux.org.ru
