[Go] Định danh trống (Blank identifier) trong Golang – Cuongquach.com | Chúng ta cùng tìm hiểu qua một điểm thú vị trong lập trình Golang : Blank Identifier. Một kĩ thuật dùng để bỏ qua các thông báo lỗi về việc không sử dụng các package hoặc variable đã được khai báo.
1. Bỏ qua giá trị mong muốn
Blank identifier có thể dùng để bỏ qua các giá trị mà bạn không có nhu cầu sử dụng. Vì Golang sẽ bắt lỗi bạn, nếu bạn khai báo biến nhưng không sử dụng biến đó, thì Blank Identifier nhằm phục vụ những nhu cầu như vậy.
Kí hiệu: _
Ví dụ 1:
package main import "fmt" // Main function func main() { // calling the function // function returns two values which are // assigned to mul and div identifier mul, div := mul_div(105, 7) // only using the mul variable // compiler will give an error fmt.Println("105 x 7 = ", mul) } // function returning two // values of integer type func mul_div(n1 int, n2 int) (int, int) { // returning the values return n1 * n2, n1 / n2 }
Khi bạn chạy sẽ gặp lỗi, không sử dụng giá trị trả về `div`.
# go run main.go ./main.go:11:10: div declared but not used
Giờ bạn thay thế đoạn code ở vị trí sau với Blank Identifier .
mul, _ := mul_div(105, 7)
Bạn chạy lại code, sẽ không bị báo lỗi nữa.
# go run main.go 105 x 7 = 735
Ví dụ 2:
package main import "fmt" // Main function func main() { list_number := []string{"a","b","c"} for index, element := range list_number { fmt.Println(element) } }
Bạn sẽ gặp lỗi tương tự như trên ví dụ 1.
# go run main.go ./main.go:10:9: index declared but not used
Giờ bạn thay thế đoạn code với Blank Identifier :
for _, element := range list_number {
Bạn chạy lại sẽ được output thành công.
# go run main.go a b c
2. Import package
Cũng giống như việc khai báo biến mà không sử dụng thì sẽ bị Golang cho là không hợp lệ, thì nếu bạn import một package mà không sử dụng thì sẽ bị báo lỗi khi chạy trình biên dịch. Việc này để tránh tăng thời gian biên dịch cho những package không sử dụng.
Giờ thử một đoạn code đơn giản nhé.
package main import ( "fmt" ) func main() { }
Chạy là gặp lỗi liền.
# go run main.go ./main.go:4:2: imported and not used: "fmt"
Bạn có thể thêm đoạn code sau :
package main import ( "fmt" ) var _ = fmt.Printf //error silencer (bỏ qua lỗi) func main() { }
Câu lệnh var _ = fmt.Printf
giúp chúng ta bỏ qua lỗi biên dịch package “fmt” nhưng không xài.
Ta cũng có thể import một package chỉ để đảm bảo việc khởi tạo được diễn ra mặc dù chúng ta không cần sử dụng bất kỳ hàm nào hoặc biến nào từ package đó. Ví dụ, chúng ta cần đảm bảo rằng hàm init của package fmt được gọi mặc dù ta không cần sử dụng đến package này. Blank identifier _ có thể được dùng đến trong trường hợp này.
package main import ( _ "fmt" ) func main() { }
Nguồn: https://cuongquach.com/