Linh vật của Go là một con gopher, được thiết kế bởi Renée French. | |
Mẫu hình | compiled, concurrent, imperative, structured |
---|---|
Thiết kế bởi | Robert Griesemer Rob Pike Ken Thompson |
Nhà phát triển | Google LLC. |
Xuất hiện lần đầu | 10 tháng 11 năm 2009; 14 năm trước |
Phiên bản ổn định | 1.15.2
/ 11 tháng 8 năm 2020; 4 năm trước |
Kiểm tra kiểu | strong, static, inferred, structural |
Ngôn ngữ thực thi | Go, assembly language, previously C (gc); C++ (gccgo) |
Hệ điều hành | Linux, macOS, FreeBSD, NetBSD, OpenBSD, Windows, Plan 9, DragonFly BSD, Solaris |
Giấy phép | BSD-style + patent grant |
Phần mở rộng tên tập tin | .go |
Trang mạng | golang |
Các bản triển khai lớn | |
gc, gccgo | |
Ảnh hưởng từ | |
Alef, APL, BCPL, C, CSP, Limbo, Modula, Newsqueak, Oberon, occam, Pascal, Python, Smalltalk | |
Ảnh hưởng tới | |
Crystal |
Go là ngôn ngữ lập trình mới được Google phát triển, nhằm khai thác tối đa hiệu suất của các bộ vi xử lý đa lõi và cải thiện khả năng đa nhiệm.
Khởi nguồn ngôn ngữ Go
Ngày 21 tháng 9 năm 2007, ba nhà sáng lập Robert Griesemer, Rob Pike và Ken Thompson bắt đầu thiết lập các tiêu chí cho một ngôn ngữ lập trình mới. Chỉ sau vài ngày, những tiêu chí này được chấp thuận và một kế hoạch phát triển ngôn ngữ mới đã được định hình. Công việc thiết kế Go, còn được biết đến với tên gọi Golang, được tiến hành song song với các dự án khác. Đến tháng Một năm 2008, Ken Thompson đã bắt tay vào xây dựng một trình biên dịch ngôn ngữ C để thử nghiệm các ý tưởng. Đến giữa năm 2008, ngôn ngữ này trở thành dự án toàn thời gian và được đầu tư đầy đủ để phục vụ sản phẩm. Vào tháng 5/2008, Ian Taylor đã phát triển độc lập một GCC front-end cho Go dựa trên bản nháp của đặc tả ngôn ngữ này. Russ Cox gia nhập vào cuối năm 2008, góp phần hiện thực hóa ngôn ngữ và các thư viện của nó. Vào ngày 10/11/2009, Go trở thành một dự án mã nguồn mở, thu hút nhiều đóng góp từ cộng đồng.
Việc tận dụng tối đa sức mạnh của bộ xử lý đa lõi và phần cứng thế hệ mới với các ngôn ngữ lập trình hiện tại như C, C++, Java... được xem là khó khả thi do các hạn chế vốn có của chúng. Từ trước đến nay, các vấn đề xử lý đa lõi chủ yếu là thách thức của hệ điều hành.
Google giới thiệu ngôn ngữ Go như một giải pháp mới cho việc xử lý đa lõi. Thay vì chỉ hệ điều hành quản lý tài nguyên và xử lý, phần mềm cũng có thể trực tiếp tương tác với nền tảng đa lõi, giúp tăng tốc độ xử lý đáng kể.
Đặc điểm thiết kế
Cú pháp
Cú pháp của Go tương tự như ngôn ngữ C nhưng có nhiều cải tiến để tăng tính an toàn và cú pháp dễ đọc hơn. Go cho phép khai báo và khởi tạo biến đồng thời mà không cần chỉ định kiểu dữ liệu, khác với ngôn ngữ C. Ngoài ra, Go không yêu cầu kết thúc dòng lệnh bằng dấu chấm phẩy và hỗ trợ trả về nhiều giá trị từ một hàm.
Ví dụ
Xin chào thế giới
package main import 'fmt' func main() { fmt.Println('Xin chào, Thế giới') }
Ví dụ về việc trả về nhiều giá trị
package main import 'fmt' // Chữ ký hàm với `(int, int)` cho biết hàm này trả về 2 giá trị kiểu int func vals() (int, int) { return 3, 7 } func main() { // Sử dụng hai biến a và b để nhận giá trị từ hàm vals() a, b:= vals() fmt.Println(a) fmt.Println(b) // Chỉ nhận một phần giá trị trả về bằng cách sử dụng ký hiệu `_` _, c:= vals() fmt.Println(c) }
Ví dụ về xử lý đồng thời (concurrency)
package main import ( 'fmt' ) var ( naturalChan = make(chan int) squaredChan = make(chan int) items = make([]map[int]int, 10) ) func natural() { fori:= range items { naturalChan <- i } close(naturalChan) } func square() { for _ = range items { x:= <-naturalChan squaredChan <- x * x } close(squaredChan) } func main() { go natural() go square() for _ = range items { select { case squared:= <-squaredChan: fmt.Printf('Bình phương %d\n', squared) } } }
Ý nghĩa tên gọi
Go bắt nguồn từ tên của công ty Google.