Tổng quan về Golang?Golang là gì? Tại sao nên dùng Golang? – NordicCoder

Chắc có nhiều bạn thắc mắc tại sao một ngôn ngữ lập trình mà lại có biểu tượng là một linh vật? Và ngôn ngữ đó là gì? Bài viết dưới đây sẽ giải thích cho các bạn Golang là gì đồng thời nêu rõ lý do tại sao chúng ta nên sử dụng nó.

Ngôn ngữ mã nguồn mở

Go là một ngôn ngữ lập trình mã nguồn mở được tạo ra bởi Google. Phiên bản ổn định được phát hành vào năm 2011.

Điều đó có nghĩa là Go là một ngôn ngữ lập trình mã nguồn mở?

Thì như mình đã đề cập ở trên Go là một ngôn ngữ lập trình mã nguồn mở. Đồng thời bạn có thể đóng góp cho nó bằng cách tạo các đề xuất mới, sửa lỗi, làm cho nó nhanh hơn. Nó giống như một sinh vật đang phát triển trước mặt bạn.

Golang là gì? Ai là người tạo ra ngôn ngữ lập trình Golang?

Robert Griesemer, Rob Pike và Ken Thompson bắt đầu phác thảo các mục tiêu cho một ngôn ngữ mới trên bảng trắng vào ngày 21 tháng 9 năm 2007. Trong vài ngày, các mục tiêu đã giải quyết thành một kế hoạch để làm một cái gì đó và một ý tưởng công bằng về những gì nó sẽ được. Thiết kế tiếp tục bán thời gian song song với công việc không liên quan. Đến tháng 1 năm 2008, Ken đã bắt đầu làm việc với một trình biên dịch để khám phá các ý tưởng; nó tạo mã C làm đầu ra của nó. Vào giữa năm nay, ngôn ngữ đã trở thành một dự án toàn thời gian và đã giải quyết đủ để thử một trình biên dịch sản xuất. Vào tháng 5 năm 2008, Ian Taylor đã độc lập bắt đầu trên giao diện người dùng GCC cho Go bằng cách sử dụng thông số kỹ thuật dự thảo. Russ Cox đã tham gia vào cuối năm 2008 và giúp chuyển ngôn ngữ và thư viện từ nguyên mẫu sang thực tế.

Go đã trở thành một dự án nguồn mở công khai vào ngày 10 tháng 11 năm 2009. Vô số người trong cộng đồng đã đóng góp ý tưởng, thảo luận và mã.

Hiện nay có hàng triệu lập trình viên Go gophers trên toàn thế giới, và có nhiều hơn mỗi ngày. Thành công của Go đã vượt xa sự mong đợi của chúng tôi.

Thiết kế Golang được lấy cảm hứng từ các ngôn ngữ như Algol, Pascal, C, Modula, Oberon, Smalltalk và Newsqueak.

Go được kế thừa hầu hết từ ngôn ngữ Oberon và cú pháp của nó là từ C. OOP Go giống với Smalltalk hơn nhưng trong Go, bạn có thể đính kèm các phương thức với bất kỳ loại nào. Và đồng thời chủ yếu là từ Newsqueak, một ngôn ngữ cũng từ Rob Pike và được truyền cảm hứng rất nhiều từ bài báo về CSP (Giao tiếp các quy trình liên tục).

Tại sao họ tạo ra ngôn ngữ lập trình Golang?

Ngôn ngữ nhanh như C, khó làm việc và không an toàn. Tốc độ biên dịch, dependencies và lỗi thời gian chạy là rất lớn. Một ngôn ngữ thông dịch như Ruby là an toàn nhưng nó chậm hơn và có nhiều phụ thuộc, một trong số đó là chính trình thông dịch. Ngoài ra, đối với Java, ví dụ, một máy ảo là cần thiết để chạy mã. Javascript và Node.js được ví như những đứa nhóc tuổi teen; phải được giải thích, gõ yếu và không an toàn để làm việc (mặc dù có một số hướng có thể có như TypeScript hoặc biên dịch trực tiếp sang Javascript từ các ngôn ngữ an toàn khác).

Ngoài ra, như một ví dụ, Java trở nên quá phức tạp và dài dòng để viết. Có nhiều từ khóa có thể được đoán từ ngữ cảnh mà ngôn ngữ xây dựng bên trong (được gọi là suy luận). Ruby rất vui khi làm việc với nó, tuy nhiên, nó không được thiết kế cho tốc độ. Javascript cho phép bạn giải phóng, tự nhiên và từ từ giết chết bạn (cơn ác mộng bảo trì, địa ngục gọi lại (thế giới trước khi chờ đợi không đồng bộ), không có giải pháp tích hợp nào cho an toàn).

Ví dụ, ngôn ngữ C biên dịch rất nhanh, tuy nhiên, bản thân ngôn ngữ chưa được thiết kế để biên dịch rất nhanh (Iithm không nói về trình biên dịch ở đây), vì vậy, các lập trình viên C có thể sử dụng sai các phương tiện ngôn ngữ để tạo các chương trình biên dịch chậm. Tuy nhiên, trong Go, nó được thiết kế để biên dịch nhanh ngay từ đầu. Vì vậy, rất khó để các lập trình viên Go tạo ra các chương trình biên dịch chậm so với các ngôn ngữ khác như C hoặc C ++.

Go loại bỏ tất cả những trở ngại như an toàn, tốc độ và dễ lập trình

  • Kết quả nhanh: Nó hoạt động như một ngôn ngữ được giải thích vì trình biên dịch nhanh. Bạn không nhận thấy rằng nó biên dịch. Bạn sẽ nghĩ rằng như thể bạn làm việc trong một ngôn ngữ được dịch như Ruby.
  • An toàn: Gõ mạnh và tĩnh và thu gom rác. Gõ mạnh có nghĩa là: Bạn có thể vượt qua mọi loại dữ liệu ở mọi nơi. Bạn cần phải rõ ràng. Gõ tĩnh có nghĩa là: Trình biên dịch biết loại của mọi biến. Trong Go không có chuyển đổi loại ngầm định, ví dụ, uint8 và uint16 là các loại khác nhau (trừ một số trường hợp).
  • Dễ dàng làm việc với: Nó súc tích, rõ ràng và dễ đọc.
  • Hiện đại: Hỗ trợ tích hợp sẵn trong ngôn ngữ cho các ứng dụng phân tán nối mạng đa lõi và hơn thế nữa.

Thành ngữ của Golang

  • Hãy hoàn thành công việc
  • Một cách làm việc khác nhau: Nó được gọi là thành ngữ của ngôn ngữ lập trình Golang
  • Hãy rõ ràng: Explicitness được ưa chuộng ngay cả khi nó không phải là DRY. Sao chép đôi khi được cho phép.
  • Xây dựng mọi thứ bằng cách soạn thảo chúng: Không được kế thừa từ những thứ khác, soạn thảo các hệ thống từ các thành phần đơn giản hơn. Mặc dù, nó đã kế thừa câu thần chú này từ triết lý Unix.

Những ai đang sử dụng Golang?

Có ít nhất nửa triệu lập trình viên trong cộng đồng Go.

Các công ty đáng chú ý nhất là Google, Docker, Dropbox, Heroku, Medium, Lyft, Uber và các công ty khác.

Golang là gì Golang là gì Golang là gì Golang là gì Golang là gì Golang là gì

Một số lợi thế của việc sử dụng Go:

Go có linh vật dễ thương nhất.  Đây là một trong những lợi thế cực lớn của Go mà tính tới hiện tại chưa ngôn ngữ nào lập trình có thể so sánh được :)).

Tổng hợp

  • Không có VM. Nó biên dịch trực tiếp vào mã máy (nếu chúng tôi loại trừ lắp ráp trung gian của Go), nhanh, nhanh và nhanh (tôi có nói nhanh không?).
  • Biên soạn nhanh. Thiết kế ngôn ngữ lập trình được xây dựng để biên soạn nhanh trong đầu.
  • Biên dịch đa nền tảng sang OS X, Linux, Windows, và nhiều thứ khác.
  • Chỉ tạo một đầu ra tệp thực thi sau khi biên dịch mà không có bất kỳ phụ thuộc nào, để bạn có thể tải nó lên bất cứ nơi nào Go hỗ trợ và chỉ cần chạy nó. Hoặc chỉ cần biên dịch nó ở đó sau khi bạn tải lên mã. Không phụ thuộc địa ngục.

An toàn

  • Mạnh mẽ và static typed.
  • Rác thu gom. Nó dọn sạch bụi bẩn của bạn sau bạn và tích hợp toàn bộ hệ thống thu gom rác vào nhị phân thực thi của bạn.
  • Đáng tin cậy. Bạn thực sự có thể tạo ra một phần mềm rất đáng tin cậy với Go. Bởi vì thiết kế ngôn ngữ vốn có ngăn cản bạn làm những thứ khủng khiếp với nó. Ví dụ: Nó có con trỏ nhưng chúng hầu như không nguy hiểm như trong C vì bộ nhớ đang được quản lý bởi Go và số học con trỏ không được khuyên mặc định.
  • OwTuy nhiên, độ tin cậy này chỉ dành cho phần biên dịch, trong thời gian chạy, điều khó chịu có thể xảy ra, nếu bạn muốn độ tin cậy thời gian chạy tối đa, ví dụ, bạn có thể thích Rust hơn.

Nghịch lý

  • Nó có một ngôn ngữ bắt buộc là một lợi thế và bất lợi cho một số người.
  • Hỗ trợ một loại lập trình hướng đối tượng khác nhau (OOP). Tôi đến từ nhiều ngôn ngữ OOP như Java, C #, Ruby, nhưng, Go có các thực tiễn tốt nhất từ ​​OOP và cho phép bạn lập trình khác nhau, theo cách Go.

Go muốn bạn soạn thảo những thứ không được kế thừa như trong các lang OOP khác.

  • Hỗ trợ giao diện (như trong OOP). Điều này giúp sáng tác mọi thứ. Có phải Polymorphism đá chuông chuông không? Go không bắt buộc bạn phải đánh dấu các loại của mình khi mà thực hiện điều này và giao diện đó, giao diện này, nó dựa trên chức năng mà loại hỗ trợ. Điều này làm tăng tính linh hoạt và khả năng kết hợp.
  • Go cho phép bạn đính kèm các chức năng cho bất kỳ loại. Tính linh hoạt này cho phép bạn soạn chương trình của mình từ những thứ nhỏ hơn. Khi một loại thực hiện các chức năng của một giao diện, nó nói rằng loại đó thỏa mãn giao diện đó và có thể được sử dụng ở những nơi mong muốn giao diện đó.
  • Hỗ trợ lập trình chức năng (FP). Ví dụ: Go hỗ trợ các hàm ẩn danh, các bao đóng và các hàm hạng nhất.

Concurrent

  • Tích hợp concurrent. Không có chủ đề nặng nề nhưng channels.
  • Khả năng lập trình và cấu trúc các chương trình của bạn một cách đồng bộ nhưng thực tế nó không đồng bộ. Các kênh che giấu sự phức tạp đó và cho phép bạn cấu trúc các chương trình của mình theo cách dễ bảo trì hơn.

Thư viện chuẩn

  • Hầu như tất cả những thứ được xây dựng trong thư viện tiêu chuẩn của nó (là thư viện đi kèm với Go theo mặc định) như tìm nạp HTTP, phân tích cú pháp JSON và mã hóa. Vì vậy, điều này làm cho bạn nhanh hơn và ngăn ngừa sự phân mảnh trong hệ sinh thái (hầu hết thời gian).

Công cụ

  • Công cụ dòng lệnh tích hợp tuyệt vời. Tự động định dạng mã của bạn, kiểm tra các vấn đề về tình trạng chủng tộc, tài liệu tự động, báo cáo phạm vi kiểm tra, công cụ tái cấu trúc, v.v.
  • Công cụ ví dụ: go fmt tự động sắp xếp lại mã của bạn cho bạn sau mỗi lần lưu.

Golang là gì

Trước khi “go fmt”

 

Golang là gì

Sau khi “go fmt”

Ví dụ: go lint đưa ra các đề xuất để cải thiện mã Go của bạn.

Một số nhược điểm của việc sử dụng Go:

  • Không hỗ trợ thuốc generic. Thật ra, tôi không coi đây là một bất lợi mặc dù tôi đã đặt nó ở đây. Bởi vì nó cho phép bạn tạo một mã rất rõ ràng. Quá nhiều trừu tượng sai đi kèm với một chi phí khó hiểu. Generics là tốt ở một mức độ nào đó tuy nhiên họ rất cởi mở để sử dụng sai và tôi đã thấy điều này trong hành động trong nhiều năm. Vì vậy, tôi đã không ở trong trại hỗ trợ thuốc generic trong Go. Tuy nhiên, nhóm Go vẫn đang xem xét thêm hỗ trợ thuốc generic cho ngôn ngữ.
  • Về khái quát (loại), có một bài viết tuyệt vời từ Shawn McGrath về vẻ đẹp của mã nguồn Doom tựa (trò chơi). Đặc biệt, đọc phần: Các mẫu tối thiểu của Nhật Bản, tôi không thể đồng ý nhiều hơn.
  • Err ở khắp mọi nơi. Bạn cần kiểm tra lỗi cho từng hàm tạo lỗi trong mã của bạn một cách rõ ràng. Tuy nhiên, tôi yêu các nhân chứng của chương trình Go. Trong những năm tới, có lẽ chúng tôi tìm thấy một giải pháp tao nhã cho việc này. Có một số đề xuất để thay đổi xử lý lỗi.

res, err := http.Client.Get(" http://ip.jsontest.com/ ")

// there are no try-catch exceptions in Go, check errors explicitly if err != nil { return err }

// ...

  • Không có chức năng hỗ trợ quá tải. Tuy nhiên, nó có thể được bắt chước ở một mức độ nào đó bằng các xác nhận loại.
  • Quy tắc nghiêm ngặt. Đôi khi là một lợi thế, đôi khi là một bất lợi. Ví dụ: Có thể cảm thấy hơi nặng nề khi bạn có các cấu trúc luôn thay đổi. Tuy nhiên, hầu hết các quy tắc này có thể được ghi đè bằng cách sử dụng các khả năng phản chiếu của Go.
  • Không quá mạnh mẽ an toàn thời gian chạy. Tuy nhiên, Go doesn mang lại mức độ an toàn, ví dụ, Rust cung cấp. An toàn của Go sườn chỉ dành cho thời gian biên dịch và chỉ trong một chừng mực nào đó cho thời gian chạy (ví dụ: số học con trỏ bị cấm). Vì vậy, nếu bạn cũng đang tìm kiếm sự an toàn cho thời gian chạy, hãy tìm đến Rust. Đi quan tâm nhiều hơn về năng suất của các lập trình viên. Đi = nhanh để sản xuất, Rust = an toàn trong sản xuất.
  • Số lượng gói nhỏ hơn so với các hệ sinh thái khác như Node.js và Ruby. Điều này là do thư viện chuẩn của Go đầy đủ các tính năng mà hầu hết không cần hỗ trợ của bên thứ ba. Tuy nhiên, số lượng các gói đang tăng lên.

Golang là gì

Và nếu bạn muốn tìm hiểu thêm về Golang thì Nordic Coder khoá học Golang cho lập trinh Back-End với có giá cực ưu đãi.  Giúp cho bạn có thêm kiến thức và kỹ năng về việc phân tích Back-End với Golang. Ngoài ra bạn có thể đăng ký thêm các khoá học lập trình online và offline tại Nordic Coder – Trung tâm dạy lập trình uy tín và chuyên nghiệp. Đồng thời, Nordic Coder còn là cầu nối nghề nghiệp IT giữa học viên và với các công ty công nghệ hàng đầu Việt Nam sau các khoá học lập trình.