Go (ngôn ngữ lập trình)

Bách khoa toàn thư mở Wikipedia
Bước tới: menu, tìm kiếm
Go
Golang.png
Linh vật của Go là một con gopher, được thiết kế bởi Renée French.[1]
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, 2009; 8 năm trước
Phiên bản mới nhất 1.9.2/ 25 tháng 10, 2017; 2 tháng trước[2]
Kiểm tra kiểu strong, static, inferred, structural[3][4]
Ngôn ngữ thực thi Go, assembly language, previously C (gc); C++ (gccgo)
Hệ điều hành Linux, macOS, FreeBSD, NetBSD, OpenBSD,[5] Windows, Plan 9,[6] DragonFly BSD, Solaris
Giấy phép BSD-style[7] + patent grant[8]
Phần mở rộng tên tập tin .go
Trang mạng golang.org
Các trình thực thi lớn
gc, gccgo
Ảnh hưởng bởi
Alef, APL,[9] BCPL,[9] C, CSP, Limbo, Modula, Newsqueak, Oberon, occam, Pascal, Python, Smalltalk[10]
Ảnh hưởng tới
Crystal

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 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[sửa | sửa mã nguồn]

Vào ngày 21/9/2007 bộ ba Robert Griesemer, Rob PikeKen 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ốt và một kế hoạch xây dựng một ngôn ngữ mới được định hình. Sau đó, công việc thiết kế Go được tiến hành song song với các công việc không có liên quan khác. Tháng Giêng 2008, Kem Thompson bắt tay xây dựng một trình biên dịch ra 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ư đủ để trở thành một trình biên dịch dùng cho production. 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.[11]


Việc khai thác 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ể đượ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 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.

Đặc điểm thiết kế[sửa | sửa mã nguồn]

Cú pháp[sửa | sửa mã nguồn]

Về mặt cú pháp thì Go rất giống ngôn ngữ C, nó được thiết kế để 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;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ụ[sửa | sửa mã nguồn]

Hello World[sửa | sửa mã nguồn]

 package main
 
 import "fmt"
 
 func main() {
   fmt.Println("Hello, World")
 }

Ví dụ về trả về nhiều hơn một giá trị[sửa | sửa mã nguồn]

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ề tương tranh (concurrency)[sửa | sửa mã nguồn]

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[sửa | sửa mã nguồn]

Go được xuất phát từ tên công ty Google[cần dẫn nguồn]. Hơn nữa, Go trong tiếng Anh có nghĩa là đi, tiến lên, mang một ý nghĩa tiến đến tầm cao mới

Tham khảo[sửa | sửa mã nguồn]

  1. ^ “FAQ — The Go Programming Language”. Golang.org. Truy cập ngày 25 tháng 6 năm 2013. 
  2. ^ “Release History - The Go Programming Language”. Truy cập ngày 25 tháng 8 năm 2017. 
  3. ^ “Why doesn't Go have "implements" declarations?”. golang.org. Truy cập ngày 1 tháng 10 năm 2015. 
  4. ^ Pike, Rob (22 tháng 12 năm 2014). “Rob Pike on Twitter”. Truy cập ngày 13 tháng 3 năm 2016. Go has structural typing, not duck typing. Full interface satisfaction is checked and required. 
  5. ^ “lang/go: go-1.4 – Go programming language”. OpenBSD ports. 23 tháng 12 năm 2014. Truy cập ngày 19 tháng 1 năm 2015. 
  6. ^ “Go Porting Efforts”. Go Language Resources. cat-v. 12 tháng 1 năm 2010. Truy cập ngày 18 tháng 1 năm 2010. 
  7. ^ “Text file LICENSE”. The Go Programming Language. Google. Truy cập ngày 5 tháng 10 năm 2012. 
  8. ^ “Additional IP Rights Grant”. The Go Programming Language. Google. Truy cập ngày 5 tháng 10 năm 2012. 
  9. ^ a ă Pike, Rob (24 tháng 4 năm 2014). “Hello Gophers”. Truy cập ngày 11 tháng 3 năm 2016. 
  10. ^ “The Evolution of Go”. Truy cập ngày 26 tháng 9 năm 2015. 
  11. ^ “Frequently Asked Questions (FAQ)”. 

Liên kết ngoài[sửa | sửa mã nguồn]