Đâ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)
}
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)
}
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)
}
Ở 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)
}
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)
}
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)
}
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)
}
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)
}
Ở đâ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)
}
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)
}
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)
}
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
}
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)
}
Ở 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
}
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
Bình luận