[Golang cơ bản] Giới thiệu về Golang
Post on: 2023-03-23 00:40:43 | in: Golang
Giới thiệu về Golang (Go) - một ngôn ngữ lập trình có hiệu suất và hiệu quả về thời gian chạy tương đương với C / C ++.
- [Golang cơ bản] Cài đặt Golang
- [Golang cơ bản] Cài đặt không gian làm việc và chương trình Hello World trong Golang
- [Golang cơ bản] Tìm hiểu về biến trong golang
Tổng quan
Đây là bài hướng dẫn đầu tiên giúp bạn làm quen với ngôn ngữ GOLANG. Go là một ngôn ngữ lập trình được viết tĩnh và biên dịch. Đây là một ngôn ngữ mã nguồn mở và được phát triển tại Google bởi
- Robert Griesemer
- Rob Pike
- Ken Thompson
Vì GO là một ngôn ngữ lập trình mã nguồn mở, nó được lưu trữ trên Github và mở cho bất kỳ ai có thể đóng góp.
Go có cú pháp giống C nhưng cung cấp tính an toàn bộ nhớ, thu gom rác và tính đồng thời tích hợp sẵn.
Lịch sử
GO đã có phiên bản ổn định đầu tiên vào năm 2011.
Điều gì làm cho GO khác biệt
Hãy cùng xem một số điều làm cho Golang khác biệt so với các ngôn ngữ lập trình khác.
Cú pháp đơn giản dễ sử dụng
GO có cú pháp giống C và cú pháp rất đơn giản. Nó dễ học với các khía cạnh nhỏ. Nó không quá tải tính năng và do đó, viết mã dễ đọc và dễ bảo trì hơn trong GO. Ngoài ra, GO chỉ có rất ít từ khóa so với các ngôn ngữ chính thống khác. Quy định GO đề cập đến 25 từ khóa.
https://golang.org/ref/spec#Keywords
Ngôn ngữ biên dịch với tốc độ biên dịch nhanh
GO biên dịch thành một tệp thực thi nguyên bản. Tốc độ biên dịch của nó rất nhanh và điều đó được quy attribut đến một số lý do. Bạn có thể kiểm tra liên kết này để biết thêm chi tiết liên quan đến tại sao GO biên dịch nhanh. Khi bạn xây dựng một chương trình GO, tệp nhị phân kết quả là điều đó. Không có các phụ thuộc khác. Bạn có thể đưa tệp nhị phân này sang bất kỳ nền tảng nào hỗ trợ GO và nó có thể được thực thi ở đó. Điều này khác biệt khi so sánh với các ngôn ngữ lập trình khác như JAVA, Python, nơi để tạo ra một tệp nhị phân độc lập có nhiều phụ thuộc cần được chú ý và đóng gói kèm theo. Không có khái niệm về thư viện liên kết động trong GO, thực tế nó hỗ trợ liên kết tĩnh. GO được liên kết tĩnh với tất cả các thư viện vào một tệp nhị phân độc lập duy nhất.
Ngôn ngữ kiểu tĩnh
Mặc dù GO có cú pháp rất gọn nhẹ, nó là một ngôn ngữ kiểu tĩnh và mạnh mẽ. Không có chuyển đổi ngầm định được phép trong ngôn ngữ. Vì nó là kiểu tĩnh, hầu hết các lỗi liên quan đến khớp kiểu không phù hợp được phát hiện trong quá trình biên dịch, khác với các ngôn ngữ như Python, Ruby, vv.
Thu gom rác
Go là một ngôn ngữ được thu gom rác. Điều đó có nghĩa là bạn không cần phải lo lắng về việc giải phóng bộ nhớ. Vì vậy, bạn không cần phải quan tâm đến câu lệnh malloc() và free() như trong C, C ++.
Tích hợp đồng thời
GO thông qua tính năng đồng thời tích hợp sẵn cố gắng giải quyết hai vấn đề chính liên quan đến các ngôn ngữ khác
-
Việc tạo luồng không hiệu quả về mặt bộ nhớ.
-
Giao tiếp giữa các luồng khó khăn với các vấn đề như khóa luồng, khóa chết, vv.
Cách tiếp cận của GO đối với đồng thời có thể được mô tả tốt nhất bằng cách
Do not communicate by sharing memory; instead, share memory by communicating
-
Goroutine - thực thi độc lập nhẹ để đạt được đồng thời / song song. Kích thước của nó bắt đầu từ 8kb so với luồng JAVA có kích thước khoảng 1 MB.
-
Channels - cung cấp đồng bộ hóa và giao tiếp giữa các goroutines.
Thư viện chuẩn
Thư viện chuẩn của GO phong phú về tính năng và hỗ trợ gần như mọi thứ cần thiết để xây dựng tất cả các loại ứng dụng. Cũng có rất nhiều gói được tạo bởi cộng đồng GO trên thư viện chuẩn của GO, sẵn sàng sử dụng và có sẵn trên Github.
Công cụ
Hỗ trợ công cụ cho GO là mạnh mẽ và phong phú. Nó có các công cụ để định dạng mã, kiểm tra đơn vị, phát hiện đua nhau, kiểm tra lỗi, công cụ phân tích bộ nhớ, công cụ để tạo tài liệu, v.v.
So sánh với các ngôn ngữ lập trình khác
Với tất cả những ưu điểm trên, nếu so sánh với các ngôn ngữ lập trình khác, bạn sẽ nhận thấy:
Với Java
- GO nhanh chóng như Java nhưng với cú pháp đơn giản hơn, dễ học hơn, viết và bảo trì mã GO dễ hơn so với Java.
Với C/C++
-
GO chậm hơn một chút so với C, nhưng lại có cú pháp đơn giản hơn, dễ học hơn và dễ bảo trì hơn so với C/C++.
-
GO cũng an toàn hơn so với C/C++ vì nó là một ngôn ngữ được thu gom rác và không cho phép các thao tác con trỏ khó chịu có mặt trong C/C++. Với ngôn ngữ được thu gom rác, bạn không phải lo lắng về các hoạt động malloc () và free ().
Với Python / Ruby / JavaScript
-
GO rất nhanh so với các ngôn ngữ lập trình này.
-
Phần đọc mã dễ hơn trong các ngôn ngữ này, nhưng GO là một ngôn ngữ được biên dịch và có kiểu tĩnh giúp bắt được một số lỗi lập trình khó chịu trong giai đoạn biên dịch.
Nhược điểm của GO
Hãy xem xét một số nhược điểm của GO nhé
Không có tính kế thừa trong GO
GO không có lớp (class). Nó có cấu trúc (struct). Mặc dù chức năng của cấu trúc khá tương đồng với lớp nhưng GO ưu tiên việc sử dụng tổ hợp (composition) hơn là kế thừa. GO cũng không hỗ trợ hệ thống phân cấp kiểu (type hierarchy). Nó không có các từ khóa như extends hoặc implements như trong JAVA. Vì vậy, trong thuật ngữ đó, GO không phải là một ngôn ngữ OOP thuần túy. Việc thiếu những tính năng này có thể khiến cho các lập trình viên đã quen với lập trình theo phong cách OOP cảm thấy lạ lẫm.
Không có Generic trong GO
Do thiếu Generic trong GO, nó yêu cầu bạn phải viết mã rất rõ ràng về những gì bạn muốn làm. Tuy nhiên, đã có các cuộc đàm phán để thêm hỗ trợ Generic cho GO trong tương lai gần.
Không có Polymorphism tại thời điểm biên dịch hoặc Function Overloading
Function Overloading không thể thực hiện được trong GO. Xem câu hỏi thường gặp (faq) tại https://golang.org/doc/faq#overloading để biết lý do. Theo câu hỏi thường gặp trên, việc không có tính năng này làm cho mọi thứ đơn giản hơn. Tuy nhiên, có một số giải pháp tạm thời để đạt được tính năng tương tự. Bạn có thể tham khảo liên kết này.
https://golangbyexample.com/function-method-overloading-golang/
Kết luận
Tóm tắt những gì chúng ta đã thảo luận cho đến nay
- Go là một ngôn ngữ có kiểu tĩnh với hiệu suất và hiệu quả thời gian chạy tương đương với C / C ++
- Cú pháp đơn giản thực sự và dễ viết mã như trong Python, Ruby
- Có tính chất concurrency (đồng thời) tích hợp sẵn với thư viện chuẩn tốt và công cụ phong phú.
- GO không phải là ngôn ngữ OOP thuần túy với một cách xử lý lỗi khác so với các ngôn ngữ chính thống khác
Đó là phần giới thiệu cơ bản về golang. Hy vọng bạn đã thích bài viết này. Xin vui lòng chia sẻ phản hồi hoặc cải thiện hoặc lỗi trong phần bình luận.