Go là một ngôn ngữ lập trình mới do Google thiết kế và phát triển. Nó được kỳ vọng sẽ giúp ngành công nghiệp phần mềm khai thác tối đa nền tảng đa lõi của bộ vi xử lý và hoạt động đa nhiệm tốt hơn.
Sự ra đời của ngôn ngữ Go
Vào ngày 21 tháng 9 năm 2007 bộ ba Robert Griesemer, Rob Pike và Ken Thompson bắt đầu phát thảo những tiêu chí cho một ngôn ngữ lập trình mới trên bảng trắng. Vài ngày sau đó, những tiêu chí đó được chấp nhận và một kế hoạch xây dựng một ngôn ngữ lập trình mới được định hình. Sau đó, công việc thiết kế Go(Còn có tên là Golang) được tiến hành song song với các công việc không liên quan khác. Tháng Một năm 2008, Kem Thompson bắt tay xây dựng một trình biên dịch ngôn ngữ C để thử nghiệm các ý tưởng. Vào giữa năm 2008, ngôn ngữ mới này trở thành một dự án toàn thời gian và được đầu tư đầy đủ để trở thành một trình biên dịch dùng cho sản phẩm. Vào tháng 5/2008, Ian Taylor đã độc lập phát triển 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 đã tham gia vào cuối năm 2008 và giúp hiện thực hoá ngôn ngữ này cũng như 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ở, và sau đó có rất nhiều cá nhân trong cộng đồng đã đóng góp ý tưởng cũng như mã nguồn cho dự án này.
Việc khai thác tối đa sức mạnh của các bộ xử lý đa lõi và phần cứng thế hệ mới đối với các ngôn ngữ hiện có được xem như là việc không thể làm được. Bởi những giới hạn vốn có của các ngôn ngữ lập trình trên máy tính như C, C++, Java,... Bấy lâu nay, các vấn đề xử lý đa lõi vẫn là chuyện của hệ điều hành.
Google đưa ra ngôn ngữ Go như là một cách tiếp cận khác về vấn đề xử lý đa lõi. Thay vì chỉ có hệ điều hành được phép cung cấp tài nguyên và xử lý, thì các phần mềm cũng có thể tương tác trực tiếp với nền tảng đa lõi giúp cho việc xử lý nhanh hơn rất nhiều.
Đặc điểm thiết kế
Cú pháp
Về mặt cú pháp thì Go rất giống ngôn ngữ C, tuy nhiên nó có nhiều thay đổi trong thiết kế để an toàn hơn và có cú pháp súc tích và dễ đọc. Go cho phép lập trình viên vừa khai báo và khởi tạo biến cùng một lúc mà không cần phải chỉ định kiểu dữ liệu i:=3
hoặc name:="Hello, world!"
, điều này trái ngược với cú pháp của ngôn ngữ C int i = 3;
và const char *s = "Hello, world!"
. Ở Cuối mỗi dòng lệnh cũng không cần kết thúc bằng dâu chấm phẩy và mỗi hàm có thể trả về nhiều hơn một giá trị.
Ví dụ
Hello World
package main
import "fmt"
func main() {
fmt.Println("Hello, World")
}
Ví dụ về trả về nhiều hơn một giá trị
package main
import "fmt"
// Phần (int, int)
trong chữ ký hàm thể hiện rằng
// hàm này trả về 2 giá trị kiểu int
func vals() (int, int) {
return 3, 7
}
func main() {
// Ở đây chúng ta sử dụng hai biến a và b để đón dữ liệu trả về
// từ hàm vals()
a, b:= vals()
fmt.Println(a)
fmt.Println(b)
// Ta cũng có thể chỉ nhận về một tập con của giá trị trả về
// bằng cách sử dụng ký hiệu `_`.
_, c:= vals()
fmt.Println(c)
}
Ví dụ về xử lý song song (concurrency)
package main
import (
"fmt"
)
var (
naturalChan = make(chan int)
squaredChan = make(chan int)
items = make([]map[int]int, 10)
)
func natural() {
for i:= 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("Squared %d\n", squared)
}
}
}
## Về tên gọi
**Go** được xuất phát từ tên công ty Google.
👁️
3 | 🔗 | 💖 | ✨ | 🌍 | ⌚
**Go** là một ngôn ngữ lập trình mới do Google thiết kế và phát triển. Nó được kỳ vọng sẽ giúp ngành công nghiệp phần mềm khai thác tối đa nền tảng đa lõi của
**C#** (**C Sharp**, đọc là _"xi-sáp"_) là một ngôn ngữ lập trình hướng đối tượng đa năng, mạnh mẽ được phát triển bởi Microsoft, C# là phần khởi đầu cho kế hoạch .NET của họ.
**Pascal** là một ngôn ngữ lập trình cho máy tính thuộc dạng mệnh lệnh và thủ tục, được Niklaus Wirth phát triển vào năm 1970. Pascal là ngôn ngữ lập trình đặc biệt thích hợp
**Python** () là ngôn ngữ lập trình bậc cao đa năng. Triết lý thiết kế của nó nhấn mạnh khả năng đọc mã bằng cách sử dụng thụt lề đáng kể. Python có kiểu động
thumb|**[[Phép tính lambda** là một hệ thống hình thức để định nghĩa hàm, ứng dụng hàm và đệ quy được Alonzo Church đề xuất vào những năm 193x.]] **Lý thuyết ngôn ngữ lập trình** (thường
**Scratch** là một ngôn ngữ lập trình mang tính giáo dục miễn phí dựa trên các khối ngôn ngữ lập trình trực quan (VPL) và trang web chủ yếu để giáo dục lập trình, với
nhỏ|Cbmain Trong khoa học máy tính, một **ngôn ngữ lập trình bậc cao** (tiếng Anh: _high-level programming language_) là một ngôn ngữ lập trình có sự trừu tượng hóa mạnh mẽ khỏi các chi tiết
**Java** (phiên âm Tiếng Việt: "_Gia-va_") là một ngôn ngữ lập trình hướng đối tượng, dựa trên lớp được thiết kế để có càng ít phụ thuộc thực thi càng tốt. Nó là ngôn ngữ
Đây là danh sách các ngôn ngữ lập trình đáng chú ý, được nhóm theo loại. Vì không có sơ đồ phân loại bao quát cho các ngôn ngữ lập trình, nên trong nhiều trường
**Ruby** là một ngôn ngữ lập trình hướng đối tượng, có khả năng phản ứng. Theo tác giả, Ruby chịu ảnh hưởng bởi Perl, Smalltalk, Eiffel, Ada và Lisp. Ruby cung cấp nhiều mẫu hình
**Swift** là một ngôn ngữ lập trình hướng đối tượng dành cho việc phát triển iOS và macOS, watchOS, tvOS và z/OS. được giới thiệu bởi Apple tại hội nghị WWDC 2014. Swift được mong
Mục đích của **danh sách các ngôn ngữ lập trình** này là bao gồm tất cả các ngôn ngữ lập trình hiện tại đáng chú ý, được sử dụng hiện tại và những ngôn ngữ
Trong phần mềm máy tính, **lập trình đa năng** (tiếng Anh: **general-purpose programming language**) là ngôn ngữ lập trình được thiết kế để sử dụng cho việc Các ngôn ngữ lập trình ban đầu được
**Scala** ( ) là một ngôn ngữ lập trình đa mẫu hình, được thiết kế để tích hợp các tính năng của lập trình hướng đối tượng với lập trình hàm Nó cũng có thể
**Cú pháp ngôn ngữ (lập trình) C** là tập hợp các quy tắc nhằm xác định cách thức để viết và dịch trong ngôn ngữ lập trình C. :Thí dụ:
// Dòng này sẽ
nhỏ|Mô hình ngôn ngữ máy được lập nên bởi nhà toán học, nhà thủy văn và lập trình viên Vladimir Mikhailovich Kazakov, nhân viên Máy tính của Viện Energosetproekt năm 1962-1972. **Ngôn ngữ máy** (còn
**Ngôn ngữ biên dịch** (tiếng Anh: _compiled language_) là ngôn ngữ lập trình có triển khai thường là trình biên dịch (bộ dịch tạo ra mã máy từ mã nguồn), chứ không phải trình thông
Trong lập trình máy tính, **Hợp ngữ** (hay **assembly**) thường được viết tắt là **asm** là bất kỳ ngôn ngữ lập trình cấp thấp nào có sự tương ứng rất mạnh giữa các tập lệnh
**Bộ trình dịch GNU** ( - thường được viết tắt thành **GCC**) là một tập hợp các trình biên dịch được thiết kế cho nhiều ngôn ngữ lập trình khác nhau. GCC là một thành
Trong lập trình hướng đối tượng, **giao thức** (tiếng Anh: _protocol_) hay **giao diện** (_interface_) là một phương tiện phổ biến để các đối tượng không liên quan giao tiếp với nhau. Đây là định
Python là ngôn ngữ lập trình đa năng ra đời năm 1991 do Guido van Rossum sáng tạo ra. Đây là ngôn ngữ lập trình với những điểm mạnh như dễ đọc, dễ nhớ, dễ
Lập trình ngầu hết xảygiống như một chú thỏ uyên bác và vui tính sẽ dẫn đường cho bạn đi vào xứ sở bí ẩn và kỳ diệu của máy vi tính, gặp gỡ những
Trong khoa học máy tính, **reflection** (có thể dịch là "phản tỉnh", "tự xét mình") là việc tiến trình có khả năng xem xét, nội quan, và sửa đổi kết cấu cùng với hành trạng
**OCaml** là dòng ngôn ngữ lập trình phổ dụng trong ngôn ngữ **Caml** (một dạng của ngôn ngữ lập trình ML), bắt đầu được Viện Nghiên cứu Khoa học Máy tính Quốc gia ở Pháp
**JavaScript**, theo phiên bản hiện hành, là một ngôn ngữ lập trình được phát triển từ các ý niệm nguyên mẫu. Ngôn ngữ này được dùng rộng rãi cho các trang web (phía người dùng)
**Smalltalk** là ngôn ngữ lập trình hướng đối tượng, kiểu dữ liệu động, và có tính phản xạ. Smalltalk được thiết kế nhằm bảo vệ tối đa các đặc điểm ngắn gọn và trong sáng
nhỏ|[[VirtualBox]] Trong khoa học máy tính, một **máy ảo** (**VM**) là một trình giả lập một hệ thống máy tính. Máy ảo dựa trên kiến trúc máy tính và cung cấp chức năng của máy
**Object Pascal** chỉ đến một nhánh của phát sinh hướng đối tượng của Pascal, được biết đến chủ yếu với vai trò ngôn ngữ lập trình chính của Delphi. ## Lịch sử ban đầu tại
nhỏ|phải|Biểu tượng hình con thằn lằn đôi khi được các [[lập trình viên dùng trong các chương trình viết bằng ngôn ngữ Lisp.]] **Lisp** là ngôn ngữ lập trình được phát triển từ rất sớm
**Free Pascal Compiler** (**FPC**) là một trình biên dịch cho các ngôn ngữ lập trình có liên quan chặt chẽ, Pascal và Object Pascal. Nó là phần mềm tự do được phát hành theo Giấy
**TEX**, (/tɛx/, /tɛk/) viết không định dạng là **TeX**, là một hệ thống sắp chữ được viết bởi Donald Knuth và giới thiệu lần đầu vào năm 1978. TeX được thiết kế với hai mục
**Erlang** ( ) là ngôn ngữ lập trình đa năng, đồng thời, là ngôn ngữ lập trình hàm, và là một hệ thống thu gom rác được phát triển tại Phòng thí nghiệm Khoa học
nhỏ|Giao tiếp phi ngôn ngữ giữa hai người tại [[Tây An, Trung Quốc.]] **Giao tiếp phi ngôn ngữ** giữa con người là sự giao tiếp bằng cách gửi và nhận những tín hiệu phi ngôn
**Delphi** là sản phẩm phần mềm sử dụng phương ngữ Delphi của ngôn ngữ lập trình Object Pascal và cung cấp môi trường phát triển tích hợp (IDE) để phát triển ứng dụng nhanh chóng
nhỏ|phải|Anders Hejlsberg **Anders Hejlsberg**, sinh năm 1960, là một kỹ sư phần mềm tài năng người Đan Mạch. Ông là người tham gia thiết kế nhiều ngôn ngữ lập trình và nhiều công cụ lập
thumb|thumbtime=5|_Preservation of the Sign Language_ (1913) nhỏ|Juan Pablo Bonet, _Reducción de las letras y arte para enseñar a hablar a los mudos_ (Madrid, 1620). **Ngôn ngữ ký hiệu** hay **ngôn ngữ dấu hiệu**, **thủ ngữ**
Trong khoa học máy tính, **cú pháp đặc biệt** (tiếng Anh: _syntactic sugar_, nghĩa đen là "kẹo đường cú pháp") là cú pháp trong một ngôn ngữ lập trình được thiết kế để làm cho
**Gofer** ("**Go**od **F**or **E**quational **R**easoning") là một trong các phần mềm được phát triển từ ngôn ngữ lập trình Haskell. Ngôn ngữ được sử dụng cho các mục đích giáo dục và hỗ trợ một
**Nhãn** (tiếng Anh: _label_) trong ngôn ngữ lập trình là một chuỗi các kí tự để xác định một vị trí trong mã nguồn. Trong hầu hết ngôn ngữ, nhãn mang hình thức như một
**QBasic**, viết tắt của **Quick Beginners All purpose Symbolic Instruction Code**, là một môi trường phát triển tích hợp (IDE) và trình thông dịch cho nhiều ngôn ngữ lập trình BASIC dựa trên QuickBASIC. Mã
**Brian Wilson Kernighan** (; sinh ngày 1 tháng 1 năm 1942) Ông là tác giả của nhiều chương trình Unix, bao gồm cả ditroff. Kernighan là đồng tác giả của AWK và AMPL ngôn ngữ
Như các bạn đã biết Cubetto là một robot giảng dạy các kỹ năng tư duy máy tính và những kiến thức cơ bản về lập trình máy tính mà không cần màn hình. Với
**Gỡ lỗi** (tiếng Anh: _Debugging_) là quá trình tìm ra lỗi khiến chương trình máy tính hay hệ thống không hoạt động đúng. Các kĩ thuật debug có thể bao gồm debug tương tác trực
Trang đầu _[[Phép giảng tám ngày_ in năm 1651 của nhà truyền giáo Alexandre de Rhodes. Bên trái là tiếng Latinh, bên phải là tiếng Việt viết bằng chữ Quốc ngữ.]] **Chữ Quốc ngữ** là
**Avram Noam Chomsky** (sinh ngày 7 tháng 12 năm 1928) là một giáo sư và trí thức công chúng người Mỹ, nổi danh nhờ các nghiên cứu về ngôn ngữ học, phê bình xã hội
Đây là danh sách nguồn gốc các thuật ngữ liên quan đến máy tính (hay **danh sách từ nguyên thuật ngữ máy tính**). Nó có liên quan đến cả phần cứng và phần mềm máy
NetBeans IDE 5.0, một môi trường phát triển hợp nhất nguồn mở. **Môi trường phát triển tích hợp** (tiếng Anh: _integrated development environment_; viết tắt: _IDE_) còn được gọi là "_Môi trường thiết kế hợp
**Adobe AIR** (trước đây là **Adobe Integration Runtime**) là một hệ thống runtime đa nền tảng được Adobe Systems phát triển để xây dựng các ứng dụng máy tính để bàn và ứng dụng di
**William Henry** **Gates III** (sinh ngày 28 tháng 10 năm 1955), thường được biết tới với tên **Bill Gates**, là một nam doanh nhân, nhà từ thiện kiêm tác giả người Mỹ. Ông được biết
**XML** (viết tắt từ , tức "**Ngôn ngữ đánh dấu mở rộng**") là ngôn ngữ đánh dấu với mục đích chung do W3C đề nghị, để tạo ra các ngôn ngữ đánh dấu khác. Đây