[Go] Định danh trống (Blank identifier) trong Golang

133

[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.

blank-identifier-trong-golang

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/

Previous articleEbook 12 gợi ý tăng cường bảo mật cho server Linux
Next article[Go] Đọc file và ghi file trong Golang
Bạn đang theo dõi website "https://cuongquach.com/" nơi lưu trữ những kiến thức tổng hợp và chia sẻ cá nhân về Quản Trị Hệ Thống Dịch Vụ & Mạng, được xây dựng lại dưới nền tảng kinh nghiệm của bản thân mình, Quách Chí Cường. Hy vọng bạn sẽ thích nơi này !

LEAVE A REPLY

Please enter your comment!
Please enter your name here