Khóa học Go lang cơ bản
Chú ý: Bài viết này lấy từ nguồn tại đây
Phần viết lách dưới đây là những gì mình hiểu được từ khóa học. Nếu bạn nào thấy nhận định của mình không chính xác thì có thể đóng góp ý kiến nhé ^^!
Go lang là mã nguồn thông minh & có tốc độ cực nhanh tới từ Google. Go Lang có một thư viện rất nhiều tài nguyên mà bạn có thể tham khảo tại
godoc.org
Sử dụng lệnh go get “Tài nguyên” để load những dependencies về
Một Workspace Go lang cơ bản gồm những gì
Workspace của Go sẽ bao gồm 2 file chính
- src bao gồm source của file
- bin bao gồm các lệnh & hàm
Dưới đây là 1 ví dụ về 1 cấu trúc Go lang cơ bản
- bin chứa binary of code
- src chứa code từ các project & nguồn khác nhau
- pkg chứa khai báo các thành phần
Tạo 1 folder với cấu trúc cơ bản kể trên. Để mở chương trình, project go_crash_course, ta đánh vào “code .” để hiển thị workspace đó trên Visual Studio Code
Với cấu trúc được liệt kê ở phía trên thì khi ta go get 1 chương trình tại Godoc, các folder cũng sẽ tuân theo cấu trúc cơ bản kể trên.
Các chương trình sẽ nhảy vào phần src dưới cái tên của đơn vị phát triển(github…) rồi mới vào tới tên của từng chương trình.
001 – Bắt đầu viết chương trình Hello trên Go lang
Đầu tiên, ta sẽ xây dựng main.go có thể coi như một file index trong html
File main.go sẽ có các lệnh như sau:
package main
import "fmt"
func main() {
fmt.Println("Hello World")
}
Trong đó, package main là câu mở đầu lúc nào cũng có để tạo tiền đề định nghĩa chức năng của main
import “fmt” chương trình print lệnh trên log của Go
Như vậy khi đã định nghĩa đủ main & chương trình fmt thì ta sử dụng lệnh
func main() {
fmt.Println(“Hello world”) // Sử dụng chương trình fmt để in ra dòng lệnh (Println) mang tên “Hello world”
}
Tiếp đó bạn sử dụng lệnh go install để xuất chương trình ra file bin
002 – Thiết lập biến trong Golang
Tiếp theo, ta xây dựng chương trình gọi các biến và in chúng ra. Sử dụng hàm Printf (Print format ) để xác định các kiểu dữ liệu cần thiết.
Sử dụng var biến = “” tương tự javascript & nodejs. Bạn cũng có thể in ra một danh sách các biến được định nghĩa trước.
Biến cũng có thể được định nghĩa phía trên đầu của file main.go & chương trình vẫn sẽ hiểu & chạy được
- Như hình, chương trình đã được đặt biến var name = ”Bad” lên đầu
- Có thể sử dụng cách gọi biến nhanh name := “Brad”
- Có thể sử dụng cấu trúc gọi gộp 2 biến lại và định nghĩa cùng 1 lúc
03 – Packages
Tạo 1 module mới & sử dụng hàm math để tính toán, lưu ý rằng:
Hàm nào được import vào sẽ không xuất hiện nếu ta không sử dụng
Có thể sử dụng các module tự dựng sẵn, ví dụ như tạo 1 hàm reverse & khai báo chúng ra.
package strutil
func Reverse(s string) string {
runes := []rune(s)
for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
runes[i], runes[j] = runes[j], runes[i]
}
return string(runes)
}
Trong đó, hàm reverse được định nghĩa đối với đối tượng biến là string: đoạn text
04 – Hàm Function
Đối với các hàm function, Go lang có thể xử lý như sau
package main
import "fmt"
func greeting(name string) string {
return "Hello " + name
}
func main() {
fmt.Println(greeting("Nam"))
}
Trong đó, fmt là chương trình giúp ta in lệnh ra console. Còn func greeting(name string) là định nghĩa chức năng greeting với biến là tên (string), còn với đó, kết quả cũng được gọi là string
Đối với các hàm có nhiều tham số, ta làm tương tự, có thể gộp hoặc định nghĩa nhiều biến
05 – Hàm Array Slice
Go lang giúp bạn trả về giá trị từ 1 mảng dữ liệu được định nghĩa sẵn hoặc tạo ra một slice(thanh trượt chứa những mảng)
06 – Hàm Conditionals
package main
import "fmt"
func main() {
x := 15
y := 10
if x < y {
fmt.Printf("%d is less than %d\n", x, y) //cách sử dụng hàm Prinf
} else {
fmt.Printf("%d is less than %d\n", y, x) //cách sử dụng hàm Prinf
}
}
Hàm Conditionals giúp ta tạo các điều kiện tương tự như các ngôn ngữ lập trình khác. Cấu trúc fmt.Printf(“%d nhỏ hơn %d\n”, x, y) cho ta thấy khi gán 2 giá trị x đứng trước cho %d và y đứng sau cho %d\n ta nhận được kết quả như vậy.
Hàm else if sử dụng tương tự PHP & Javascript
// else if
color := "red"
if color == "red" {
fmt.Println("color is red")
} else if color == "blue" {
fmt.Println("color is blue")
} else {
fmt.Println("color is not blue or red ")
}
Đối với hàm switch
// switch
switch color {
case "red":
fmt.Println("color is red")
case "blue":
fmt.Println("color is blue")
default:
fmt.Println("color is Not red")
}
}
Trong đó default là các trường hợp còn lại
07 – Hàm loops
func main() {
// Long method
i := 1
for i <= 10 {
fmt.Println(i)
//i = i + 1
i++
}
// Short method
for i := 1; i <= 10; i++ {
fmt.Printf("Number %d\n", i)
}
// Fizzbuzz
for i := 1; i <= 100; i++ {
//Nếu i chia hết cho 15
if i%15 == 0 {
fmt.Println("Fizzbuzz")
} else if i%3 == 0 {
fmt.Println("Fizz")
} else {
fmt.Println(i)
}
}
}
Tính năng định nghĩa một biến i, nếu biến i chạm tới 1 giá trị nào đó thì cho i đó liên tục tăng dần lên 1 giá trị mỗi lần (i++)
Ví dụ thứ 3 giúp ta in ra các ký tự Fizz hoặc Fizzbuzz nếu kết quả trả về chia hết cho 15 hoặc chia hết cho 3
08 – Maps
package main
import "fmt"
func main() {
// Define map
emails := make(map[string]string)
//Assign kv
emails["Bob"] = "[email protected]"
emails["Nam Bá"] = "[email protected]"
fmt.Println(emails)
fmt.Println(emails["Bob"])
}
Map giúp ta tạo 1 data ánh xạ thành phần này với thành phần kia, ví dụ ở đây map nối 2 địa chỉ trong ngoặc vuông là tên còn kết quả trả về là địa chỉ email
- Khi in 1 danh sách map của hàm emails ta sử dụng fmt.Println(emails)
- Nếu muốn in một địa chỉ email tương ứng, ta sử dụng fmt.Println(emails[“Tên”])
//Delete from map
delete(emails, "Bob")
fmt.Println(emails)
Ta cũng có thể tiến hành xóa một thành phần ra khỏi maps
Tương tự như vậy, ta cũng có thể gán 1 lúc nhiều giá trị ánh xạ sang nhiều biến trong 1 maps để tăng tốc quá trình triển khai