Hướng dẫn Golang: Bài viết đầy đủ nhất

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é ^^!

Đây thực sự là một tài nguyên tuyệt vời cho những người đang muốn học ngôn ngữ tuyệt vời này.

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"] = "bob@gmail.com"
    emails["Nam Bá"] = "nguyenbahoangnam@gmail.com"
 
    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

About nguyenbahoangnam

Đam mê Digital Marketing, Web Development, Fitness & Healthy Diet đồng thời cũng là Fan cuồng của lối sống tối giản ^^!. Quyết tâm khai quật nghiệp "nhà văn"

Leave a Comment

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *