และดูเหมือนฉันจะไม่เข้าใจการประกาศตัวแปรประเภทนี้:
_, prs := m["example"]
" _,
" กำลังทำอะไรกันแน่และเหตุใดพวกเขาจึงประกาศตัวแปรเช่นนี้แทนที่จะเป็น
prs := m["example"]
(ฉันพบว่าเป็นส่วนหนึ่งของGo by Example: Maps )
และดูเหมือนฉันจะไม่เข้าใจการประกาศตัวแปรประเภทนี้:
_, prs := m["example"]
" _,
" กำลังทำอะไรกันแน่และเหตุใดพวกเขาจึงประกาศตัวแปรเช่นนี้แทนที่จะเป็น
prs := m["example"]
(ฉันพบว่าเป็นส่วนหนึ่งของGo by Example: Maps )
prs
อาจหมายถึง "ปัจจุบัน" โค้ดในตัวอย่างของคุณกำลังตรวจสอบว่ามีหรือไม่มีรายการ"example"
อยู่ในm
แผนที่
คำตอบ:
หลีกเลี่ยงการประกาศตัวแปรทั้งหมดสำหรับค่าที่ส่งคืน
มันถูกเรียกว่าตัวระบุว่างเปล่า
ใน:
_, y, _ := coord(p) // coord() returns three values; only interested in y coordinate
( กรณีการใช้งาน ' ' อื่น ๆ_
สำหรับการนำเข้า )
เนื่องจากจะละทิ้งค่าที่ส่งคืนจึงมีประโยชน์เมื่อคุณต้องการตรวจสอบค่าที่ส่งคืนเพียงค่าเดียวเช่นใน " วิธีทดสอบการมีอยู่ของคีย์ในแผนที่ " ที่แสดงใน "การไปที่มีประสิทธิภาพแผนที่ ":
_, present := timeZone[tz]
หากต้องการทดสอบการมีอยู่ในแผนที่โดยไม่ต้องกังวลเกี่ยวกับค่าที่แท้จริงคุณสามารถใช้ตัวระบุว่างเครื่องหมายขีดล่าง (
_
)
ตัวระบุว่างสามารถกำหนดหรือประกาศด้วยค่าประเภทใดก็ได้โดยค่านี้จะถูกละทิ้งโดยไม่เป็นอันตราย
สำหรับการทดสอบสถานะในแผนที่ให้ใช้ตัวระบุว่างแทนตัวแปรปกติสำหรับค่า
ดังที่Jsorเพิ่มในความคิดเห็น :
"มาตรฐานที่ยอมรับโดยทั่วไป" คือการเรียกตัวแปรทดสอบการเป็นสมาชิกว่า "ok" (เหมือนกันสำหรับการตรวจสอบว่าช่องที่อ่านถูกต้องหรือไม่)
ที่ให้คุณรวมเข้ากับการทดสอบ:
if _, err := os.Stat(path); os.IsNotExist(err) {
fmt.Printf("%s does not exist\n", path)
}
คุณจะพบว่ามันวนซ้ำ:
หากคุณต้องการเฉพาะรายการที่สองในช่วง (ค่า) ให้ใช้ตัวระบุว่างขีดล่างเพื่อทิ้งรายการแรก:
sum := 0
for _, value := range array {
sum += value
}
คอมไพเลอร์ Go ไม่อนุญาตให้คุณสร้างตัวแปรที่คุณไม่เคยใช้
for i, value := range x {
total += value
}
รหัสด้านบนจะแสดงข้อความแสดงข้อผิดพลาด "ฉันประกาศและไม่ได้ใช้"
เนื่องจากเราไม่ได้ใช้ i ในลูปของเราเราจึงต้องเปลี่ยนเป็นสิ่งนี้:
for _, value := range x {
total += value
}
_
คือตัวระบุว่าง ความหมายที่ควรกำหนดจะถูกละทิ้ง
นี่คือค่าของ example
คีย์ที่ถูกทิ้ง บรรทัดที่สองของรหัสที่จะยกเลิกการปรากฏตัวprs
บูลีนและจัดเก็บค่าใน
ดังนั้นในการตรวจสอบการมีอยู่ในแผนที่เท่านั้นคุณสามารถทิ้งค่าได้ สิ่งนี้สามารถใช้เพื่อใช้แผนที่เป็นชุดได้
ตัวระบุว่างอาจถูกใช้เมื่อใดก็ตามที่ไวยากรณ์ต้องการชื่อตัวแปร แต่ตรรกะของโปรแกรมไม่ใช้เช่นเพื่อละทิ้งดัชนีลูปที่ไม่ต้องการเมื่อเราต้องการเฉพาะค่าองค์ประกอบ
ตัดตอนมาจาก:
ภาษาโปรแกรม Go (Addison-Wesley Professional Computing Series)
Brian W. Kernighan
เนื้อหานี้อาจได้รับการคุ้มครองโดยลิขสิทธิ์
เรียกว่าตัวระบุว่างและช่วยในกรณีที่คุณต้องการทิ้งค่าที่จะส่งคืนและไม่อ้างอิง
สถานที่บางแห่งที่เราใช้:
กรณีการใช้งานที่ดีสำหรับตัวแปรที่ไม่ได้ใช้คือสถานการณ์เมื่อคุณต้องการเอาต์พุตเพียงบางส่วน ในตัวอย่างด้านล่างเราจำเป็นต้องพิมพ์ค่า (ประชากรของรัฐ) เท่านั้น
package main
import (
"fmt"
)
func main() {
statePopulations := map[string]int{
"California": 39250017,
"Texas": 27862596,
"Florida": 20612439,
}
for _, v := range statePopulations {
fmt.Println(v)
}
}
โดยทั่วไป_,
เรียกว่าตัวระบุว่าง ใน GO เราไม่สามารถมีตัวแปรที่ไม่ได้ใช้
เป็นอินสแตนซ์เมื่อคุณวนซ้ำผ่านอาร์เรย์หากคุณใช้value: = rangeคุณไม่ต้องการค่าiสำหรับการวนซ้ำ แต่ถ้าคุณไม่ใส่ค่า i ก็จะส่งกลับข้อผิดพลาด แต่ถ้าคุณประกาศว่าฉันและไม่ได้ใช้มันก็จะแสดงข้อผิดพลาด
_,
ดังนั้นว่าเป็นสถานที่ที่เราจะต้องใช้
นอกจากนี้ยังใช้เมื่อคุณไม่ต้องการค่าตอบแทนของฟังก์ชันในอนาคต
ไม่อนุญาตให้ใช้ตัวแปรที่ไม่ได้ใช้ใน Golang
หากคุณมาจากภาษาโปรแกรมอื่นอาจรู้สึกยากที่จะคุ้นเคยกับสิ่งนี้ แต่ส่งผลให้โค้ดสะอาดขึ้น ดังนั้นโดยใช้ a _
เรากำลังบอกว่าเรารู้ว่ามีตัวแปรอยู่ที่นั่น แต่เราไม่ต้องการใช้และบอกคอมไพเลอร์ว่าไม่บ่นฉันเกี่ยวกับเรื่องนี้ :)