Đây là bài hướng dẫn thứ ba trong series Hướng dẫn lập trình Golang cơ bản, trong bài này chúng ta sẽ nói về variables (biến) trong golang.

Các bạn hãy xem lại Phần 2: Hello World để biết cách cấu hình golang và chạy thử chương trình hello world.

Biến là gì

Biến là tên gọi của một vùng nhớ nào đó dùng để lưu trữ giá trị của một kiểu dữ liệu cụ thể. Có nhiều cú pháp khác nhau để khai báo biến trong go.

Khai báo một biến

Cú pháp: var name type

package main

import "fmt"

func main() {  
    var age int // khai báo biến
    fmt.Println("my age is", age)
}

Run in playground

Câu lệnh var age int khai báo một biến có tên là age kiểu int. Ta chưa gán giá trị cho biến này. Nếu một biến không được gán giá trị, go sẽ tự động khởi tạo giá trị zero tương ứng với kiểu của biến. Trong trường hợp này age được gán giá trị là 0. Khi chạy chương trình, ta được output như sau:

my age is 0

Một biến có thể được gán bất kỳ giá trị nào cùng kiểu với nó. Ở ví dụ trên, ta có thể gán bất kỳ giá trị nguyên nào cho biến age.

package main

import "fmt"

func main() {  
    var age int // khai báo biến
    fmt.Println("my age is ", age)
    age = 29 //gán giá trị
    fmt.Println("my age is", age)
    age = 54 //gán giá trị
    fmt.Println("my new age is", age)
}

Run in playground

Output của chương trình trên:

my age is  0  
my age is 29  
my new age is 54

 

Khai báo biến có giá trị khởi tạo

Chúng ta có thể khởi tạo giá trị khi khai báo biến.

Cú pháp: var name type = initialvalue

package main

import "fmt"

func main() {  
    var age int = 29 // khai báo biến có giá trị khởi tạo
    fmt.Println("my age is", age)
}

Run in playground

Ở ví dụ này, age là biến kiểu int có giá trị khởi tạo là 29. Chạy chương trình, ta có output như sau:

my age is 29

 

Type inference (Suy luận kiểu)

Nếu một biến có khai báo giá trị khởi tạo, Go có thể tự động suy ra kiểu của biến này từ giá trị khởi tạo đó. Do đó nếu một biến có giá trị khởi tạo, ta có thể bỏ qua việc khai báo kiểu của biến.

Nếu biến được khai báo bằng cách sử dụng cú pháp var name = initialvalue, Go sẽ tự động suy ra kiểu biến đó từ giá trị khởi tạo.

Trong ví dụ dưới đây, bạn có thể thấy kiểu int của biến age đã được bỏ qua. Vì biến có giá trị khởi tạo là 29, Go có thể suy ra rằng biến này là kiểu int.

package main

import "fmt"

func main() {  
    var age = 29 // kiểu biến được tự suy
    fmt.Println("my age is", age)
}

Run in playground

 

Khai báo nhiều biến

Ta có thể khai báo nhiều biến một lúc trên cùng một câu lệnh.

Cú pháp: var name1, name2 type = initialvalue1, initialvalue2

package main

import "fmt"

func main() {  
    var width, height int = 100, 50 // khai báo nhiều biến
    fmt.Println("width is", width, "height is", height)
}

Run in playground

Khai báo kiểu biến có thể được bỏ qua nếu các biến có giá trị khởi tạo. Chương trình dưới đây khai báo nhiều biến sử dụng suy luận kiểu.

package main

import "fmt"

func main() {  
    var width, height = 100, 50 //"int" được bỏ qua
    fmt.Println("width is", width, "height is", height)
}

Run in playground

Output của chương trình:

width is 100 height is 50

Như đã nói ở trên, trường hợp nếu chiều rộng và chiều cao không có giá trị khởi tạo, chúng sẽ được gán mặc định là 0.

package main

import "fmt"

func main() {  
    var width, height int
    fmt.Println("width is", width, "height is", height)
    width = 100
    height = 50
    fmt.Println("new width is", width, "new height is ", height)
}

Run in playground

Chương trình sẽ in ra:

width is 0 height is 0  
new width is 100 new height is  50

Có những trường hợp chúng ta muốn khai báo các biến có các kiểu khác nhau trong cùng một câu lệnh. Cú pháp sẽ là:

var (  
      name1 = initialvalue1,
      name2 = initialvalue2
)

Theo dõi ví dụ sau:

package main

import "fmt"

func main() {  
    var (
        name   = "naveen"
        age    = 29
        height int
    )
    fmt.Println("my name is", name, ", age is", age, "and height is", height)
}

Run in playground

Ở đây chúng ta khai báo biến name có kiểu string, biến age và biến height kiểu int (chúng ta sẽ nói về các kiểu dữ liệu khác nhau có sẵn trong golang ở phần sau). Chạy chương trình trên, ta có output sau:

my name is naveen , age is 29 and height is 0

 

Short hand declaration (Khai báo nhanh)

Bên cạnh các cách khai báo biến như trên, Go cung cấp một cách khai báo khác nhanh và ngắn gọn hơn, có thể gọi là khai báo nhanh, bằng cách sử dụng toán tử :=

Cú pháp: name := initialvalue

package main

import "fmt"

func main() {  
    name, age := "naveen", 29 // khai báo nhanh
    fmt.Println("my name is", name, "age is", age)
}

Run in playground

Output của chương trình:

my name is naveen age is 29

Khai báo nhanh yêu cầu phải có đầy đủ các giá trị khởi tạo tương ứng với các biến được khai báo phía bên trái của toán tử :=. Chương trình dưới đây sẽ thông báo lỗi vì biến age không được gán giá trị.

package main

import "fmt"

func main() {  
    name, age := "naveen" //error
    fmt.Println("my name is", name, "age is", age)
}

Run in playground

Cách khai báo nhanh được sử dụng khi có ít nhất một biến mới được khai báo phía bên trái của toán tử :=. Theo dõi ví dụ dưới đây:

package main

import "fmt"

func main() {  
    a, b := 20, 30 // khai báo nhanh biến a và b
    fmt.Println("a is", a, "b is", b)
    b, c := 40, 50 // biến b đã được khai báo rồi còn biến c giờ mới được khai báo
    fmt.Println("b is", b, "c is", c)
    b, c = 80, 90 // gán giá trị mới cho 2 biến đã được khai báo b và c
    fmt.Println("changed b is", b, "c is", c)
}

Run in playground

Output của chương trình:

a is 20 b is 30  
b is 40 c is 50  
changed b is 80 c is 90  

Nếu ta chạy chương trình sau:

package main

import "fmt"

func main() {  
    a, b := 20, 30 // 2 biến a và b được khai báo
    fmt.Println("a is", a, "b is", b)
    a, b := 40, 50 // lỗi, không có biến mới được khai báo
}

Run in playground

Chương trình báo lỗi no new variables on left side of :=, vì cả 2 biến a và b đã được khai báo rồi và không có biến nào mới ở bên trái của toán tử :=

Biến cũng có thể được gán giá trị trong quá trình run time. Xem ví dụ sau:

package main

import (  
    "fmt"
    "math"
)

func main() {  
    a, b := 145.8, 543.8
    c := math.Min(a, b)
    fmt.Println("minimum value is ", c)
}

Run in playground

Ở chương trình trên, giá trị của biến c được tính toán trong quá trình run time là giá trị nhỏ nhất giữa 2 biến a và b. Output chương trình:

minimum value is  145.8

Go là ngôn ngữ kiểu mạnh (strongly typed), biến đã được khai báo là một kiểu nào đó thì không thể gán giá trị kiểu khác được nữa. Chương trình dưới đây thông báo lỗi cannot use "naveen" (type string) as type int in assignment vì biến age đã được khai báo kiểu int mà ta lại gán giá trị kiểu string cho nó.

package main

func main() {  
    age := 29      // age kiểu int
    age = "naveen" // lỗi vì gán một string cho biến kiểu int
}

Run in playground

Phần hướng dẫn về variables đến đây là kết thúc. Xin vui lòng để lại những ý kiến và phản hồi của các bạn. Cảm ơn vì đã đọc.

Bài viết được dịch từ golangbot.com

Phần tiếp theo - Kiểu dữ liệu


Techmaster đang tuyển sinh học viên tham gia Lộ trình đào tạo lập trình viên Full-Stack, đảm bảo việc làm cho các bạn học viên tốt nghiệp.

Chi tiết xem tại: https://techmaster.vn/lo-trinh/bktdr9451co1sbtm41ug/lo-trinh-dao-tao-golang-web-fullstack-8-thang-cam-ket-viec-lam