1. Trang chủ
  2. » Giáo Dục - Đào Tạo

LẬP TRÌNH NÂNG CAO (CO2039) bài tập lớn tìm hiểu về ngôn ngữ golang

52 34 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Tìm Hiểu Về Ngôn Ngữ Golang
Tác giả Trương Tuấn Anh, Đặng Quang Huy
Người hướng dẫn GVHD: Sinh viên
Trường học Đại học Bách Khoa Thành phố Hồ Chí Minh
Chuyên ngành Khoa Khoa Học Và Kỹ Thuật Máy Tính
Thể loại bài tập lớn
Năm xuất bản 2022
Thành phố Thành phố Hồ Chí Minh
Định dạng
Số trang 52
Dung lượng 703,3 KB

Cấu trúc

  • 1.1 Tổng quan (3)
  • 1.2 Lịch sử phát triển (3)
    • 1.2.1 Generic Programming (5)
    • 1.2.2 Các phiên bản đã phát hành (6)
  • 2.1 Đặc điểm (7)
    • 2.1.1 Open-source (7)
    • 2.1.2 Static-typing (7)
    • 2.1.3 Concurrency Support (8)
    • 2.1.4 Powerful Standard Library và Tool Set (8)
    • 2.1.5 Testing Capabilities (8)
    • 2.1.6 Garbage Collection (8)
    • 2.1.7 Kết Luận (8)
  • 2.2 Điểm mạnh (9)
    • 2.2.1 Easy Learning Curve (9)
    • 2.2.2 Simplicty và Speed (9)
    • 2.2.3 Package System (10)
    • 2.2.4 Multithreading và Concurrency (10)
    • 2.2.5 Inbuilt Testing và Profiling Framework (10)
  • 2.3 Những mặt hạn chế (11)
    • 2.3.1 Quá Đơn giản (11)
    • 2.3.2 Không hổ trợ Máy Ảo (Virtual Machine) (11)
    • 2.3.3 Errol Handeling có thể trở nên tốt hơn (11)
    • 2.3.4 Những lỗi còn tồn động với IOS Development (11)
    • 2.3.5 Những vấn đề về Runtime Safety (11)
    • 2.3.6 Một ngôn ngữ còn non trẻ (12)
  • 2.4 Cách sử dụng (12)
    • 2.4.1 Download Golang (12)
    • 2.4.2 Hello World! (13)
    • 2.4.3 Cấu trúc chương trình (14)
    • 2.4.4 Syntax cơ bản (14)
    • 2.4.5 Các kiểu Data (15)
    • 2.4.6 Variables (16)
    • 2.4.7 Constants (17)
    • 2.4.8 Operator (18)
    • 2.4.9 Decision making trong Go (20)
    • 2.4.10 Vòng lặp (25)
    • 2.4.11 Function (26)
    • 2.4.12 Array (28)
    • 2.4.13 Struct (0)
    • 2.4.14 Map (31)
    • 2.4.15 Gouroutine và Channels (32)
    • 2.4.16 Xuất Output ra màn hình (35)

Nội dung

Tổng quan

Go, hay còn gọi là Golang, là một ngôn ngữ lập trình mã nguồn mở do Google phát triển Đây là ngôn ngữ lập trình được biên dịch, kiểu tĩnh và rõ ràng, hỗ trợ nhiều mô hình lập trình và lập trình hướng đối tượng Go đang được sử dụng rộng rãi tại Google cũng như trong nhiều tổ chức khác cho các dự án mã nguồn mở.

Go được truyền cảm hứng bởi hai loại ngôn ngữ lập trình phổ biến khác là Python và C.

Go thừa hưởng sự đơn giản từ Python và sự hiệu quả của C

Golang, hay còn gọi là Go, được đặt tên theo tên miền chính thức của ngôn ngữ này, mang lại sự tiện lợi trong việc tìm kiếm Việc sử dụng từ khóa "Golang" sẽ giúp người dùng dễ dàng hơn trong việc tìm kiếm thông tin liên quan đến ngôn ngữ lập trình này trên Google so với từ khóa "Go".

Lịch sử phát triển

Generic Programming

Lập trình tổng quát (Generic programming) là một phương pháp lập trình máy tính cho phép viết thuật toán dưới dạng tổng quát, sau đó có thể khởi tạo cho các kiểu dữ liệu cụ thể khi cần thiết.

Sự thiếu hụt hỗ trợ lập trình tổng quát trong các phiên bản đầu tiên của Golang đã gây ra nhiều tranh luận trong cộng đồng lập trình Nhiều lập trình viên bày tỏ sự quan tâm đến lập trình tổng quát và nhận thấy rằng nó đã được tích hợp vào các hàm với kiểu chung, được sử dụng trong những tình huống cụ thể Pike, một trong những nhà thiết kế Golang, tin rằng điểm yếu này có thể được cải thiện trong tương lai.

Vào tháng 4 năm 2018, các nhà phát triển chính của Go đã công bố các dự thảo thiết kế cho lập trình generic và xử lý lỗi, đồng thời thu thập phản hồi từ người dùng Tuy nhiên, đề xuất về xử lý lỗi đã không được chấp nhận.

Vào tháng 6/2020, tài liệu thiết kế dự thảo mới đã được công bố, bổ sung cú pháp cần thiết cho ngôn ngữ lập trình Go để khai báo hàm và kiểu chung Để người dùng có thể thử nghiệm các cú pháp mới, công cụ dịch mã go2go đã được giới thiệu, đồng thời phiên bản hỗ trợ cũng được tích hợp với Go Playground trực tuyến.

Với phiên bản 1.18 của Go, Generic programming đã được tích hợp nhằm tối ưu hóa ứng dụng cho các lập trình viên.

Hình 4: An Example of Generic Programming in Golang

Các phiên bản đã phát hành

Các phiên bản của Go đều đảm bảo tính tương thích với việc đặc tả ngôn ngữ và các phần chính của thư viên chuẩn.

Dưới đây là bảng thống kê các phiên bản đã được phát hành của ngôn ngữ Golang.

The release history of the Go programming language showcases various versions and their respective end-of-life dates Starting with go1, which was released on March 28, 2012, and reached its end-of-life on December 1, 2013, the timeline continues with subsequent versions, such as go1.1 to go1.18 Each version, including go1.2 through go1.17, has specific maintenance end dates, with the latest version, go1.18, being current as of March 15, 2022, and expected to receive maintenance until Q1 2023 This structured release cycle highlights the ongoing evolution and support for the Go programming language.

2 Go - Một ngôn ngữ lập trình tuyệt vời

Đặc điểm

Open-source

Ngôn ngữ lập trình Golang nổi bật với đặc điểm mã nguồn mở, cho phép người dùng tải về và thử nghiệm với mã code, từ đó cải thiện chất lượng source code và khắc phục các lỗi.

Hình 5: Đắc diểm Open-source

Static-typing

Go là một ngôn ngữ lập trình kiểu tĩnh, có khả năng biên dịch chính xác và chú trọng đến kiểu dữ liệu cũng như tính tương thích Điều này mang lại cho lập trình viên sự linh hoạt hơn trong việc giải quyết các vấn đề so với các ngôn ngữ kiểu động.

Concurrency Support

Một trong những đặc tính mạnh mẽ của ngôn ngữ lập trình Go là việc hộ sự đồng thời thực thi (concurrency).

Golang mang đến những lựa chọn dễ dàng và dễ tìm kiếm hơn so với các ngôn ngữ lập trình khác, giúp lập trình viên phần mềm hoàn thành yêu cầu nhanh chóng Nó tối ưu hóa việc giải phóng tài nguyên đã phân bổ, sử dụng và kết nối hiệu quả hơn, mang lại nhiều lợi ích cho quá trình phát triển phần mềm.

Powerful Standard Library và Tool Set

Ngôn ngữ lập trình Go sở hữu một thư viện tiêu chuẩn mạnh mẽ, cung cấp nhiều thành phần phong phú cho các nhà phát triển Điều này giúp họ giảm thiểu việc phải sử dụng các gói từ bên thứ ba, nâng cao hiệu quả và tính linh hoạt trong quá trình phát triển ứng dụng.

Ngoài ra, nó cũng đưa ra cho chúng ta một lượng lớn các công cụ giúp cho việc phát triển tiến trình thêm hiểu quả, như là:

• Gofmt: Nó giúp tự động chỉnh sửa định dạng code của ngôn ngữ Go, bới sự khó khắn của nó trong tính readability.

Gorun là một công cụ hữu ích cho việc thêm các "bang line" vào mã nguồn, giúp thực thi mã một cách rõ ràng Công cụ này thường được các lập trình viên Go sử dụng trong quá trình thử nghiệm với các đoạn mã viết bằng Python.

Goget là công cụ hữu ích giúp lập trình viên tải về các thư viện từ GitHub và lưu trữ chúng trong GoPath, từ đó dễ dàng sử dụng các thư viện này thông qua lệnh import trong các dự án của mình.

Godoc là công cụ phân tích mã nguồn ngôn ngữ Golang, bao gồm các chú thích và tạo ra tài liệu dưới dạng HTML hoặc văn bản thuần Tài liệu này thường liên kết chặt chẽ với mã nguồn, cho phép người dùng dễ dàng truy cập chỉ với một cú click chuột.

Testing Capabilities

Ngôn ngữ Go không chỉ hỗ trợ việc viết mã ứng dụng mà còn cung cấp cơ hội để phát triển các unit tests Ngoài ra, Go còn giúp người dùng hiểu rõ hơn về độ bao phủ của mã, thực hiện các bài kiểm tra hiệu suất và sáng tạo ra các đoạn mã mẫu, từ đó tạo ra những tệp code độc đáo cho riêng mình.

Garbage Collection

Go cung cấp cho người dùng một hệ thống thu gom rác hiệu quả, giúp các nhà phát triển không còn phải lo lắng về việc giải phóng con trỏ hay các vấn đề liên quan đến con trỏ lơ lửng.

Kết Luận

Nhờ vào những đặc điểm nổi bật, Go đã thu hút sự chú ý từ nhiều tập đoàn lớn như Apple, Twitter và Facebook, bên cạnh sự quan tâm từ Google.

Hình 6: Những tập đoàn đã và đang sử dụng Go

Go là một ngôn ngữ lập trình được nhiều công ty nhỏ và start-up ưa chuộng để phát triển phần mềm cần thiết Những thành tựu nổi bật từ việc ứng dụng Go cho thấy tiềm năng mạnh mẽ của ngôn ngữ này Do đó, việc tìm hiểu điểm mạnh và điểm yếu của Go là cần thiết để tối ưu hóa việc sử dụng, từ đó thúc đẩy sự phát triển của ngôn ngữ và lập trình ứng dụng nói chung.

Điểm mạnh

Easy Learning Curve

Đối với những coder mới bắt đầu, Go là một ngôn ngữ lập trình lý tưởng giúp họ trải nghiệm viết code một cách dễ dàng nhờ vào tính năng kiểu tĩnh Việc nắm vững những kiến thức cơ bản về Go chỉ trong một đêm là hoàn toàn khả thi Tuy nhiên, để trở thành lập trình viên giỏi, chúng ta cần hiểu sâu về thư viện tiêu chuẩn, luyện tập thường xuyên và chuyên sâu Những khái niệm đơn giản của Go có thể được học một cách dễ dàng, tạo nền tảng vững chắc cho quá trình phát triển kỹ năng lập trình.

Ngôn ngữ lập trình Go, phát triển bởi Google, gần gũi với C nhưng tích hợp nhiều tính năng mới như garbage collection, kiểu cấu trúc và đồng thời theo phong cách CSP Go thiết lập tiêu chuẩn nhất định cho tài liệu, mang lại sự rõ ràng và dễ hiểu cho người dùng Các nguồn tài liệu và blog về Go giúp các lập trình viên nâng cao kỹ năng và hiểu biết của mình về ngôn ngữ này.

Simplicty và Speed

Go là một ngôn ngữ lập trình tối giản, điều này chủ yếu mang lại lợi ích Ngôn ngữ này có một số tính năng đơn giản và trực giao, cho phép kết hợp chúng theo nhiều cách khác nhau Nhờ vậy, việc học và viết chương trình bằng Go trở nên dễ dàng hơn.

Ngôn ngữ Go có khả năng tạo ra một executable code, có thể được sao chép mà không phá hủy các dependencies

Ngôn ngữ lập trình Go mang lại nhiều lợi ích nổi bật về tốc độ Chương trình Go được biên dịch trực tiếp thành mã máy, giúp nó hoạt động hiệu quả hơn so với các ngôn ngữ thông dịch hoặc có thời gian chạy ảo Không chỉ cho ra kết quả biên dịch nhanh chóng, mà tệp nhị phân của Go còn có kích thước nhỏ đáng kinh ngạc.

Go cung cấp cách xử lý tệp code hiệu quả, và để tối ưu hóa chương trình hơn nữa, Godoc là một công cụ phân tích mã tĩnh hữu ích Công cụ này cho phép lập trình viên tạo ra các tài liệu code đẹp mắt mà không cần sử dụng thêm ngôn ngữ nào khác như Javadoc hay PHPDoc.

Nó sẽ khai thác tối đa thông tin từ tệp code để phác thảo, cấu trúc và tái định dạng lại nội dung Hệ thống sẽ được nâng cấp với các tính năng tiên tiến như tham chiếu chéo, mẫu code và liên kết trực tiếp đến kho lưu trữ kiểm soát phiên bản trước đó.

Package System

Đối với những người mới làm quen với ngôn ngữ lập trình Go, khái niệm về packages sẽ trở nên quen thuộc nếu họ đã có kinh nghiệm với các ngôn ngữ như Java hoặc C/C++.

Packages là các thực mục trong chương trình, dùng để lưu trữ mã nguồn, các phụ thuộc và có thể bao gồm nhiều packages khác Chúng cung cấp những đoạn mã rõ ràng, giúp nâng cao hiệu quả quản lý các thành phần phụ thuộc.

Cơ chế packages trong ngôn ngữ Go là một tính năng đơn giản nhưng hiệu quả, mang lại lợi ích tuyệt vời cho người dùng.

Multithreading và Concurrency

Các ngôn ngữ lập trình hiện nay phải đối mặt với thách thức phân bổ tài nguyên do phần cứng ngày càng phức tạp Để nâng cao hiệu năng, các nhà chế tạo thường thêm nhiều lõi (cores) vào hệ thống Tuy nhiên, việc này đòi hỏi hệ thống phải duy trì kết nối dữ liệu qua microservices, quản lý sự gia tăng số lượng hàng đợi (queues) và duy trì caches hiệu quả.

Các phần cứng hiện nay yêu cầu được lập trình bằng các ngôn ngữ hỗ trợ sự đồng thời (concurrency) và có khả năng tương thích với hệ thống đa lõi (multi-core systems) trong tương lai.

Go được phát triển trong bối cảnh hệ thống đa lõi ngày càng phổ biến, giúp ngôn ngữ này hỗ trợ đồng thời hiệu quả hơn Thay vì sử dụng các luồng truyền thống, Go phát triển 'goroutines', cho phép xử lý nhiều tác vụ cùng lúc theo mô hình CSP (Communicating Sequential Processes) Điều này giúp truyền giá trị giữa các luồng mà không cần khóa biến, tối ưu hóa việc chia sẻ bộ nhớ.

Inbuilt Testing và Profiling Framework

Với lập trình viên sử dụng Javascript, việc tìm kiếm một framework kiểm thử cho dự án có thể gặp khó khăn Ngược lại, ngôn ngữ Go đi kèm với một công cụ kiểm tra được thiết kế đơn giản và hiệu quả, cung cấp API dễ sử dụng với giả định tối thiểu Công cụ này hỗ trợ nhiều loại thử nghiệm, profiling và cung cấp ví dụ mã thực thi Ngoài ra, nó còn hỗ trợ các tính năng kiểm tra nâng cao như kiểm tra song song và cấu hình linh hoạt.

Những mặt hạn chế

Quá Đơn giản

Sự đơn giản của ngôn ngữ Go là một trong những ưu điểm nổi bật, nhưng cũng đồng nghĩa với việc nó thiếu đi sự linh hoạt Trong khi các ngôn ngữ lập trình khác có thể khó học hơn, chúng cung cấp những mức độ trừu tượng cao, cho phép lập trình viên tạo ra những sản phẩm độc đáo, phức tạp và sáng tạo hơn.

Không hổ trợ Máy Ảo (Virtual Machine)

Google phát triển ngôn ngữ Go với mục tiêu không tập trung vào việc phát triển máy ảo, nhằm tạo ra một công cụ dễ sử dụng hơn Tuy nhiên, điều này cũng đồng nghĩa với việc ngôn ngữ Go có một số hạn chế nhất định.

Vms cung cấp mã nguồn hiệu quả, giúp kích thước file Go thường nhỏ hơn so với các ngôn ngữ khác Trong những năm qua, Google đã nỗ lực cải thiện hiệu suất của ngôn ngữ này, mang lại kỳ vọng cho các chương trình phức tạp được viết bằng Go có khả năng sử dụng bộ nhớ nhanh chóng và hiệu quả.

Errol Handeling có thể trở nên tốt hơn

Trong ngôn ngữ Go, mọi lỗi đều được coi là giá trị, dẫn đến việc một số hàm hợp lý có thể trả về kết quả lỗi Điều này tạo ra vấn đề khi nguồn gốc của lỗi không rõ ràng, gây khó khăn trong việc sửa chữa và khắc phục lỗi một cách hiệu quả Các lập trình viên Go cần viết mã để thông báo rõ ràng về các điều kiện lỗi cụ thể, nhằm tránh tình trạng mã đơn giản nhưng thiếu tính khả thi và dễ gây ra sự lặp lại không cần thiết.

Những lỗi còn tồn động với IOS Development

Nhiều lập trình viên đang gặp khó khăn với việc phát triển ứng dụng iOS bằng ngôn ngữ Go, theo các bài test nhanh trên các diễn đàn khắc phục sự cố hệ điều hành iOS Mặc dù Go có thể thu hút ít sự chú ý hơn trong tương lai, nhưng hiện tại nó vẫn là một lựa chọn hấp dẫn cho các nhà phát triển đa nền tảng, nhiều người trong số họ đã phải chuyển sang sử dụng C# trên Xamarin để phát triển phần mềm cho cả hệ điều hành Android và iOS.

Những vấn đề về Runtime Safety

So với các ngôn ngữ lập trình khác, Go được xem là một ngôn ngữ tương đối an toàn, nhưng không đạt được mức độ bảo mật cao như Rust Tuy nhiên, lỗ hổng bảo mật này chủ yếu tồn tại trong quá trình biên dịch và ở một mức độ nhất định trong thời gian chạy.

Go tập trung vào tốc độ của sản phẩm, còn Rust lại chú trọng hơn trong vấn đề bảo mật.

Một ngôn ngữ còn non trẻ

Khởi đầu vào năm 2007, ngôn ngữ Go vẫn còn trẻ so với các ngôn ngữ lập trình khác Mặc dù các thư viện chính của Go được thiết kế thông minh và hiệu quả, nhưng để so sánh với Java - ngôn ngữ đã có một kho mã nguồn đồ sộ và cộng đồng phát triển nhiệt tình, Go vẫn còn nhiều thách thức trong việc phát triển và hỗ trợ thư viện.

Cách sử dụng

Download Golang

Đầu tiên, vào trang chủ chính của của ngôn ngữ Go go.dev Chúng ta sẽ được màn hình hiển thị như sau.

Hình 7: Trang chủ chính thức của Go

Nhấn vào mục Download, chúng sẽ đi tới trang web hướng dẫn cách thức tải xuống ngôn ngữ lập trình Go.

Hình 8: Trang web Download Golang

Chọn phiên bản Golang thích hợp với hệ điều hành đang sử dụng và tải về.

Nếu bạn là lập trình viên và gặp khó khăn trong việc tải xuống Golang, hãy tham khảo mục hướng dẫn cài đặt để được hướng dẫn chi tiết về cách tải về và lựa chọn phiên bản phù hợp với nhu cầu sử dụng của mình.

Hình 9: Trang hướng dẫn Download GolangSau khi đã setup xong, chúng ta sẽ bắt đầu một cuộc hành trình mới với ngôn ngữ Golang.

Hello World!

Để làm quen với Golang, chúng ta sẽ bắt đầu với chương trình Hello World đơn giản.

6 /* This is my first sample program */

Listing 1: Code Go cho Hello World

Chạy file code để thấy dòng chữ "Hello, World!" trên màn hình console.

Lệnh go run là một trong các lệnh phổ biến để chạy chương trình Go, sử dụng lệnh go help để biết thêm những cú pháp khác.

Cấu trúc chương trình

Một chương trình được viết bằng Go, cơ bản sẽ có những phần như sau:

Dựa trên chương Hello Word ở mục 2.4.2, chúng ta sẽ giải thích đoạn code như sau:

Dòng đầu tiên của chương trình Go khai báo tên của package, đây là một câu lệnh bắt buộc vì mọi chương trình Go đều chạy trong các packages Trong ví dụ trên, package chính (main package) là điểm khởi đầu để thực thi chương trình Mỗi package đều có đường dẫn và tên riêng của nó.

Dòng lệnh "import fmt" trong ngôn ngữ Go là một chỉ thị tiền xử lý quan trọng, giúp trình biên dịch nhận diện các tệp tin cần thiết từ gói fmt.

• dòng tiếp theo là hàm main() là hàm hàm chính nơi mà chương trình thực thi

Phần Comments (Chú thích) trong mã nguồn, được ký hiệu bằng //, không được trình biên dịch chú ý Đây là nơi mà lập trình viên ghi chú những điểm quan trọng cần lưu ý trong quá trình phát triển phần mềm.

Hàm fmt.Println( ) trong Go được sử dụng để hiển thị dòng chữ "Hello World" trên màn hình Package fmt cung cấp phương thức Println, giúp xuất kết quả dưới dạng tin nhắn ra giao diện người dùng.

Syntax cơ bản

Trong Go, chúng ta những Syntax cơ bản như sau:

• Token: Một chương trình Go chưa rất nhiều Tokens, nó có thể là một KeyWord, một

Identifier, một constant, một string literal, hoặc một Symbol Ví dụ: Trong dòng code: fmt.Println("Huy"), nó đã chưa 6 tokens bao gồm: fmt, ’.’, Println, ’(’, "Huy", ’)’.

• Line Separator: Trong một chương trình Go, line separator là điểm kết thúc của statement

2 fmt Println ( "I am in Go P r o g r a m m i n g World !" )

Listing 2: Ví dụ của Line Separator

• Comments: Chú thích giúp được sử dụng bởi các lập trình viên giúp chúng ta có thể deexx dàng hơn trong việc đọc và hiểu code Ví dụ:

1 /* my first program in Go */

Listing 3: Ví dụ của Comments

• Identifiers: Một nhận dạng của Go là một tên gọi để nhận diện các biến, hàm, hoặc những item khác do người dùng định nghĩa Ví dụ:

1 mahesh kumar abc m ov e _n am e a_123

Listing 4: Ví dụ của Identifiers

• Keyword: Một số từ định danh dành riêng trong Go, không thể sự dụng làm tên biến, constant hoặc identifiers Ví dụ:

Hình 10: Một số Keywword trong Go

• White space: Khoảng trắng dùng để miêu tả các dấu cách, tabs, newline characters và comments.

Các kiểu Data

Các kiểu dữ liệu Data có thể được phân loại như sau:

1 Boolean types: Là kiểu Data logic và chưa 2 giá trị định nghĩa: True và False

2 Numeric types: là kiểu data dạnh số và có đại diện chính là kiểu Interger và Floating.

• Interger type: uint8: 0 - 255 uint16: 0 - 65535 uint32: 0 - 4294967295 uint64: 0 - 18446744073709551615 int8: -128 - 127 int16: -32768 - 32767 int32: -2147483648 - 22147483647 int64: -9223372036854775808 - 9223372036854775807

Floating types in programming include float32, which represents IEEE-754 32-bit floating-point numbers, and float64, which denotes IEEE-754 64-bit floating-point numbers Additionally, complex64 consists of complex numbers with float32 for both real and imaginary parts, while complex128 utilizes float64 for its real and imaginary components.

Các kiểu số học khác bao gồm: byte, tương đương với unit8; rune, tương đương với int32; unit, có thể là 32 hoặc 64 bit; init, tương tự như unit; và uintptr, là số nguyên không dấu dùng để lưu trữ các bit chưa được giải thích của con trỏ.

3 String types: đại điện cho tập hợp các kí tự Giá trị của nó là một chuổi các bytes.

4 Derived types: Bao gồm: Pointer types, Array types, Structure types, Union types, Function types, Slice types, Interface types, Map types và Channel Types.

Variables

Tên biến trong Go có thể bao gồm ký tự, số và dấu gạch dưới, nhưng phải bắt đầu bằng ký tự hoặc dấu gạch dưới Go phân biệt chữ hoa và chữ thường Để khai báo một biến trong Go, chúng ta sử dụng cú pháp cụ thể.

Listing 5: Ví dụ về Khai báo biến Với optional_data_type là các kiểu dữ liệu hợp lệ của Go như: byte, int, Ví dụ:

Các biến cung có thể nhận giá trị trước khi kiểu của chúng được khai báo, và kiểu của biến sẽ được trình biên dịch xác định dựa trên giá trị mà chúng nắm giữ.

Listing 6: Ví dụ về Khởi tạo giá trị đầu

1 huy = 123 // huy will be assigned as 123 , Here huy is int

Chúng ta có 2 kiểu khai báo, bao gồm: khai báo tĩnh và khai báo động

Khai báo tĩnh là quá trình cung cấp cho trình biên dịch sự đảm bảo về sự tồn tại của một biến với kiểu và tên nhất định, cho phép biên dịch mà không cần thông tin chi tiết về biến đó Điều này chỉ có ý nghĩa trong thời gian biên dịch, vì trình biên dịch cần khai báo biến thực sự tại thời điểm liên kết chương trình.

• Khai báo động: Nó sẽ yêu cầu trình biên dịch diễn giải kiểu của biến dựa trên giá trị được truyền cho nó Ví dụ:

Chúng ta có thể khai báo cho nhiều biến trong một dòng lệnh bằng việc sử dụng type inference

2 var a , b , c = 3 , 4 , " foo " // a, b is int , c is string

Constants

Constants (hằng) là các giá trị cố định mà chương trình không thể sửa chửa khi đang thực thi. Những giá trị này còn được gọi là literal.

Hằng có thể là bất kỳ các kiểu dư liệu nào như integer constant, floating constant, charac-ter constant, hoặc string literal.

Ví dụ về Interger literals:

4 078 /* Illegal : 8 is not an octal digit */

5 032 UU /* Illegal : cannot repeat a suffix */

Ví dụ về Floating-point literals:

4 210 f /* Illegal : no decimal or exponent */

5 e55 /* Illegal : missing integer or fraction */

Ví dụ về String literals:

Chúng ta có thể khai báo một biến hằng bằng cách sử dụng keyword const ở tiền vị trí.

Listing 7: Ví dụ về Khai báo hằng

7 fmt Printf (" value of area : %d" , area ) // Result is 50

Operator

Ta có các phép toán tử sau:

• Arithmetic Operators: Cho A bằng 10, B bằng 20

Hình 11: Các toán tử số học

• Relational Operators: Cho A bằng 1, B bằng 2

Hình 12: Các toán tử so sánh

• Logical Operators: Cho A bằng True, B bằng False.

Hình 13: Các toán tử logic

Hình 14: Các toán tử cho Bit

Hình 15: Các toán tử gán

Hình 16: Các toán tử hổn hợp

Decision making trong Go

Ngôn ngữ Go cung cấp cho chúng ta nhưng dạng điều kiện như sau:

3 // co n di ti o n is true

10 // using if s ta t em en t for

11 // checking the c on d it io n

14 // print the f o ll ow i ng if

15 // co nd i ti o n e va l ua t es to true

16 fmt Printf ( "v is less than 1000\ n")

19 fmt Printf ( " Value of v is : %d\n" , v )

3 // co n di ti o n is true

6 // co n di ti o n is false

10 // using if s ta t em en t for

11 // checking the c on d it io n

14 // print the f o ll ow i ng if

15 // co n di ti o n e v al ua t es to true

16 fmt Printf ( "v is less than 1000\ n")

20 // print the f o ll ow i ng if

21 // co n di ti o n e v al ua t es to true

22 fmt Printf ( "v is greater than 1000\ n")

10 // using if s ta t em en t

13 // if c o nd i ti on is true then

14 // check the f o ll ow i ng

17 // if c o nd i ti o n is true

Bài Tập lớn Lập Trình Nâng Cao - CO2039 Page 20/35

18 // then display the f ol l ow i ng

19 fmt Printf ( " Value of v1 is 400 and v2 is 700\ n" ) ;

25 // Value of v1 is 400 and v2 is 700

12 // this block will execute when none

13 // of the co nd i ti o n is true

9 // checking the c on d it io n

12 // if c o nd i ti on is true then

13 // display the fo l lo w in g */

14 fmt Printf ( " Value of v1 is 100\ n" )

17 fmt Printf ( " Value of a is 20\ n" )

21 fmt Printf ( " Value of a is 300\ n")

25 // if none of the c o n d i t i o n s is true

26 fmt Printf ( " None of the values is matching \n")

30 // None of the values is matching

• Switch statement: bao gồm Expression Switch và Type Switch.

1 switch ( boolean - e x p r e s s i o n or integral type ) {

2 case boolean - e x p r e s s i o n or integral type :

4 case boolean - e x p r e s s i o n or integral type :

6 /* you can have any number of case s t a t e m e n t s */

18 fmt Printf (" E xc el l en t !\n" )

24 fmt Printf (" Better try again \n" )

28 fmt Printf (" Your grade is %s\n" , grade ) ;

6 /* you can have any number of case s t a t e m e n t s */

14 fmt Printf ("x is func ( int )" )

16 fmt Printf ("x is bool or string " )

18 fmt Printf (" don ’t know the type " )

Vòng lặp

Trong Go, chúng ta chỉ có thể dùng for để tạo vòng lặp thông qua 2 cách sau:

1 for i n i t i a l i z a t i o n ; c on d it io n ; update {

– initialization: Khởi tạo biến đếm

– condition: Điều kiện tiếp tục vòng lặp

– update: Cập nhật giá trị biến đếm sau mỗi vòng lăp

Kết quả xuất ra là:

5 check := [3] string { " Huy " , " Hieu " , "Ha"}

6 for idx , val := range check {

Kết quả xuất ra là:

Function

Hàm là một khái niệm quan trong trong Go Chúng ta sẽ định nghĩa hàm trong Go như sau:

1 func f u n c t i o n _ n a m e ( [ p ar a me te r list ] ) [ r e t u r n _ t y p e s ]

Với các bộ phân của một hàm như sau:

• Func: Khai báo hàm sẽ được định nghĩa

• Function Name: Tên của hàm được định nghĩa ( dùng để gọi hàm khi sử dụng).

• Parameters: Các tham số được truyền vào hàm.

• Return type: List các giá trị được trả về khi thực hiện hàm (có hoặc không).

• Function body: Chứa các statement để thực hiện hàm được định nghĩa

Ví dụ 1: Không trả về giá trị nào

Kết quả thu về được là:

Ví dụ 2: Trả về 1 giá trị

4 func add ( x int , y int ) int {

11 // Ac c ep ti n g return value in varaible

Kết quả thu về được là:

Ví dụ 3: Trả về nhiều giá trị

5 func r ec ta n gl e ( l int , b int ) ( area int , p ar a me t er int ) {

8 return // Return s ta t em e nt without specify variable name

15 fmt Println ( " P ar a me t er :" , p )

Kết quả thu về được là:

Trong một số trường hợp nhất định, khi sử dụng các hàm trả về nhiều giá trị, nếu chỉ cần một giá trị cụ thể, bạn có thể sử dụng dấu '_' để loại bỏ các giá trị không cần thiết.

5 func r ec ta n gl e ( l int , b int ) ( area int , p ar a me t er int ) {

8 return // Return s ta t em e nt without specify variable name

14 fmt Println ( " P ar a me t er :" , p )

Array

Array là một cấu trúc dữ liệu bao gồm tập hợp các thành phần có kiểu duy nhất Để định nghĩa Array trong Go, ta sử dụng cú pháp.

1 var v a r i a b l e _ n a m e [ SIZE ] v a r i a b l e _ t y p e // Single Di m en t io n Array

12 fmt Println ( reflect ValueOf ( intArray ) Kind () )

13 fmt Println ( reflect ValueOf ( strArray ) Kind () )

17 \\ array Để có thể gán giá trị trị và truy xuất các thành phần của arra, ta sử dụng index number Ví dụ:

7 Huy [0] = "ta" // Assign a value to the first element

8 Huy [1] = "la" // Assign a value to the second element

9 Huy [2] = " nang " // Assign a value to the third element

11 fmt Println ( Huy [0]) // Access the first element value

12 fmt Println ( Huy [1]) // Access the second element value

13 fmt Println ( Huy [2]) // Access the third element value

Output của chúng ta là:

Ta có thể tạo một mảng bằng Array Literal Ví dụ:

Kết quả đước xuất ra màn hình là:

Chúng ta có khả năng tạo mảng mà không cần chỉ định độ dài, vì trình biên dịch sẽ tự động nhận diện độ dài dựa trên số lượng phần tử khi khai báo mảng.

11 fmt Println ( reflect ValueOf ( check ) Kind () )

Chùng ta sẽ có kết quả được xuất ra màn hình là:

Khi chúng ta khai báo một mảng, giá trị có thể được khởi tạo một cách chuyên dụng như sau.

Bài Tập lớn Lập Trình Nâng Cao - CO2039 Page 27/35

17 fmt Println ( " check : " , how color )

Chúng ta có kết quả là:

Map là một cấu trúc dũ liệu cung cấp cho bạn một tập hợp không trật tự các cặp key/value.

Map là một cấu trúc dữ liệu cho phép tìm kiếm các giá trị dựa trên khóa đã được chỉ định Được khởi tạo từ bảng băm (Hash table), Map giúp tăng tốc độ tìm kiếm các phần tử và truy xuất dữ liệu một cách hiệu quả Ví dụ về Map trong ngôn ngữ lập trình Go.

5 var employee = map [ string ] int {" Mark " : 10 , " Sandy " : 20}

Kết quả chúng ta thu được là:

Chúng ta có thể khai báo một Map bằng từ khóa make và biết độ dài của Map khi dùng hàm llen().

6 var employee = make ( map [ string ] int )

Chúng ta có thể truy cập, thêm, xóa và cập nhật dữ liệu bằng cách sử dụng các index key như sau:

6 var employee = map [ string ] int {" Mark " : 10 , " Sandy " : 20}

8 fmt Println ( employee [ " Mark " ]) // Access

14 delete ( employee , " Mark ") // Delete item

Go là một ngôn ngữ lập trình hỗ trợ đồng thời (Concurrency), cho phép các hàm hoạt động độc lập Goroutines là một tính năng trong Go giúp thực hiện các phép toán song song, nâng cao hiệu suất xử lý.

Muốn tạo một goroutines mới, chúng ta sử dụng từ khóa go.

1 sum () // A normal function call that executes sum s y n c h r o n o u s l y and waits for c o m p l e t i n g it

2 go sum () // A g or ou t in e that executes sum a s y n c h r o n o u s l y and doesn ’t wait for c o m p l e t i n g it

Trong Go, từ khóa "go" cho phép lời gọi hàm được trả về ngay lập tức, trong khi hàm đó chạy nền như một goroutine, cho phép phần còn lại của chương trình tiếp tục thực thi Mỗi chương trình Go đều khởi động ít nhất một goroutine, vì hàm main của Go bắt đầu bằng việc sử dụng goroutine Để minh họa rõ hơn, chúng ta sẽ xem xét một ví dụ về cách tạo goroutine.

13 response , err := http Get ( url )

22 body , err := ioutil ReadAll ( response Body )

26 fmt Println ( " Step4 : " , len ( body ) )

31 go r e s p o n s e S i z e ( " https :// c od e rw a ll com ")

Chúng ta thêm từ "go" trước mỗi lần gọi hàm responseSize, khiến cả ba lần gọi hàm này cùng khởi động đồng thời, đồng thời ba lần gọi http.Get cũng diễn ra mà không phải chờ đợi Chương trình không cần đợi cho một yêu cầu được phản hồi trước khi gửi yêu cầu tiếp theo Kết quả cho thấy thời gian xuất ra màn hình nhanh hơn rất nhiều.

3 Step1 : https :// c od e rw a ll com

10 Step2 : https :// c od e rw a ll com

11 Step3 : https :// c od e rw a ll com

Chúng ta cũng sử dụng hàm time.Sleep trong hàm main để tránh việc các goroutine thoát ra trước khi goroutine ResponseSize hoàn thành.

Việc sử dụng Goroutine trong lập trình Go là chưa đủ nếu các goroutine cần giao tiếp và đồng bộ hóa quá trình thực thi Để giải quyết vấn đề này, Channels được sử dụng như một cơ chế cho phép các goroutine chia sẻ dữ liệu Khi chương trình thực hiện các hoạt động goroutine đồng thời, Channels hoạt động như một kênh (đường ống) giữa các goroutines, cung cấp cơ chế giúp quá trình làm việc đồng bộ diễn ra hiệu quả.

Một channels được tạo nhơ hàm make(), một hàm chỉ định các từ chan keyword và các phân tử của channels Syntax được sử dụng là:

1 U n b u f f e r e d := make ( chan int ) // U n b u f f e r e d channel of integer type

2 buffered := make ( chan int , 10) // Buffered channel of integer type Để gửi các giá trị tới kênh cần sử dụng dấu ’

Ngày đăng: 18/10/2022, 13:48

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[3] Kofigroup, 5 Reasons Why Go Is The Best Programming Language To Learn In 2021 Sách, tạp chí
Tiêu đề: 5 Reasons Why Go Is The Best Programming Language To Learn In 2021
Tác giả: Kofigroup
Năm: 2021
[4] Google, The Go Programming Language. go.dev [5] Tutorialpoint, Go Tutorial. tutorials Sách, tạp chí
Tiêu đề: The Go Programming Language
Tác giả: Google
Nhà XB: go.dev
[6] Meritocary (06/04/2021), Golang: Why you should learn GO in 2021. meritocary [7] Golang Tutorial, Go Programming Language. golang Sách, tạp chí
Tiêu đề: Golang: Why you should learn GO in 2021
Tác giả: Meritocary
Nhà XB: meritocary
Năm: 2021
[1] (08/09/2020), Interesting Fact About Golang Khác
[2] Avinash Sharma (06/09/2021), A Mini-Guide on Go Programming Language, appinventiv Khác

HÌNH ẢNH LIÊN QUAN

Hình 1: Go Language - LẬP TRÌNH NÂNG CAO (CO2039) bài tập lớn tìm hiểu về ngôn ngữ golang
Hình 1 Go Language (Trang 3)
Hình 3: Logo của ngơn ngữ lập trình Go - LẬP TRÌNH NÂNG CAO (CO2039) bài tập lớn tìm hiểu về ngôn ngữ golang
Hình 3 Logo của ngơn ngữ lập trình Go (Trang 4)
Hình 2: Từ trái sang phải: Robert Griesemer, Rob Pike, và Ken Thompson Go được ra mắt với cộng đồng vào tháng 11 năm 2009, và phiên bản 1.0 được tiếp tục  giới thiệu vào tháng 3 năm 2012. - LẬP TRÌNH NÂNG CAO (CO2039) bài tập lớn tìm hiểu về ngôn ngữ golang
Hình 2 Từ trái sang phải: Robert Griesemer, Rob Pike, và Ken Thompson Go được ra mắt với cộng đồng vào tháng 11 năm 2009, và phiên bản 1.0 được tiếp tục giới thiệu vào tháng 3 năm 2012 (Trang 4)
Dưới đây là bảng thống kê các phiên bản đã được phát hành của ngôn ngữ Golang. Release - LẬP TRÌNH NÂNG CAO (CO2039) bài tập lớn tìm hiểu về ngôn ngữ golang
i đây là bảng thống kê các phiên bản đã được phát hành của ngôn ngữ Golang. Release (Trang 6)
Hình 5: Đắc diểm Open-source 2.1.2Static-typing - LẬP TRÌNH NÂNG CAO (CO2039) bài tập lớn tìm hiểu về ngôn ngữ golang
Hình 5 Đắc diểm Open-source 2.1.2Static-typing (Trang 7)
Hình 6: Những tập đồn đã và đang sử dụngGo - LẬP TRÌNH NÂNG CAO (CO2039) bài tập lớn tìm hiểu về ngôn ngữ golang
Hình 6 Những tập đồn đã và đang sử dụngGo (Trang 9)
Hình 7: Trang chủ chính thức của Go - LẬP TRÌNH NÂNG CAO (CO2039) bài tập lớn tìm hiểu về ngôn ngữ golang
Hình 7 Trang chủ chính thức của Go (Trang 12)
Đầu tiên, vào trang chủ chính của của ngơn ngữ Go go.dev. Chúng ta sẽ được màn hình hiển thị như sau. - LẬP TRÌNH NÂNG CAO (CO2039) bài tập lớn tìm hiểu về ngôn ngữ golang
u tiên, vào trang chủ chính của của ngơn ngữ Go go.dev. Chúng ta sẽ được màn hình hiển thị như sau (Trang 12)
Hình 9: Trang hướng dẫn Download Golang - LẬP TRÌNH NÂNG CAO (CO2039) bài tập lớn tìm hiểu về ngôn ngữ golang
Hình 9 Trang hướng dẫn Download Golang (Trang 13)
Hình 10: Một số Keywword trong Go - LẬP TRÌNH NÂNG CAO (CO2039) bài tập lớn tìm hiểu về ngôn ngữ golang
Hình 10 Một số Keywword trong Go (Trang 15)
Hình 11: Các tốn tử số học - LẬP TRÌNH NÂNG CAO (CO2039) bài tập lớn tìm hiểu về ngôn ngữ golang
Hình 11 Các tốn tử số học (Trang 20)
Hình 12: Các tốn tử so sánh • Logical Operators: Cho A bằng True, B bằng False. - LẬP TRÌNH NÂNG CAO (CO2039) bài tập lớn tìm hiểu về ngôn ngữ golang
Hình 12 Các tốn tử so sánh • Logical Operators: Cho A bằng True, B bằng False (Trang 20)
Hình 14: Các tốn tử cho Bit - LẬP TRÌNH NÂNG CAO (CO2039) bài tập lớn tìm hiểu về ngôn ngữ golang
Hình 14 Các tốn tử cho Bit (Trang 21)
Hình 13: Các tốn tử logic - LẬP TRÌNH NÂNG CAO (CO2039) bài tập lớn tìm hiểu về ngôn ngữ golang
Hình 13 Các tốn tử logic (Trang 21)
1 if condition { - LẬP TRÌNH NÂNG CAO (CO2039) bài tập lớn tìm hiểu về ngôn ngữ golang
1 if condition { (Trang 22)

TỪ KHÓA LIÊN QUAN

w