Toán tử khai báo biến ngắn trong Go

Toán tử khai báo biến ngắn (:=) trong Golang được sử dụng để tạo các biến có tên riêng và giá trị ban đầu. Mục đích chính của việc sử dụng toán tử này là để khai báo và khởi tạo các biến cục bộ bên trong các hàm và để thu hẹp phạm vi của các biến. Kiểu của biến được xác định bởi kiểu của biểu thức. Từ khóa var cũng được sử dụng để tạo các biến có kiểu cụ thể. Vì vậy, bạn có thể nói rằng có hai cách để tạo các biến trong Golang như sau:

Khai báo toán tử ngắn trong Golang

  • Sử dụng từ khóa var
  • Sử dụng toán tử khai báo biến ngắn (:=)

Giờ hãy cùng nhau tìm hiểu cách dùng toán tử khai báo biến ngắn trong Golang nhé!

Cú pháp dùng toán tử khai báo biến ngắn trong Golang

variable_name := biểu thức hoặc giá trị

Ở đây, bạn phải khởi tạo biến ngay sau khi khai báo. Nhưng sử dụng từ khóa var, bạn có thể tránh khởi tạo tại thời điểm khai báo. Không cần phải đề cập đến kiểu của biến. Biểu thức hoặc giá trị ở phía bên phải được sử dụng để đánh giá kiểu của biến.

Ví dụ: Ở đây, chúng ta đang khai báo các biến bằng toán tử khai báo ngắn và không chỉ định kiểu của biến. Kiểu của biến được xác định bởi kiểu của biểu thức ở phía bên phải của toán tử :=.

// Minh họa chương trình Go dùng := (toán tử khai báo ngắn) 
package main

import "fmt"

func main() {

	// khai báo và khởi tạo biến
	a := 30

	// lấy một biến chuỗi
	Language: = "Go Programming"

	fmt.Println("The Value of a is: ", a)
	fmt.Println("The Value of Language is: ", Language)

}

Kết quả:

The Value of a is:  30
The Value of Language is:  Go Programming

Khai báo nhiều biến bằng toán tử khai báo ngắn

Toán tử khai báo ngắn cũng có thể được sử dụng để khai báo nhiều biến cùng kiểu hoặc khác kiểu trong một khai báo duy nhất. Kiểu của các biến này được đánh giá bằng biểu thức ở phía bên phải của toán tử :=.

Ví dụ:

// Minh họa chương trình Go dùng toán tử khai báo ngắn := short để khai báo nhiều
// biến thành một câu lệnh khai báo duy nhất
package main

import "fmt"

func main() { 

// nhiều biến của cùng kiểu(int)
geek1, geek2, geek3 := 117, 7834, 5685

// nhiều biến của các kiểu khác nhau
geek4, geek5, geek6 := "GFG", 859.24, 1234

// Hiện giá trị và kiểu của biến
fmt.Printf("The value of geek1 is : %d\n", geek1) 
fmt.Printf("The type of geek1 is : %T\n", geek1) 

fmt.Printf("\nThe value of geek2 is : %d\n", geek2) 
fmt.Printf("The type of geek2 is : %T\n", geek2) 

fmt.Printf("\nThe value of geek3 is : %d\n", geek3) 
fmt.Printf("The type of geek3 is : %T\n", geek3)

fmt.Printf("\nThe value of geek4 is : %s\n", geek4) 
fmt.Printf("The type of geek4 is : %T\n", geek4)


fmt.Printf("\nThe value of geek5 is : %f\n", geek5) 
fmt.Printf("The type of geek5 is : %T\n", geek5)

fmt.Printf("\nThe value of geek6 is : %d\n", geek6) 
fmt.Printf("The type of geek6 is : %T\n", geek6)

} 

Kết quả:

The value of geek1 is : 117
The type of geek1 is : int

The value of geek2 is : 7834
The type of geek2 is : int

The value of geek3 is : 5685
The type of geek3 is : int

The value of geek4 is : GFG
The type of geek4 is : string

The value of geek5 is : 859.240000
The type of geek5 is : float64

The value of geek6 is : 1234
The type of geek6 is : int

Điểm quan trọng cần ghi nhớ:

Toán tử khai báo ngắn có thể được sử dụng khi ít nhất một biến ở phía bên trái của toán tử := được khai báo mới. Toán tử khai báo biến ngắn hoạt động giống như phép gán cho các biến đã được khai báo trong cùng một khối từ vựng. Để hiểu rõ hơn về khái niệm này, chúng ta hãy lấy một ví dụ.

Ví dụ 1: Chương trình dưới đây sẽ đưa ra lỗi vì không có biến mới nào ở phía bên trái của toán tử :=.

// Minh họa chương trình Go dùng khai báo biến ngắn
package main

import "fmt"

func main() { 

	// lấy hai biến
	p, q := 100, 200

	fmt.Println("Value of p ", p, "Value of q ", q)

	// Báo lỗi vì không có biến mới ở bên tay trái của :=
	p, q := 500, 600
	
	fmt.Println("Value of p ", p, "Value of q ", q)
}

Lỗi:

./prog.go:17:10: no new variables on left side of := 

Ví dụ 2:

Ở chương trình bên dưới, bạn có thể thấy dòng mã geek3, geek2 := 456, 200 sẽ hoạt động tốt mà không có lỗi nào vì có ít nhất một biến mới, tức là geek3 ở phía bên trái của toán tử :=.

// Chương trình Go dùng toán tử khai báo biến ngắn
package main 

import "fmt"

func main() { 

// Ở đây, khai báo biến ngắn hoạt động
// như một phép gán cho biến geek1
// vì cùng một biến có trong cùng một khối
// do đó giá trị của geek2 được thay đổi từ 100 thành 200
geek1, geek2 := 78, 100

// ở đây, := được sử dụng như một phép gán cho geek2
// vì nó đã được khai báo. Ngoài ra, dòng này
// sẽ hoạt động tốt vì geek3 mới được tạo
// biến
geek3, geek2 := 456, 200

// Nếu bạn thử chạy các dòng được chú thích,
// thì trình biên dịch sẽ báo lỗi vì
// các biến này đã được định nghĩa
// geek1, geek2 := 745, 956
// geek3 := 150

// Hiện giá trị của các biến
fmt.Printf("The value of geek1 and geek2 is : %d %d\n", geek1, geek2) 
											
fmt.Printf("The value of geek3 and geek2 is : %d %d\n", geek3, geek2) 
} 

Kết quả:

The value of geek1 and geek2 is : 78 200
The value of geek3 and geek2 is : 456 200

Go là ngôn ngữ có kiểu dữ liệu mạnh vì bạn không thể gán giá trị của kiểu dữ liệu khác cho biến đã khai báo.

Ví dụ:

// Minh họa chương trình Go dùng toán tử khai báo biến ngắn
package main 

import "fmt"

func main() { 

	// lấy một biến của int
	z := 50
	
	fmt.Printf("Value of z is %d", z)
	
	// gán lại giá trị của kiểu chuỗi
// nó sẽ đưa ra lỗi
	z := "Golang"
} 

Lỗi:

./prog.go:16:4: no new variables on left side of := 
./prog.go:16:7: cannot use “Golang” (type string) as type int in assignment 
 

Trong một khai báo biến ngắn, Golang cho phép khởi tạo một tập hợp các biến bằng hàm gọi trả về nhiều giá trị. Hoặc bạn có thể nói các biến cũng có thể được gán các giá trị được đánh giá trong thời gian chạy.

Ví dụ:

// Tại đây, hàm math.Max function trả về
// số lớn nhất trong biến i 
i := math.Max(x, y)

Biến cục bộ hay biến toàn cục

Với sự trợ giúp của toán tử khai báo biến ngắn (:=), bạn chỉ có thể khai báo biến cục bộ có phạm vi chỉ ở cấp độ khối. Nhìn chung, các biến cục bộ được khai báo bên trong khối hàm. Nếu bạn cố gắng khai báo các biến toàn cục bằng toán tử khai báo ngắn thì bạn sẽ gặp lỗi.

Ví dụ 1:

// Chương trình Go hiển thị cách sử dụng toán tử :=
// để khai báo các biến cục bộ
package main

import "fmt"

// sử dụng từ khóa var để khai báo
// và khởi tạo biến
// đó là package hoặc bạn có thể nói
// phạm vi cấp toàn cục
var geek1 = 900

// sử dụng khai báo biến ngắn
// sẽ báo lỗi
geek2 := 200

func main() {

// truy cập geek1 bên trong hàm
fmt.Println(geek1)

// truy cập geek2 bên trong hàm
fmt.Println(geek2)

}

Lỗi:

./prog.go:15:1: syntax error: non-declaration statement outside function body 

Ví dụ 2:

// Chương trình Go dùng toán tử := operator
// để khai báo các biến cục bộ
package main 

import "fmt"

// dùng từ khóa var để khai báo
// và khởi tạo biến
// nó đóng gói hoặc bạn có thể báo
// phạm vi cấp toàn cục
var geek1 = 900


func main() { 

// dùng khai báo biến ngắn
// bên trong hàm chính
// nó có phạm vi cục bộ tức là không thể
// truy cập bên ngoài hàm chính
geek2 := 200

// truy cập geek1 bên trong hàm này
fmt.Println(geek1) 

// truy cập geek2 bên trong hàm này
fmt.Println(geek2) 
	
} 

Kết quả:

900
200
Thứ Hai, 03/03/2025 09:37
2,877 👨 503
Xác thực tài khoản!

Theo Nghị định 147/2024/ND-CP, bạn cần xác thực tài khoản trước khi sử dụng tính năng này. Chúng tôi sẽ gửi mã xác thực qua SMS hoặc Zalo tới số điện thoại mà bạn nhập dưới đây:

Số điện thoại chưa đúng định dạng!
Số điện thoại này đã được xác thực!
Bạn có thể dùng Sđt này đăng nhập tại đây!
Lỗi gửi SMS, liên hệ Admin
0 Bình luận
Sắp xếp theo
❖
    Chia sẻ
    Chia sẻ FacebookChia sẻ Twitter
    Đóng