Go – Biến

Trong bài viết này chúng ta sẽ cùng nhau tìm hiểu về biến trong Go.

Biến là tên được đặt cho một vị trí bộ nhớ để lưu trữ giá trị của một kiểu cụ thể. Có nhiều cú pháp khác nhau để khai báo các biến trong Go.

Khai báo biến đơn

var tên kiểu là cú pháp để khai báo một biến đơn

package main

import "fmt"

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

Câu lệnh var age int khai báo một biến tên là age với kiểu int, không có bất kỳ giá trị nào được gán cho biến này. Nếu một biến không được gán giá trị, Go tự động gán giá trị mặc định 0 theo kiểu của biến. Trong trường hợp này age được gán bằng 0. Nếu bạn chạy chương trình này, bạn có thể nhìn thấy kết quả đầu ra như sau

my age is 0

Một biến có thể được gán cho bất kỳ giá trị nào phù hợp với kiểu của nó. Trong chương trình ở bên trên age có thể được gán bất kỳ giá trị nào với kiểu là số nguyên.

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)
}

Kết quả

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

Khai báo một biến với giá trị khởi tạo

Một biến có thể được gán một giá trị khởi tạo khi khai báo biến.

var tên kiểu = giá trị khởi tạo là cú pháp dùng để khai báo một biến với giá trị khởi tạo.

package main

import "fmt"

func main() {  
    var age int = 29 // khai báo một biến với giá trị khởi tạo

    fmt.Println("my age is", age)
}

age là biến với kiểu int và có giá trị khởi tạo là 29.

Nếu bạn chạy chương trình bạn sẽ nhận được kết quả như sau. Nó cho thấy rằng age được gán giá trị khởi tạo là 29

my age is 29

Suy luận kiểu

Nếu một biến có một giá trị khởi tạo, Go có thể tự động suy luận ra kiểu của biến sử dụng giá trị khởi tạo đó. Vì thế nếu một biến có một giá trị khởi tạo thì kiểu trong khai báo biến có thể được bỏ qua.

Do đó nếu khai báo biến sử dụng cú pháp var tên = giá trị khởi tạo, Go sẽ tự động suy luận ra kiểu của biến từ giá trị khởi tạo

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

package main

import "fmt"

func main() {  
    var age = 29 // kiểu sẽ được suy luận ra

    fmt.Println("my age is", age)
}

Khai báo nhiều biến

Chúng ta có thể khai báo nhiều biến trong một câu lệnh đơn.

var tên1, tên2 kiểu = giá trị khởi tạo 1, giá trị khởi tạo 2 là cú pháp để khai báo nhiều biến một lúc.

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)
}

Kiểu có thể được bỏ qua nếu các biến có giá trị mặc định. Chương trình bên 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ỏ đi

    fmt.Println("width is", width, "height is", height)
}

Kết quả

width is 100 height is 50

Có thể giờ đây bạn sẽ suy luận ra được là nếu giá trị khởi tạo không được gán cho widthheight, thì giá trị mặc định 0 sẽ được gán cho.

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)
}

Kết quả

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

Có thể có trường hợp chúng ta muốn khai báo các biến thuộc kiểu khác nhau trong một câu lệnh duy nhất. Cú pháp để làm điều này là

var (  
      tên1 = giá trị mặc định1
      tên2 = giá trị mặc định2
)

Hãy cùng xem ví dụ sau đây sử dụng cú pháp bên trên để khai báo biến với kiểu khác nhau.

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)
}

Ở đây chúng ta khai báo một biến name với kiểu string, ageheight với kiểu int

Kết quả

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

Khai báo ngắn gọn

Go cũng cung cấp cách ngắn gọn khác để khai báo biến, sử dụng toán tử :=

tên := giá trị khởi tạo – cú pháp ngắn gọn để khai báo biến

package main

import "fmt"

func main() {  
    name, age := "naveen", 29 //Khai báo ngắn gọn

    fmt.Println("my name is", name, "age is", age)
}

Kết qủa

my name is naveen age is 29

Khai báo ngắn gọn yêu cầu có giá trị mặc định cho tất cả các biến nằm ở phái bên trái của khai báo. Trong trường hợp age không được gán giá trị, chương trình sẽ đưa ra một lỗi cannot assign 1 values to 2 variables

package main

import "fmt"

func main() {  
    name, age := "naveen" // Lỗi 

    fmt.Println("my name is", name, "age is", age)
}

Cú pháp ngắn gọn chỉ có thể được sử dụng khi ít nhất một trong các biến trong phía bên trái của := được khai báo mới. Hãy cùng xem ví dụ sau

package main

import "fmt"

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

Như chúng ta đã thấy, tại hàng số 8 thì b đã được khai báo nhưng c thì mới.

Kết quả

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

Trong khi nếu chúng ta chạy ví dụ bên dưới đây

package main

import "fmt"

func main() {  
    a, b := 20, 30 //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
}

Nó sẽ đưa ra một lỗi no new variables on left side of :=. Điều này là bởi vì cả 2 biến ab đã được khai báo, và không có biến mới nào ở phía bên trái :=

Các biến cũng có thể được gán các giá trị được tính toán trong lúc chạy. Hãy xem chương trình 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)
}

Giá trị c được tính toán trong lúc chạy, do dó giá trị nhỏ nhất của ab được in ra như sau

minimum value is  145.8

Vì Go là kiểu tĩnh, các biến được khai báo thuộc về một kiểu và không thể được gán giá trị của kiểu khác. Nếu chúng ta khai báo age kiểu số nguyên và thử gán cho nó giá trị kiểu string thì chương trình sẽ đưa ra một lỗi cannot use "naveen" (type string) as type int in assignment

package main

func main() {  
    age := 29      // age là int
    age = "naveen" // lỗi vì chúng ta thử gán giá trị string cho kiểu int
}

 

You May Also Like

About the Author: Nguyen Dinh Thuc

Leave a Reply

Your email address will not be published.