ไวยากรณ์ของ Go ขึ้นอยู่กับองค์ประกอบที่คุ้นเคยของภาษา C โดยมีการยืมมาจากภาษา Python ภาษาค่อนข้างกระชับ แต่โค้ดอ่านและเข้าใจง่าย โค้ด Go ได้รับการคอมไพล์เป็นไฟล์ปฏิบัติการไบนารีแบบสแตนด์อโลนที่ทำงานแบบเนทิฟโดยไม่ต้องใช้เครื่องเสมือน (การทำโปรไฟล์ การดีบัก และระบบย่อยการตรวจจับปัญหารันไทม์อื่นๆ ถูกรวมเข้าด้วยกันเป็น
โปรเจ็กต์นี้ได้รับการพัฒนาในขั้นต้นโดยมุ่งเน้นไปที่การเขียนโปรแกรมแบบมัลติเธรดและการทำงานที่มีประสิทธิภาพบนระบบมัลติคอร์ รวมถึงการจัดเตรียมวิธีการระดับผู้ปฏิบัติงานสำหรับการจัดระเบียบการประมวลผลแบบขนานและการโต้ตอบระหว่างวิธีการดำเนินการแบบขนาน ภาษายังให้การป้องกันในตัวต่อบล็อกหน่วยความจำที่จัดสรรมากเกินไป และให้ความสามารถในการใช้ตัวรวบรวมขยะ
หลัก
- แพ็คเกจ crypto/tls มีการเปิดใช้งานการรองรับโปรโตคอลตามค่าเริ่มต้น
TLS ฮิต . เพิ่มแพ็คเกจใหม่ "crypto/ed25519" พร้อมรองรับลายเซ็นดิจิทัล Ed25519 - เพิ่มการรองรับคำนำหน้าตัวอักษรตัวเลขใหม่เพื่อกำหนดเลขฐานสอง (เช่น 0b101), ฐานแปด (0o377), จินตภาพ (2.71828i) และจุดลอยตัวฐานสิบหก (0x1p-1021) และความสามารถในการใช้อักขระ "_" เพื่อแยกตัวเลขด้วยสายตา เป็นจำนวนมาก (1_000_000);
- ข้อจำกัดในการใช้เฉพาะตัวนับที่ไม่ได้ลงนามในการดำเนินการกะได้ถูกลบออกแล้ว ซึ่งจะช่วยหลีกเลี่ยงการแปลงเป็นประเภท uint ที่ไม่จำเป็น ก่อนที่จะใช้ตัวดำเนินการ “‹‹” และ “››”
- เพิ่มการรองรับแพลตฟอร์ม Illumos (GOOS=illumos) รับประกันความเข้ากันได้กับแพลตฟอร์ม Android 10 ข้อกำหนดสำหรับเวอร์ชันขั้นต่ำของ FreeBSD (11.2) และ macOS (10.11 “El Capitan”) ได้รับการเพิ่มขึ้น
- การพัฒนาระบบโมดูลใหม่อย่างต่อเนื่องซึ่งสามารถใช้เป็นทางเลือกแทน GOPATH ตรงกันข้ามกับแผนที่ประกาศก่อนหน้านี้ใน Go 1.13 ระบบนี้ไม่ได้เปิดใช้งานตามค่าเริ่มต้น และจำเป็นต้องเปิดใช้งานผ่านตัวแปร GO111MODULE=on หรือใช้บริบทที่โมดูลจะถูกนำไปใช้โดยอัตโนมัติ ระบบโมดูลใหม่มีคุณสมบัติรองรับการกำหนดเวอร์ชันแบบรวม ความสามารถในการจัดส่งแพ็คเกจ และการจัดการการพึ่งพาที่ได้รับการปรับปรุง ด้วยโมดูล นักพัฒนาจะไม่เชื่อมโยงกับการทำงานภายในแผนผัง GOPATH อีกต่อไป สามารถกำหนดการขึ้นต่อกันของเวอร์ชันได้อย่างชัดเจน และสร้างบิลด์ที่ทำซ้ำได้
ไม่เหมือนกับรีลีสก่อนหน้านี้ แอปพลิเคชันอัตโนมัติของระบบใหม่จะทำงานเมื่อมีไฟล์ go.mod อยู่ในไดเร็กทอรีการทำงานปัจจุบันหรือไดเร็กทอรีพาเรนต์เมื่อรันคำสั่ง go รวมถึงเมื่ออยู่ในไดเร็กทอรี GOPATH/src มีการเพิ่มตัวแปรสภาพแวดล้อมใหม่: GOPRIVATE ซึ่งกำหนดเส้นทางของโมดูลที่สามารถเข้าถึงได้โดยสาธารณะ และ GOSUMDB ซึ่งระบุพารามิเตอร์การเข้าถึงฐานข้อมูลการตรวจสอบสำหรับโมดูลที่ไม่อยู่ในรายการในไฟล์ go.sum
- คำสั่ง "go" ตามค่าเริ่มต้นจะโหลดโมดูลและตรวจสอบความสมบูรณ์โดยใช้โมดูลมิเรอร์และฐานข้อมูลเช็คซัมที่ดูแลโดย Google (proxy.golang.org, sum.golang.org และ index.golang.org)
- การสนับสนุนเฉพาะแพ็คเกจไบนารีถูกยกเลิก การสร้างแพ็คเกจในโหมด “//go:binary-only-package” ขณะนี้ส่งผลให้เกิดข้อผิดพลาด
- เพิ่มการรองรับส่วนต่อท้าย "@patch" ให้กับคำสั่ง "go get" ซึ่งบ่งชี้ว่าโมดูลควรได้รับการอัปเดตเป็นรุ่นบำรุงรักษาล่าสุด แต่ไม่มีการเปลี่ยนแปลงเวอร์ชันหลักหรือเวอร์ชันรองในปัจจุบัน
- เมื่อดึงข้อมูลโมดูลจากระบบควบคุมต้นทาง คำสั่ง "go" จะทำการตรวจสอบเพิ่มเติมในสตริงเวอร์ชัน โดยพยายามจับคู่หมายเลขเวอร์ชันหลอกกับข้อมูลเมตาจากที่เก็บ
- เพิ่มการสนับสนุน
การตรวจสอบข้อผิดพลาด (การตัดข้อผิดพลาด) ผ่านการสร้าง wrapper ที่ช่วยให้สามารถใช้ตัวจัดการข้อผิดพลาดมาตรฐานได้ ตัวอย่างเช่น,แมลง "e" สามารถล้อมรอบข้อผิดพลาด "w" ได้โดยการระบุวิธีการแกะ ส่งคืน "w" โปรแกรมมีทั้งข้อผิดพลาด "e" และ "w" และการตัดสินใจจะขึ้นอยู่กับข้อผิดพลาด "w" แต่ "e" ให้บริบทเพิ่มเติมสำหรับ "w" หรือตีความแตกต่างออกไป - ประสิทธิภาพของส่วนประกอบรันไทม์ได้รับการปรับให้เหมาะสม (เพิ่มความเร็วสูงสุดถึง 30% ได้รับการสังเกต) และมีการใช้การคืนหน่วยความจำที่ก้าวร้าวมากขึ้นไปยังระบบปฏิบัติการ (ก่อนหน้านี้ หน่วยความจำถูกส่งคืนหลังจากห้านาทีขึ้นไป แต่ตอนนี้ในทันที หลังจากลดขนาดฮีปแล้ว)
ที่มา: opennet.ru