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

LẬP TRÌNH NÂNG CAO (CO2039) TIỂU LUẬN tìm HIỂU về GOLANG

16 3 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

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA KHOA HỌC & KỸ THUẬT MÁY TÍNH LẬP TRÌNH NÂNG CAO (CO2039) TIỂU LUẬN TÌM HIỂU VỀ GOLANG GVHD: Trương Tuấn Anh SV: Lương Hồng Tiến Đạt – 2012924 Tp Hồ Chí Minh, Tháng 5/2022 Trường Đại Học Bách Khoa Tp.Hồ Chí Minh Khoa Khoa Học & Kỹ Thuật Máy Tính Mục lục LỜI MỞ ĐẦU NỘI DUNG 2.1 Một số đặc điểm Go 2.2 Cách sử dụng lập trình với ngơn ngữ Golang 2.2.1 Cài đặt sử dụng Golang 2.2.2 Syntax Go 2.2.3 Kiểu liệu khai báo biến 2.2.4 Xử lý output hình 2.2.5 Array 2.2.6 Slices 2.2.7 Câu lệnh điều kiện câu lệnh switch 2.2.8 Vòng lặp 2.2.9 Hàm 2.2.10 Struct 2.2.11 Map 2.2.12 Goroutine Channels 2.3 Điểm mạnh, điểm yếu Golang 2.3.1 Ưu điểm 2.3.2 Nhược điểm 2 2 3 5 8 10 11 12 13 13 14 KẾT LUẬN 14 Tài liệu 14 Tiểu luận mơn Lập trình nâng cao - Niên khóa 2021-2022 Trang 1/15 Trường Đại Học Bách Khoa Tp.Hồ Chí Minh Khoa Khoa Học & Kỹ Thuật Máy Tính LỜI MỞ ĐẦU Go hay Golang ngôn ngữ nguồn mở, đa tảng, ngôn ngữ phát triển Google Robert Griesemer, Rob Pike, Ken Thompson vào năm 2007 Với syntax có phần giống C++ lại đơn giản, từ phát triển lên nhiều sử dụng nhiều lập trình viên toàn giới để tạo nên ứng dụng, hệ thống với hiệu cao Hình 1: Logo ngôn ngữ Golang Golang sử dụng cho nhiều mục dích khác nhau, ta kể đến lĩnh vực mà sử dụng hiệu như: • Sử dụng cho việc phát triển website phía Server (Web development) • Sử dụng cho việc phát triển chương trình Network-based tức chương trình chạy mạng lưới giao tiếp với nhiều máy tính khác • Sử dụng cho việc phát triền ứng dụng Enterprise đa tảng • Phát triển Cloud native, tức tiếp cận, xây dựng dự án dựa lợi thể mơ hình điện toán đám mây Và tiểu luận này, ta tìm hiểu ngơn ngữ Golang, cách sử dụng tiếp cận đưa lợi yếu điểm ngôn ngữ trở nên phổ biến ưa chuộng NỘI DUNG 2.1 Một số đặc điểm Go Ta kể đến đặc điểm bật Golang như: • Go ngơn ngữ lập trình biên soạn (compiled language) Phần mềm viết Go cần biên soạn sử dụng Go compile trước chạy • Với Golang ta thử nghiệm đơn vị, cụ thể ta viết thử nghiệm đơn vị song song với mã bạn, điều giúp bạn hiểu phạm vi mã kiểm tra riêng phần • Golang hỗ trợ xử lý đa luồng multi-threading • Go ngơn ngữ lập trình kiểu tĩnh (hay static type), biến liệu Golang không thay đổi suốt chương trình • Với tảng độc lập, Golang giống ngơn ngữ Java, hỗ trợ tính độc lập tảng, mã biên dịch chuyển đổi thành dạng nhị phân nhỏ tốt Mã Golang biên dịch tảng máy chủ ứng dụng bạn làm việc 2.2 2.2.1 Cách sử dụng lập trình với ngơn ngữ Golang Cài đặt sử dụng Golang Như ngơn ngữ lập trình khác, ta cần text editor để viết code compiler để biên dịch Có nhiều lựa chọn cho lập trình viên Để cài đặt ta truy cập vào đường link sau: https://golang.org/dl/ Sau đó, bạn dùng VScode, bạn cài đặt extension Golang chạy chương trình sử dụng Golang Tiểu luận mơn Lập trình nâng cao - Niên khóa 2021-2022 Trang 2/15 Trường Đại Học Bách Khoa Tp.Hồ Chí Minh Khoa Khoa Học & Kỹ Thuật Máy Tính 2.2.2 Syntax Go Trước tiên để nói quy tắc syntax Go, ta xem xét cấu trúc file code Go gồm phần Ta xét ví dụ nội dung file Go đơn giản sau: package main import ( " fmt " ) func main () { fmt Println ( " Advanced Programming " ) } Listing 1: Ví dụ file code Go đơn giản Và từ ta chia cấu trúc file mã Go gồm phần sau: • Khai báo package (Ta dùng từ khóa package dịng ví dụ trên, chương trình thuộc package main) • Import package cần thiết khác (Ví dụ package fmt import vào dịng ví dụ trên) • Các hàm (Hàm main thực ví dụ trên, code hàm nằm bên cặp ngoặc ’{}’) • Các câu lệnh, biểu thức: Những câu lệnh Go ngăn cách cách xuống dịng (Phím Enter) dấu ’;’ 2.2.3 Kiểu liệu khai báo biến Tương tự ngôn ngữ khác, Go cung cấp kiểu liệu sau: • int: Kiểu liệu lưu trữ số nguyên • float32 : Kiểu liệu lưu trữ số thực 32 bits • string: Kiểu liệu lưu trữ chuỗi ký tự, ngăn cách dấu ngoặc kép • bool : Kiểu liệu lưu trữ giá trị logic: true false Ngồi cịn kiểu liệu khác uint, byte, rune, Và tiếp theo, để khai báo biến ta sử dụng hai cách sau: • Sử dụng từ khóa var theo syntax: var = • Sử dụng ":=" theo sau giá trị biến, từ compiler infer type biến gán, sử dụng cách này, bắt buộc ta phải đưa trị gán Ta lấy đoạn chương trình ví dụ: package main import " fmt " 10 11 12 13 14 15 func main () { var name string = " Luong Dat " var address string var a , b , c int = , 11 , num := 811 c , d := , " World ! " fmt Println ( name ) fmt Println ( address ) fmt Println (a , b , c ) fmt Println ( num ) fmt Println (c , d ) } // // // // // Type is Without Declare Type is Declare string initial value multiple variables using var inferred multiple variables using := Listing 2: Ví dụ khai báo biến Tiểu luận mơn Lập trình nâng cao - Niên khóa 2021-2022 Trang 3/15 Trường Đại Học Bách Khoa Tp.Hồ Chí Minh Khoa Khoa Học & Kỹ Thuật Máy Tính Ở ví dụ đưa ví dụ cách khai báo sử dụng từ khóa var cho biến, khai báo khơng cần value hay khai báo lúc nhiều biến khai báo sử dụng inferring biến nhiều biến Ta thu kết sau (với biến khơng có initial value khởi tạo giá trị mặc định, ví dụ string mặc định "", int mặc định 0, bool mặc định false): Luong Dat 11 811 World ! Ngoài ra, Go hỗ trợ việc khai báo từ khóa const, biến biến readonly thay đổi giá trị, ta khai báo ví dụ sau: package main import ( " fmt " ) const PI = 3.14 func main () { fmt Println ( PI ) } Listing 3: Ví dụ Ta nhận kết quả: 3.14 2.2.4 Xử lý output hình Để đưa kết console, ta sử dụng ba hàm cung cấp package fmt sau: • Print(): Để in biến truyền vào hàng, muốn xuống hàng sử dụng thêm " n" • Println(): Tương tự Print() hàm in biến cách space trống xuống hàng in hết • Printf(): In theo định dạng tùy chỉnh dựa vào thêm vào formatting verbs như: - %v : in giá trị biến - %T : in kiểu liệu biến - %b: in theo dạng binary - Ngồi cịn có nhiều formatting verbs khác %o, %#v, package main import ( " fmt " ) func main () { var i , j string = " Hello " , " World " fmt Print (i , j , " \ n " ) fmt Println (i , j ) fmt Printf ( " In i = %v , co type la % T " , i , i ) 10 } Listing 4: Ví dụ lệnh in Ta nhận kết quả: HelloWorld Hello World In i = Hello , co type la string Tiểu luận môn Lập trình nâng cao - Niên khóa 2021-2022 Trang 4/15 Trường Đại Học Bách Khoa Tp.Hồ Chí Minh Khoa Khoa Học & Kỹ Thuật Máy Tính 2.2.5 Array Với Go, để sử dụng mãng, ta cần khai báo mãng theo hai cách sau: var = [] := [] Nếu length không nêu rõ length infer từ values Ta xem ví dụ sau: package main import ( " fmt " ) func main () { var a = [ ] int {1 ,2 ,3} b := [ ] int {5 ,10 ,15 ,20} fmt Println ( a ) fmt Println ( b ) } Listing 5: Ví dụ khai báo mãng Ta nhận kết quả: [1 3] [5 10 15 20] Và để truy cập vào phần tử mãng theo index, ta sử dụng syntax tương tự với C++, thơng qua ta thay đổi giá trị phần tử đó, ví dụ sau: package main import ( " fmt " ) func main () { nums := [3] int {8 , 11 , 22} fmt Println ( nums [2]) nums [2] = 100 fmt Println ( nums ) } Listing 6: Ví dụ truy cập phần tử mãng Ta nhận kết sau: 22 [8 11 100] Ngồi ra, ta lấy độ dài mãng thơng qua hàm len(), ví dụ: package main import ( " fmt " ) func main () { a := [5] string { " x " , " y " , " z " , " t " ," k " } b := [ ] int {3 ,5 ,7 ,9} fmt Println ( len ( a ) ) fmt Println ( len ( b ) ) 10 } Listing 7: Ví dụ hàm len() Ta nhận kết sau: 2.2.6 Slices Tương tự Array Slices dùng để lưu trữ mãng phần tử, điểm khác biệt với Slices ta thay đổi kích thước nó, ta tạo Slice thơng qua cách: Tiểu luận mơn Lập trình nâng cao - Niên khóa 2021-2022 Trang 5/15 Trường Đại Học Bách Khoa Tp.Hồ Chí Minh Khoa Khoa Học & Kỹ Thuật Máy Tính • Sử dụng dạng syntax [] • Tạo Slice từ Array • Sử dụng hàm make() với syntax: := make([], , ) Khi sử dụng slices, ta sử dụng hàm len() để lấy số phần tử chứa Slice cap() để lấy số phần tử tối đa mà slice đạt trước grow Ta lấy ví dụ việc tạo slice sử dụng hàm sau: package main import ( " fmt " ) func main () { a := [] string { " SG " , " TS " , " LG " , " TD " } // Create slice fmt Printf ( " a = % v \ n " , a ) fmt Printf ( " length = % d \ n " , len ( a ) ) fmt Printf ( " capacity = % d \ n " , cap ( a ) ) array1 := [6] int {10 , 11 , 12 , 13 , 14 , 15} b := array1 [2:4] // Create slice from an array fmt Printf ( " b = % v \ n " , b ) fmt Printf ( " length = % d \ n " , len ( b ) ) fmt Printf ( " capacity = % d \ n " , cap ( b ) ) 10 11 12 13 14 15 c := make ([] int , , 10) // Create slice with make () fmt Printf ( " c = % v \ n " , c ) fmt Printf ( " length = % d \ n " , len ( c ) ) fmt Printf ( " capacity = % d \ n " , cap ( c ) ) 16 17 18 19 20 } Listing 8: Ví dụ slice Ta nhận kết sau: a = [ SG TS LG TD ] length = capacity = b = [12 13] length = capacity = c = [0 0 0] length = capacity = 10 Thực chất, Slice tham chiếu đến Array, mơ tả phần (hoặc tồn bộ) Array Nó có kích thước động nên thường sử dụng nhiều Array Để truy xuất, thay đổi giá trị phần tử slice ta thực tương tự array Và đề cập trên, slice thay đổi kích thước, thêm bớt phần tử nối slice thông qua hàm append() ví dụ sau: package main import ( " fmt " ) 10 11 func main () { a := [] int {1 , , 3} a = append (a , , 11 , b := [] int {4 , , 6} c := append (a , b ) fmt Printf ( " a =% v \ n " , fmt Printf ( " c =% v \ n " , } 22) // Append a with more elements // Append b to a then save to c a) c) Listing 9: Ví dụ hàm append() Ta nhận kết sau: a =[1 11 22] c =[1 11 22 6] Tiểu luận mơn Lập trình nâng cao - Niên khóa 2021-2022 Trang 6/15 Trường Đại Học Bách Khoa Tp.Hồ Chí Minh Khoa Khoa Học & Kỹ Thuật Máy Tính 2.2.7 Câu lệnh điều kiện câu lệnh switch Syntax câu lệnh điều kiện if Golang tương tự với ngôn ngữ C++ if { // code to be executed if condition is true }else { // code to be executed if condition is false } Ta lấy ví dụ sau để thấy nhiều cách sử dụng if else: package main import ( " fmt " ) 10 func main () { temp := 45 if ( temp < 18) { fmt Println ( " a " ) } else { fmt Println ( " b " ) } 11 if ( temp > 100) { fmt Println ( " c " ) } else if ( temp > 50) { fmt Println ( " d " ) } else { fmt Println ( " e " ) } 12 13 14 15 16 17 18 19 } Listing 10: Ví dụ câu lệnh if Ta nhận kết sau: b e Ngoài Golang cung cấp câu lệnh switch case để so sánh giá trị với giá trị khác thực câu lệnh theo ý người lập trình với syntax sau: switch { case x: // code block case y: // code block case z: default: // code block } Câu lệnh so sánh giá trị expression với giá trị case, câu lệnh phần case chạy Phần default optimal, có khơng Ta lấy ví dụ sau: package main import ( " fmt " ) func main () { num := switch num { case 1: fmt Println ( " One " ) case 2: fmt Println ( " Two " ) case 3: fmt Println ( " Three " ) } 10 11 12 13 14 15 } Listing 11: Ví dụ câu lệnh switch Tiểu luận mơn Lập trình nâng cao - Niên khóa 2021-2022 Trang 7/15 Trường Đại Học Bách Khoa Tp.Hồ Chí Minh Khoa Khoa Học & Kỹ Thuật Máy Tính Ta nhận kết sau: Two 2.2.8 Vòng lặp Để sử dụng vòng lặp Go, ta sử dụng for (Khơng có while) thơng qua syntax sau: for ; ; { // code to be executed for each iteration } • : Để khởi tạo giá trị biến đếm • : Điều kiện tiếp tục vịng lặp sau lần lặp • : Cập nhật giá trị biến đếm sau lần lặp Ta lấy ví dụ sau: package main import ( " fmt " ) func main () { for i :=0; i < 10; i ++ { fmt Print (i , " " ) } } Listing 12: Ví dụ câu lệnh for Ta nhận kết sau: 1 Với cách sử dụng for tiếp theo, ta sử dụng từ khóa range sau: for , := { // code to be executed for each iteration } Để hình dung rõ hơn, ta xem ví dụ sau: package main import ( " fmt " ) func main () { singers := [3] string { " Selena Gomez " , " Taylor Swift " , " Harry Styles " } for idx , val := range singers { fmt Printf ( " % v % v \ n " , idx , val ) } } Listing 13: Ví dụ câu lệnh for với range Ta nhận kết sau: Selena Gomez Taylor Swift Harry Styles 2.2.9 Hàm Với ngôn ngữ lập trình việc sử dụng function vơ cần thiết, với Go ta định nghĩa hàm thơng qua từ khóa func với syntax cụ thể sau: func ( , , ) { // code to be executed } Ngồi hàm hàm thực thi gọi, sau ví dụ để gọi hàm khơng có tham số có tham số: Tiểu luận mơn Lập trình nâng cao - Niên khóa 2021-2022 Trang 8/15 Trường Đại Học Bách Khoa Tp.Hồ Chí Minh Khoa Khoa Học & Kỹ Thuật Máy Tính package main import ( " fmt " ) 10 11 12 13 14 func doSomething () { fmt Println ( " Advanced Programming is fun ! " ) } func printName ( name string ) { fmt Println ( " My name is " , name ) } func main () { doSomething () printName ( " Dat " ) printName ( " Mason Luong " ) } Listing 14: Ví dụ hàm Ta nhận kết sau: Advanced Programming is fun ! My name is Dat My name is Mason Luong Ngoài ta trả giá trị kết hàm, với Go ta cịn đặt trước tên biến lưu kết trả về, trả cần ghi return trống Ta lấy ví dụ hàm hàm không đặt tên biến trả hàm có sau: package main package main import ( " fmt " ) 10 11 12 13 14 15 func add ( x int , y int ) int { return x + y } func product ( x int , y int ) ( result int ) { result = x * y return } func main () { fmt Println ( add (3 , 4) ) fmt Println ( product (3 , 4) ) } Listing 15: Ví dụ hàm Ta nhận kết sau: 12 Đặc biệt ta cịn trả lượt nhiều giá trị gán vào biến chương trình, ví dụ sau: package main import ( " fmt " ) func addAndMulti ( x int , y int ) ( res1 int , res2 int ) { res1 = x + y res2 = x * y return } 10 11 12 13 func main () { a , b := addAndMulti (4 ,5) fmt Println (a , b ) } Listing 16: Ví dụ hàm Ta nhận kết sau: 20 Tiểu luận mơn Lập trình nâng cao - Niên khóa 2021-2022 Trang 9/15 Trường Đại Học Bách Khoa Tp.Hồ Chí Minh Khoa Khoa Học & Kỹ Thuật Máy Tính Trong vài trường hợp, bạn sử dụng hàm trả nhiều giá trị bạn quan tâm đến kết bạn sử dụng dấu "_" để loại bỏ giá trị đi, lấy ví dụ: package main import ( " fmt " ) func addAndMulti ( x int , y int ) ( res1 int , res2 int ) { res1 = x + y res2 = x * y return } 10 11 12 13 func main () { _ , b := addAndMulti (5 ,6) fmt Println ( b ) } Listing 17: Ví dụ hàm Ta nhận kết sau: 30 2.2.10 Struct Để tạo tập hợp liệu khác nhau, kiểu khác ta sử dụng struct Với Go, ta sử dụng syntax sau để khai báo kiểu mới: type struct { ; ; ; } Sau định nghĩa struct mới, ta khai báo biến thuộc kiểu struct sử dụng, để truy cập vào hay thay đổi liệu struct ta sử dụng operator dấu chấm "." Ta lấy ví dụ sau: package main import ( " fmt " ) type Singer struct { name string genre string age int } 10 11 12 func main () { var s1 Singer var s2 Singer 13 14 15 16 17 // s1 specification s1 name = " Selena Gomez " s1 genre = " Pop " s1 age = 29 18 19 20 21 22 // s2 specification s2 name = " Taylor Swift " s2 genre = " Folk " s2 age = 33 23 24 25 26 27 // Access and print s1 info fmt Println ( " Name : " , s1 name ) fmt Println ( " Genre : " , s1 genre ) fmt Println ( " Age : " , s1 age ) 28 29 30 31 32 // Access and print s2 info fmt Println ( " Name : " , s2 name ) fmt Println ( " Genre : " , s2 genre ) fmt Println ( " Age : " , s2 age ) Tiểu luận mơn Lập trình nâng cao - Niên khóa 2021-2022 Trang 10/15 Trường Đại Học Bách Khoa Tp.Hồ Chí Minh Khoa Khoa Học & Kỹ Thuật Máy Tính 33 } Listing 18: Ví dụ struct Ta nhận kết sau: Name : Selena Gomez Genre : Pop Age : 29 Name : Taylor Swift Genre : Folk Age : 33 2.2.11 Map Một cấu trúc liệu có lẽ phổ biến sử dụng nhiều map, với map ta lưu liệu theo cặp : Nhờ vào mà việc truy cập phần tử theo key dễ dàng Với Go, ta tạo map theo nhiều cách khác nhau, ta xem ví dụ sau để thấy cách tạo map: package main import ( " fmt " ) 10 11 12 13 func main () { // Create map with var var a = map [ string ] string { " brand " : " Gucci " , " season " : " Winter " , " year " : " 2022 " } // Create map with := b := map [ string ] int { " LA " : , " NY " : , " WDC " : , " TX " : 4} // Create map with make var c = make ( map [ string ] string ) // The map is empty now c [ " brand " ] = " LV " c [ " season " ] = " Summer " c [ " year " ] = " 2021 " 14 fmt Printf ( " a = % v \ n " , a ) fmt Printf ( " b = % v \ n " , b ) fmt Printf ( " c = % v \ n " , c ) 15 16 17 18 } Listing 19: Ví dụ khai báo map Ta nhận kết sau: a = map [ brand : Gucci season : Winter year :2022] b = map [ LA :1 NY :2 TX :4 WDC :3] c = map [ brand : LV season : Summer year :2021] Sau ta access vào map ta tìm hiểu delete() để xóa element map cách truyền vào map_name va key cần xóa, ta ví dụ sau: package main import ( " fmt " ) func main () { var a = map [ string ] string { " brand " : " Gucci " , " season " : " Winter " , " year " : " 2022 " } fmt Println ( a ) delete (a , " year " ) fmt Println ( a ) } Listing 20: Ví dụ delete() map Ta nhận kết sau: map [ brand : Gucci season : Winter year :2022] map [ brand : Gucci season : Winter ] Ngồi ta cịn kiểm tra xem key map có tồn element hay khơng, ví dụ: package main import ( " fmt " ) Tiểu luận mơn Lập trình nâng cao - Niên khóa 2021-2022 Trang 11/15 Trường Đại Học Bách Khoa Tp.Hồ Chí Minh Khoa Khoa Học & Kỹ Thuật Máy Tính func main () { var a = map [ string ] string { " brand " : " Gucci " , " season " : " Winter " , " year " : " 2022 " } val1 , ok1 := a [ " brand " ] // Checking for existing key and its value val2 , ok2 := a [ " color " ] // Checking for non - existing key and its value _ , ok3 := a [ " year " ] // Only checking for existing key and not its value 10 fmt Println ( val1 , ok1 ) fmt Println ( val2 , ok2 ) fmt Println ( ok3 ) 11 12 13 14 } Listing 21: Ví dụ việc kiểm tra key map Ta nhận kết sau: Gucci true false true 2.2.12 Goroutine Channels Một đặc điểm xem mạnh Golang Golang hỗ trợ việc lập trình concurrency (lập trình đồng bộ) mạnh mẽ Và với phần ta tìm hiểu khái niệm Go Goroutine Channels, ta hiểu định nghĩa Goroutine cách tổng quát sau: "Goroutine function chạy đồng thời với function khác" Vậy Go xử dụng chế để sử dụng Gorountine cho việc lập trình đồng thời, cụ thể ta hiểu sau: Một function tồn cách đa luồng với Goroutine khác không gian nhớ, điều khiển sử dụng để quản lý Goroutine phân phối chúng vào xử lý logic gắn xử lý logic với thread hệ thống tạo trước để thực thi Goroutine Nói cách khác, thread hệ thống xử lý nhóm Goroutine điều phối thông qua xử lý logic Với điều khiển quản lý tác vụ đồng thời chế xử lý logic, khó khăn, phức tạp khai báo thread Go xử lý sẵn Để khai báo function sử dụng Routines, ta dùng từ khóa go để hình dung dễ dàng sử dụng Goroutine, ta xét ví dụ sau: package main import ( " fmt " " time " ) 10 11 12 13 14 15 16 17 func f ( from string ) { for i := 0; i < 3; i ++ { fmt Println ( from , " : " , i ) time Sleep ( time Second ) } } func main () { // Suppose we have a function call ‘f ( s ) ‘ Here ’s how // we ’d call that in the usual way , running it // synchronously go f ( " goroutine " ) 18 19 20 21 22 // To invoke this function in a goroutine , use // ‘ go f ( s ) ‘ This new goroutine will execute // concurrently with the calling one f ( " direct " ) 23 24 25 26 27 28 // Our two function calls are running asynch ronous ly in // separate goroutines now Wait for them to finish // ( for a more robust approach , use a [ WaitGroup ]( waitgroups ) ) time Sleep ( time Second ) fmt Println ( " done " ) Tiểu luận mơn Lập trình nâng cao - Niên khóa 2021-2022 Trang 12/15 Trường Đại Học Bách Khoa Tp.Hồ Chí Minh Khoa Khoa Học & Kỹ Thuật Máy Tính 29 } Listing 22: Ví dụ Goroutine Ta nhận kết sau: direct : goroutine : goroutine : direct : goroutine : direct : done Với cách viết câu lệnh thơng thường thứ tự câu lệnh hàm main chạy theo thứ tự từ xuống dưới, ta sử dụng Gorountine (ở dịng 17) lời gọi hàm dòng 22 f("direct") chạy song song với lời gọi hàm f("goroutine"), lệnh in sử dụng hàm f in không theo thứ tự, dẫn đến kết có chen lẫn direct goroutine Rõ ràng việc sử dụng Goroutine chưa đủ, Goroutines muốn giao tiếp với đồng trình chạy ? Và lý Channels đời Ta có định nghĩa sau: "Channels cung cấp cách thức cho phép goroutines giao tiếp với thực đồng hóa" Ta khai báo Channels thông qua make theo syntax sau: := make(chan ) Khi có channel, ta giao tiếp thông qua syntax để truyền liệu sau:

Ngày đăng: 17/10/2022, 04:49

Xem thêm:

HÌNH ẢNH LIÊN QUAN

Hình 1: Logo của ngơn ngữ Golang - LẬP TRÌNH NÂNG CAO (CO2039) TIỂU LUẬN tìm HIỂU về GOLANG
Hình 1 Logo của ngơn ngữ Golang (Trang 3)
11 fm t. Println( t. val1 , ok1 ) - LẬP TRÌNH NÂNG CAO (CO2039) TIỂU LUẬN tìm HIỂU về GOLANG
11 fm t. Println( t. val1 , ok1 ) (Trang 13)
Để khai báo một function sử dụng Routines, ta dùng từ khóa go và để có thể hình dung sự dễ dàng khi sử dụngGoroutine, ta xét ví dụ sau: - LẬP TRÌNH NÂNG CAO (CO2039) TIỂU LUẬN tìm HIỂU về GOLANG
khai báo một function sử dụng Routines, ta dùng từ khóa go và để có thể hình dung sự dễ dàng khi sử dụngGoroutine, ta xét ví dụ sau: (Trang 13)
w