Họ đều có chung mộtmục đích: tạo ra được một ngôn ngữ lập trình có thể dễ dàng sử dụng nhưng vẫn có thể baoquát được những vấn đề chính trong quá trình làm việc với các hệ thống phức tạp
Trang 1LẬP TRÌNH NÂNG CAO (CO2039)
Bài tập lớn
Tìm hiểu về ngôn ngữ
Golang
GVHD: Trương Tuấn Anh
THÀNH PHỐ HỒ CHÍ MINH, THÁNG 5 2022
Trang 21.1 Tổng quan 2
1.2 Lịch sử phát triển 2
1.2.1 Generic Programming 4
1.2.2 Các phiên bản đã phát hành 5
2 Go - Một ngôn ngữ lập trình tuyệt vời 6 2.1 Đặc điểm 6
2.1.1 Open-source 6
2.1.2 Static-typing 6
2.1.3 Concurrency Support 7
2.1.4 Powerful Standard Library và Tool Set 7
2.1.5 Testing Capabilities 7
2.1.6 Garbage Collection 7
2.1.7 Kết Luận 7
2.2 Điểm mạnh 8
2.2.1 Easy Learning Curve 8
2.2.2 Simplicty và Speed 8
2.2.3 Package System 9
2.2.4 Multithreading và Concurrency 9
2.2.5 Inbuilt Testing và Profiling Framework 9
2.3 Những mặt hạn chế 10
2.3.1 Quá Đơn giản 10
2.3.2 Không hổ trợ Máy Ảo (Virtual Machine) 10
2.3.3 Errol Handeling có thể trở nên tốt hơn 10
2.3.4 Những lỗi còn tồn động với IOS Development 10
2.3.5 Những vấn đề về Runtime Safety 10
2.3.6 Một ngôn ngữ còn non trẻ 11
2.4 Cách sử dụng 11
2.4.1 Download Golang 11
2.4.2 Hello World! 12
2.4.3 Cấu trúc chương trình 13
2.4.4 Syntax cơ bản 13
2.4.5 Các kiểu Data 14
2.4.6 Variables 15
2.4.7 Constants 16
2.4.8 Operator 17
2.4.9 Decision making trong Go 19
2.4.10 Vòng lặp 23
2.4.11 Function 24
2.4.12 Array 26
2.4.13 Struct 27
2.4.14 Map 28
2.4.15 Gouroutine và Channels 29
2.4.16 Xuất Output ra màn hình 32
Trang 31 Giới thiệu chung
1.1 Tổng quan
Go (còn được biết đến với các tên gọi khác như Golang hoặc Go Language) là một ngôn ngữlập trình được phát triển bởi Google, Đây là một loại ngôn ngữ có mã nguồn mở (open-source, statically-typed compiled, và là một ngôn ngữ lập trình rõ ràng (explicit programminglanguage) Đây cũng là một ngôn ngữ lập trình đa mô hình (multi-paradigm) và hướng đốitượng (object-oriented) Go là một ngôn ngữ được dùng phổ biến tại Google và cùng vớinhiều tổ chức khác với các project có 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
Hình 1: Go Language
Sự thật thú vị: Golang (Một tên gọi khác của Go) bắt nguồn từ tên miền trang chủ chínhthức của Go Nó thực sự rất hữu dụng bởi việc tìm kiếm keyword "Golang" sẽ thuận tiện hơnnhiều so với keyword "Go" khi sử dụng công cụ tìm kiếm Google (Nó sẽ giúp ta dễ hơn trongviệc tìm kiếm thông tin về ngôn ngữ lập trình này)
1.2 Lịch sử phát triển
Trước khi Go ra đời, việc sử dụng các ngôn ngữ phực tạp để giải quyết các vấn đề lớn trở nên khókhắn Như đối với ngôn ngữ C++, để có thể giải quyết vấn đề bằng ngôn ngữ này có thể mất cảngày dài Điều này vốn không hợp lý , cả về thời gian tiêu tốn lẫn năng suất hoạt động
Người đã đặt các nền móng đầu tiên cho ngôn ngữ lập trình Go bao gồm: Robert Griesemer,Rob Pike, và Ken Thompson - những kỹ sư phần mềm đến từ Google Họ đều có chung mộtmục đích: tạo ra được một ngôn ngữ lập trình có thể dễ dàng sử dụng nhưng vẫn có thể baoquát được những vấn đề chính trong quá trình làm việc với các hệ thống phức tạp
Vào năm 2007, Go được thiết kế - với ứng dung trong việc cải thiện năng suất lập trình trong thờiđại của multicore, networked machines và lagre corebase Từ Go, các nhà thiết kế dã cố gắng
Trang 4khắc phục những điểm yếu nhưng vẫn giữ nguyên những tính năng tối ưu của các ngôn ngữ lập trình khác.
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
Vào tháng 11/2016, Go và Go Mono fonts được ra mắt bởi hai nhà thiết kế: Charles Bigelow
và Kris Holmes, được chuyên dụng cho các project sử dụng ngôn ngữ Go
Tháng 4/2018, Logo của ngôn ngữ đã được thay thế bằng biểu tượng GO cách điệu nghiêng bên phải với các đường nét ở cuối
Hình 3: Logo của ngôn ngữ lập trình Go
Trang 51.2.1 Generic Programming
Generic programming (Lập trình tổng quát) là môt dạng lập trình máy tính mà trong đó, thuậttoán được viết theo dạng được xác định sau và sau đó được khởi tạo (instantiate) nếu cầncho một kiểu cụ thể mà được cung cấp như tham số
Sự thiếu hụt của việc hộ trợ Generic programming trong những phiên bản đầu tiên củaGolang đã dấy lên những tranh luận đáng lưu ý Các nhà lập trình đã bày tỏ sự hứng thú vớigeneric programming và ghi chú rằng nó đã được tích hợp vào các hàm (functions) với kiểuchung chung (type-generic), những kiểu được sử dụng trong những trường hợp đặc biệt.Pike - một trong những lập trình viên thiết kế Golang, nghĩ rằng một lúc nào đó điểm yếu này
có thể được cải tiến
Vào tháng 4/2018, những nhà phát triển chính của Go đã cho ra mắt các dự thảo về thiết kểgeneric programming và error-handling, từ đó thu thấp các phản hồi của người dùng Nhưng
đề xuất về error-handling đã bị loại bỏ
Tháng 6/2020, một tài liệu thiết kế dự thảo mới được xuất bản nhằm bổ sung những cú phápcần thiết cho Go để khai báo các hàm và kiểu chung Một công cụ dịch mã, go2go đã đượccung cấp cho người dùng với mục đích thử những cú pháp mới, cùng với phiên bản hỗ trợchung 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 ứngdụng cho các lập trình viên
Hình 4: An Example of Generic Programming in Golang
Trang 61.2.2 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
Trang 72 Go - Một ngôn ngữ lập trình tuyệt vời
2.1 Đặc điểm
Ngôn ngữ Go, xuât hiện trên thị trường vào năm 2009, được thiết kế với mục đích nhằm nângcao các sản phẩm ứng dụng thuộc các ngành bao gồm: networked machines, multicore, vàhuge codebases Một trong những điểm tuyệt vời mà Go đã thể hiện cho chúng ta là:
• Static typing và runtime efficiency của C++
• Usability và Readability của Python và Javascript
• Khái niệm Lập trình hướng đối tượng (OOP) của SmallTalk
• Concurrency element của Newsqueak
Sau đây chúng ta sẽ đi sâu phân tích các đặc điểm của Go
2.1.1 Open-source
Đặc điểm đầu tiên của ngôn ngữ lập trình Golang là nó là một ngôn ngữ lập trình có mãnguồn mỡ Nghĩa là, mọi người có thể tải và thử nghiệm với code để có thể mang đến nhữngsource code tốt hơn và sưa lại những bug liên quan
Hình 5: Đắc diểm Open-source2.1.2 Static-typing
Go là một ngôn ngữ statically-typed và làm việc với cơ chế biên dịch code một cách chính xáctrong khi đang quan tâm tới kiểu của chương trình và mức độ tương thích Nó sẽ giúp chocác lập trình viên được tự do hơn trong việc khắc phục các khó khắn so với khi sử dụng cácngôn ngữ dynamically-typed
Trang 82.1.3 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, không như các ngôn ngữ lập trình khác, đề xuất những lựa chon đồng thời dễ dàng
và dễ tìm kiếm hơn Nó giúp cho những lập trình viên mảng phần mềm dễ dàng hơn trongviệc hoàn thành các yêu cầu một cách nhanh nhất có thể giải phóng các tài nguyên đã đữphân bổ và sự dụng và kết nối với nhau sớm hơn, và nhiều hơn thế nữa
2.1.4 Powerful Standard Library và Tool Set
Ngôn ngữ lập trình Go cũng cho ra với một thư viên tiêu chuẩn mạnh mẽ Những thư viện nàycho phép chúng ta sử dụng các component phong phú, giúp cho các nhà phát triển tránh khỏiviêc phải sử dụng các gói của bên thứ 3
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ểntiế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: Công cụ này dùng để thêm vào các "bang line" trong code nguồn để chạy nó, hoặcchạy các dòng code sode một cách rõ ràng Nó thường được sử dụng bới các nhà lập trình Go trongquá trình thử nghiệm nó với những dòng mã được viết bằng Python
• Goget: Đây là công cụ dùng để tải về các thư viện từ GitHub và lưu trử nó ở GoPath, từ đó giúp cho các lập trình viên có thể để dạng inport các thư viện trong các project
• Godoc: Là một công cụ dùng để phân tích mã nguồn code của ngôn ngữ Golang, bao gồmcác comment và tạo a một văn bản băng HTML hoặc một định dạng văn bản thuần Văn bản đượctạo ra thường được gắn chặt với code của văn bản và có thể được định vị một cách dễ dàng với một
cú click chuột
2.1.5 Testing Capabilities
Ngôn ngữ Go còn có thể đề xuất những cơ hội để viết các unit tests cùng với việc viết app codes.Bên cạnh đó, nó cúng giúp hổ trợ trong việc hiểu được độ bao phủ của code, các bài kiểm tra hiệusuất, và viết các code mâu để sáng tạo nên những tệp code riêng của mọi người
2.1.6 Garbage Collection
Go còn cung cấp cho người sử dụng một sức mạnh tuyệt vời bộ thu gom rác (garbage collection).Nghĩa là, nhà phát triển không còn phải lo lắng về việc giải phóng các con trỏ (pointers) hoặcnhững tình huống liên quan đến lung lẳng pointers (Dangling pointer là một con trỏ trong mã đódẫn đến các khối bộ nhớ sai hoặc đối với một số điểm đến ngoài ý muốn) nữa
2.1.7 Kết Luận
Nhờ những đặc điểm đã được nêu ở trên, Go đã được đón nhận bới rất nhiều sự quan tâm của rất nhiều những tập đoàn nổi tiềng khác ngoài Google như: Apple, Twitter, Facebook,
Trang 9Hình 6: Những tập đoàn đã và đang sử dụng Go
Ngoài ra, Go cũng là một trong những ngôn ngữ được ứng dụng các công ty nhỏ cũngnhư các start up để tao những phần mềm cần thiết Và từ đó chúng ta có thể thấy đượcnhững thành tựu tuyệt vời của chúng Từ đó chúng ta phải tìm hiều được những điểm mạnhđiểm yêu của ngôn ngữ này nhằm có thể sử dung nó một cách tối ưu hơn, tạo tiền đề choviêc phát triển ngôn ngữ nói riêng và lập trình ứng dụng nói chung
2.2 Điểm mạnh
2.2.1 Easy Learning Curve
Với những coder mớt bất đầu Go là một ngôn ngữ lập trình cho quá trình trải nghiệm viếtcode của họ với một ngôn ngữ (statically-typed), và còn hơn thế, việc học những thứ căn bảncủa Go trong một đêm là điều có thể Tất nhiên, nó không khiên chúng ta trở thành nhữngngười giỏi trong việc code, chúng ta phải hiểu rõ về thư viện tiêu chuẩn của ngôn ngữ, luyệntập thật nhiều và chuyên sâu, cùng với những mức độ thích hợp, những những điều giản đơncủa Go có thế được học một cách dễ dàng
Với những nhà lập trình đến từ những ngôn ngữ khác Go rất là gần với C nhưng lại có thêmnhững điểm mới như: garbage collection, structual typing, và CSP-style concurrency
Đươc phát triển bởi Google, Go cài đặt những tiêu chuẩn nhất định cho các tài liều Với sự rõràng và dễ dàng để nắm bắt Những điều cơ bản của Go đã được định nghĩa một cách dễhiểu nhất khi chung ta cố gắng tiếp cận nó Các Blog về Go cũng cung cấp cho chung nhữngnguồi tài liệu cho những nhà lập trình để có thể nâng cao trình độ của mỗi người
2.2.2 Simplicty và Speed
Go là một ngôn ngữ lập trình tối giản Hầu hết, thì đó là một điều tốt Lõi của ngôn ngữ bao gồmmột số các tính năng đơn giản, trực giao, từ đó có thể được kết hơp theo số lượng nhỏ tương đốicác cách Điều đó khiến cho việc học ngôn ngữ, đọc và viết chương trình 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
Go cung cấp một số lợi ích thú vị về speed Một chương trình Go được biên dịch thẳng thành mã
Trang 10máy, nên đương diên nó sẽ hoạt động tốt hơn so với các ngôn ngữ thông dịch (interpreted)hoặc có thời gian chạy ảo (virtual runtime) Không chỉ những kết quả biên dịch một chươngtrình thực sự nhanh, mà tệp nhị phân được biên dich có dung lượng nhỏ đến mức kinh ngạc.Chúng ta đã đề cập đến cách mà Go xử lý tệp code của ngôn ngữ này Nhưng có một bượctiến xa hơn nữa trong việc khiến cho chương trình của ngôn ngữ Go trở nên tối ưu Godoc làmột công cụ phân tích mã tĩnh giúp nhà lập trình viên có thể tạo những những tệp code đẹpmắt mà không sử dụng thêm bất kỳ một ngôn ngữ ngoài nào khác, như Javadoc, PHPDoc
Nó sẽ sử dung nhiều thông tin nhất có thể từ tệp code, từ đó phác thảo, cấu trúc và tái địnhdạng lại nó Nó sẽ được cập nhật với các tính năng nâng cao hơn bao gồm tham chiếu chéo,mãu code và liên kết trực tiếp đến kho lưu trữ hệ thống kiểm soát các phiên bản lúc trước.2.2.3 Package System
Với nhưng ai bắt đầu làm quen với ngôn ngữ lập trinh Go, packages có thể quen thuộc với nhà lậptrình viên nếu như họ đã có kinh nghiệm và từng tiếp xúc với ngôn ngữ Java hoặc C/C++
Với những người khác, theo thuật ngữ cơ bản, thì packages là một thực mục bên trongchương trình của mà để lưu trử các source codes, dependencies hoặc có thể nhiều packageshơn Những packages đưa ra những đoạn code rời rạc rõ ràng và tăng hiểu quả quản lý chonhững thành phần phụ thuộc (dependencies
Cơ chế packages là một trong những tính năng được thiết kể đơn giản nhưng hiệu quả đượctích hợp trong ngôn ngữ này, và chắn là một trong những lợi ich tuyệt vời nhất khi sử dụngngôn ngữ Go
2.2.4 Multithreading và Concurrency
Những ngôn ngữ lập trình hiện nay đều phải đối mặt với vấn đề phân bổ tài nguyên ngàycàng khó khắn bởi phần cứng đang dần trở nên phức tạp hơn Thường lệ, các nhà chế tạo sẽchỉ thêm vào nhiều lõi (cores) hơn vào hệ thống nhằm nâng cao hiệu năng Với mỗi coređược thêm vào, hệ thống lại cần phải duy trì nhiều sự kết nối dữ liệu với nhau thông quamicroservices, quản lý sự gia tăng số lượng của hàng đợi (queues) and duy trì caches.Các phần cứng hiện này cần những được lập trình bởi những ngôn ngữ có hổ trợ sự đồngthời concurrency, và có khả năng hỗ trợ cho hệ thông đa lõi (multi-core systems) trong tươnglai
Go được hưởng lợi từ việc được phát triển trong thời kỳ mà các hệ thống đa lõi ngày càng trởnên phổ biến và có sẵn rộng rãi trên các phần cứng phức tạp Vì tế, các nhà lập trình đặc biệtchú ý vào việc hỗ trợ đồng thời, phát triển ’goroutines’ thay vì các luồng - cho phép ngôn ngữ
xử lý đồng thời một số lượng lớn các tác vụ tại một thời điểm trong một model được gọi làCSP (Communicating Sequential Processes) Thay vì khóa các biến để chia sẻ bộ nhớ, Gocho phép bạn truyền giá trị được lưu trữ trong biến của bạn từ luồng này sang luồng khác.2.2.5 Inbuilt Testing và Profiling Framework
Với một lập trình viên sử dụng ngôn ngữ Javascript, việc cố gằng tìm kiếm một testing frameworkcho một project thật sự là một điều khó khăn Với Go, ngôn ngữ này kèm theo một công cụ kiêm
Trang 11tra được xây dựng với sự đơn giản và hiệu quả Nó cung cấp cho người dùng các API đơn giảnnhất có thể và đưa ra các giả định tối thiểu Nó có thể được sử dụng cho các loại thử nghiệm,profiling, thậm chí để cung cấp các ví dụ về mã thực thi Nó cũng có thể hỗ trợ các tính năng kiểmtra nâng cao như kiểm tra song song, bỏ qua cấu hình và nhiều tính năng khác.
2.3 Những mặt hạn chế
Ngoại những thế mạnh mà Go đã thể hiện ở trên Còn tồn tại những điểm yếu của ngôn ngữcần được khắc phục nhằm có thể tối ưu hóa hơn ngôn ngữ lập trình nà
2.3.1 Quá Đơn giản
Sự đơn giản của Go là một trong những thể mạnh tuyệt vời của ngôn ngữ này Tuy nhiên,điều đó dẫn đến việc ngôn ngữ này thiếu đi sự lịnh hoạt như một điều tất yếu Trong khinhưng ngôn ngữ khác có thể khó tiếp thu hơn, chúng đưa ra những mực trừu tượng cao màgiúp cho coders có thể đạt được những kết quả độc nhất, phức tạp và sáng tạo hơn
2.3.2 Không hổ trợ Máy Ảo (Virtual Machine)
Google mong muốn Ngôn ngữ Go không hướng tới mục địch phát triển mảng máy ảo ((virtualmachine-base)) Nó giúp chúng ta trong việc dễ sử dụng Nó lại mang đến một số hạn chế.Vms sẽ cho chúng ta những đoạn code hiệu quả, nghĩa là kích thước của một file Go thườngnhỏ hơn so với các ngôn ngữ khác Trong khi Googles đang cố gắng từng bước cải thiện tínhhiệu quả của ngôn ngữ này trong một vài năm qua, chúng ta có thể kỳ vọng hơn về nhữngchương trình phực tạp được viết bởi Go có thể nhanh chóng trong việc sử dụng bộ nhớ.2.3.3 Errol Handeling có thể trở nên tốt hơn
Trong ngôn ngữ Go, tất các lỗi đều là những giá trị Bởi vì điều đó, một số các fair function (hàmhợp lý) sẽ kết thúc bằng việc trả một kết quả lỗi Nó dẫn đến một vấn để rằng nơi mà nguồn gốccủa lỗi bị mất có thể dẫn đến sự thiếu hụt logic trong việc sửa chữa và fix lôi một cách hiểu quả.Các nhà lập trình Go cần phải viết những đoạn code sửa chữa lỗi để có thể thông báo về các điềukiện sai cụ thể của lỗi đã bị mất Khi mà code chỉ tập tring vào sự đơn giản và giảm việc lặp lại quảnhiều lần của code, nó có thể trở thành một vấn đề khó giải quyết
2.3.4 Những lỗi còn tồn động với IOS Development
Dựa trên những bài test nhanh trên các diễn đàn khắc phục sự cố ở hệ điều hành Ios, chúng
sẽ cho ta thấy rất các lập trình đang vật lộn với các truy vấn về phát triển ứng dụng iOS bằngngôn ngữ Go Điều này có thể sẽ ít được quan tâm hơn khi Go được phát triển trong thời giantới, những vẫn là một điểm yêu của Go hiện tại khi nhiều nhiều nhà phát triển đa nền tảngphải chuyển sang sử dụng C# trên Xamarin để có thể viết và cho ra các phần mềm bao gồm
hệ điều hành Android và iOS
2.3.5 Những vấn đề về Runtime Safety
So sánh với các ngôn ngữ lập trình còn lại, Go có thể được coi là một ngôn ngữ tương đối an toànnhưng nó lại gần như không mang tính bảo mật cao như các ngôn ngữ như Rust, Tuy nhiên, lỗhổng này chỉ tồn tại trong quá trình biên dịch và ở mực độ nhất định là thời gian chạy
Trang 12Go 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.2.3.6 Một ngôn ngữ còn non trẻ
Khởi đầu vào năm 2007, tuổi đời của ngôn ngữ này vẫn còn rất trẻ so với các ngôn ngữ cạnhtranh còn lại Các thư viện chính của Go có thể được thiết kế một cách thông minh và hiệuquả, nhưng để có thể so sánh với những ngôn ngữ như Java - một ngôn ngữ đã được hỗ trợbằng một sự tổng hợp đồ sộ các mã nguồn và một loạt những thư viên mới được tạo bởi mộtcộng đồng nhiệt tình và gắn bó với ngôn ngữ này Cho đến khi Go có thể bắt kịp được, nóvẫn còn một con đường dài để đi trong việc hổ trợ các thư viện
Trang 13Chọ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 lập trình viên có khúc mắc trong việc tải về Golang Nhân vào mục installation instruction đểđược giải thích chi tiết hơn về cách download và chọn phiên bản phù hợp cho người sử dụng
Hình 9: Trang hướng dẫn Download Golang
Sau 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
6 /* This is my first sample program */
7 fmt Println ( "Hello , World !" )
Listing 1: Code Go cho Hello WorldChạy file code để thấy dòng chữ "Hello, World!" trên màn hình console
$ go run Hello, World!
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
$ go help
Trang 142.4.3 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 khai báo tên của package cần thiết cho chương trình Đó làmột câu lệnh bắt buộc, vì môi chương trình Go chạy trong các packages Như trong chương trìnhtrên, main package là điểm bắt đầu thể thực thi chương trình Mỗi packages đều có đường dẫn vàtên của nó
• Dòng tiếp théo là import "fmt", đây là một lệnh tiền xử lý, giúp cho trình biên dịch của ngôn ngữ Go nhận biết những file cần thiết dựa trên package 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
• /* */ là phần Comments (Chú thích), trình biên dịch sẽ không quan tâm đến chúng và đây ànơi nhà lập trình chú thích những điều cần lưu ý ( có thể sử dụng // )
• fmt.Println( ) là một hàm khác có sẵn trong Go, có chức năng đưa dòng "Hello World" lênmàn hình Package fmt đã xuất phương thức Println dùng để giúp xuất kết quả là một kiểu tin nhắn ramàn hình
2.4.4 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
Ví dụ:
3
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ụ:
Trang 151 /* my first program in Go */
2
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ụ:
3
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
2.4.5 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
uint8: 0 - 255uint16: 0 - 65535uint32: 0 - 4294967295uint64: 0 - 18446744073709551615int8: -128 - 127
int16: -32768 - 32767int32: -2147483648 - 22147483647int64: -9223372036854775808 - 9223372036854775807
float32: IEEE-754 32-bit floating-point numbers
Trang 16float64: IEEE-754 64-bit floating-point numberscomplex64: Complex numbers với float32 real và imaginary partscomplex128: Complex numbers với float64 real và imaginary parts
• Một số kiểu Numeric khác:
byte: như unit8rune: như int32unit: 32 hoặc 64 bitinit: như unituintptr: số nguyên không dấu để lưu trữ uninterpreted bits 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
2.4.6 Variables
Tên của các biến sẽ bao gồm các ký tự, số và dấu ’_’ Nó buộc phát bắt đầu bằng một ký tựhay là dấu ’_’ Chữ thường và chứ hoa sẽ được phân biệt ớ trong Go Khi kháo một biến ởtrong Go, chúng ta sẽ khai báo bằng cách như sau:
3 var f , salary float32 ;
Các biến cung có thể được cúng cấp giá trị trước khi khai báo kiểu, kiểu của biến sẽ được trình biên dịch đánh giá dựa trên giá trị cảu chúng
Listing 6: Ví dụ về Khởi tạo giá trị đầu
Ví dụ:
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: Cung cấp sự đảm bảo cho trình biên dịch rằng có một biến có sẵn với kiểu
và tên đã cho để trình biên dịch có thể tiến hành biên dịch thêm mà không yêu cầu chi tiết đầy đủ củabiến.Nó chỉ có ý nghĩa tại thời điểm biên dịch, trình biên dịch phải khai báo biến thực sự tại thời điểmliên kết chương trình Ví dụ:
Trang 174 078 /* Illegal : 8 is not an octal digit */
Ví dụ về Floating-point literals:
Ví dụ về String literals:
1 "hello , dear "
2 "hello , \
3 dear "
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í
1 const variable type = value ;
Listing 7: Ví dụ về Khai báo hằng
Ví dụ:
2 const LENGTH int = 10
3 const WIDTH int = 5
4 var area int
5