Viết chương trình Go Concurrent Go đầu tiên của bạn trên Ubuntu
Ngôn ngữ lập trình Go của Google đã có từ năm 2009 và năm 2012, ngôn ngữ đã đạt đến trạng thái v1.0 chính thức của nó. Trong những năm can thiệp đó, phần lớn đã thay đổi bao gồm cả ngôn ngữ được cài đặt như thế nào. Quay lại giai đoạn trứng nước, không có bất kỳ bản phân phối nhị phân chính thức nào và bạn phải xây dựng Go từ mã nguồn, đây là phương pháp được khuyến nghị vì ngôn ngữ thay đổi thường xuyên hoặc sử dụng gói được tạo sẵn cho bản phân phối Linux của bạn. Quay lại thì sự hỗ trợ của Windows bị hạn chế như là sự hỗ trợ cho các kiến trúc CPU khác với Intel.
Mọi thứ đã được cải thiện rất nhiều kể từ đó. Đối với Linux, có hai cách dễ dàng để cài đặt Go. Tải xuống bản xây dựng nhị phân Linux chính thức từ trang Tải xuống xuống hoặc chọn gói được tạo sẵn cho bản phân phối Linux của bạn. Cách dễ nhất để cài đặt Go on Ubuntu là sử dụng apt-get
:
sudo apt-get cài đặt golang
Khi Go được cài đặt, bạn có thể bắt đầu phát triển các chương trình. Một trong những chương trình Go đơn giản nhất là chương trình “Hello World!” Cổ điển. Sử dụng trình soạn thảo văn bản, tạo một tệp có tên " hellomte.go
" với mã Go ngắn sau:
gói chính nhập khẩu "fmt" func main () {fmt.Println ("Xin chào Công nghệ Dễ dàng hơn!")}
Kể từ v1.0 của Go, sự cần thiết cho các lệnh biên dịch và liên kết riêng lẻ đã được gỡ bỏ và các lệnh 8g
và 8l
cũ đã được thay thế bằng lệnh go
.
Để chạy hellomte.go
, mở một thiết bị đầu cuối và thay đổi thư mục vào thư mục chứa tệp mã nguồn, sau đó nhập:
đi chạy hellomte.go
Điều này sẽ biên dịch và chạy chương trình Go nhưng nó sẽ không tạo ra một nhị phân thực thi được. Để tạo một tệp nhị phân và sau đó chạy nó sử dụng lệnh go build
:
hãy xây dựng hellomte.go ./hellomte
Sức mạnh của đồng thời
Một trong những tính năng xác định của ngôn ngữ lập trình Go là hỗ trợ đồng thời cho phép một chương trình làm việc với nhiều tác vụ cùng một lúc. Song song, tương tự như đồng thời, cho phép một chương trình thực hiện nhiều tác vụ đồng thời, nhưng đồng thời đi thêm một bước nữa là nó cho phép các tác vụ riêng biệt này giao tiếp và tương tác. Kết quả là, Go cho phép các lập trình viên sử dụng toàn bộ các thiết kế đồng thời khác nhau bao gồm các nhóm công nhân, đường ống dẫn (nơi một nhiệm vụ xảy ra sau khi khác), và các tác vụ nền đồng bộ hoặc không đồng bộ. Nền tảng của sự đồng thời này là goroutine
kết hợp với channels
và câu lệnh select
của Go.
Đây là một chương trình Go đơn giản in ra một chuỗi nhiều lần bằng cách sử dụng một goroutine đồng thời:
gói chính nhập khẩu ("fmt" "thời gian") func nói (s chuỗi) {for i: = 0; i <5; i ++ {fmt.Println (s)}} func chính () {go say ("Xin chào Hãy làm cho công nghệ dễ dàng hơn!") fmt.Println ("Ngủ một chút ...") time.Sleep (100 * time.Millisecond)}
Hàm say()
chỉ thực hiện một vòng lặp đơn giản để in ra chuỗi (tham số s
) năm lần. Điều thú vị là làm thế nào mà chức năng được gọi là. Thay vì chỉ gọi điện thoại say("Hello Make Tech Easier!")
Từ khóa được đặt ở phía trước của cuộc gọi hàm. Điều này có nghĩa là chức năng sẽ được chạy như một nhiệm vụ riêng biệt. Phần còn lại của hàm main()
sau đó chỉ ngủ một chút để dành thời gian cho goroutine
hoàn thành.
Đầu ra có thể làm bạn ngạc nhiên:
Như bạn có thể thấy hàm say()
được chạy như một goroutine
và trong khi nó đang được thiết lập, phần còn lại của hàm main()
tiếp tục, in ra Sleep a little...
và sau đó đi ngủ. Khi đó goroutine
hoạt động và bắt đầu in ra chuỗi năm lần. Cuối cùng chương trình kết thúc khi đạt đến giới hạn thời gian chờ.
Kênh truyền hình
goroutines
có thể giao tiếp bằng các kênh. Một kênh mở ra một đường truyền thông giữa hai phần khác nhau của chương trình Go. Thông thường một hàm sẽ được gọi là goroutine
và nếu nó cần gửi lại dữ liệu (nói từ một hoạt động mạng), nó có thể sử dụng một kênh để truyền dữ liệu đó. Nếu một phần khác của chương trình Go đang đợi dữ liệu đó, nó sẽ ngủ cho đến khi dữ liệu sẵn sàng. Các kênh được tạo bằng hàm make()
và chúng có thể được chuyển thành các tham số cho các goroutines
.
Hãy xem xét mã này:
gói chính nhập khẩu ("fmt") func nói (s chuỗi, c chan int) {var i int cho i = 0; i <5; i ++ {fmt.Println (s)} c <- i} func main () {c: = make (chan int) nói ("Hello Make Tech Easier!", c) sts: = <- c fmt.Println ( sts)}
Hàm say()
rất giống với ví dụ đầu tiên với ngoại lệ là tham số thứ hai là một kênh và sau khi in ra chuỗi, số lần lặp lại sẽ được gửi xuống kênh thông qua dòng mã c <- i
.
Chức năng chính tạo ra một kênh, khởi động hàm say()
như một goroutine
và sau đó đợi dữ liệu đi xuống kênh, sts := <- c
trước khi in kết quả.
Phần kết luận
Ngôn ngữ Go đã tiến triển đáng kể trong vài năm qua, nếu bạn chưa xem nó gần đây thì có lẽ bây giờ là thời điểm tốt!