เครื่องหมายขีดล่างหน้าคำสั่งการนำเข้าหมายถึงอะไร


คำตอบ:


218

คำตอบสั้น ๆ :

มันมีไว้สำหรับการนำเข้าแพคเกจสำหรับผลข้างเคียงเท่านั้น

จากข้อกำหนด Go :

หากต้องการนำเข้าแพคเกจสำหรับผลข้างเคียงเท่านั้น (การกำหนดค่าเริ่มต้น) ให้ใช้ตัวระบุที่ว่างเปล่าเป็นชื่อแพคเกจที่ชัดเจน:

นำเข้า _ "lib / คณิตศาสตร์"

ใน sqlite3

ในกรณีของgo-sqlite3การนำเข้าขีดล่างใช้สำหรับผลข้างเคียงของการลงทะเบียนsqlite3ไดรเวอร์เป็นไดรเวอร์ฐานข้อมูลในinit()ฟังก์ชั่นโดยไม่ต้องนำเข้าฟังก์ชั่นอื่น ๆ :

sql.Register("sqlite3", &SQLiteDriver{})

เมื่อลงทะเบียนด้วยวิธีนี้ sqlite3 สามารถใช้กับsqlอินเทอร์เฟซของไลบรารีมาตรฐานในรหัสของคุณเช่นในตัวอย่าง:

db, err := sql.Open("sqlite3", "./foo.db")

34

ในขณะที่คำตอบอื่น ๆ อธิบายไว้อย่างสมบูรณ์สำหรับคน "แสดงให้ฉันเห็นรหัส" โดยทั่วไปหมายถึง: สร้างตัวแปรระดับแพ็กเกจและเรียกใช้initฟังก์ชันของแพคเกจนั้น

และ (ถ้ามี) ลำดับชั้นของตัวแปรระดับinitฟังก์ชั่นและฟังก์ชั่นของแพคเกจที่แพคเกจนี้ได้นำเข้า

ผลข้างเคียงเดียวที่แพคเกจสามารถสร้างได้โดยไม่ต้องถูกเรียกจริง ๆ คือการสร้างตัวแปรระดับแพ็คเกจ (สาธารณะหรือส่วนตัว) และภายในinitฟังก์ชัน

หมายเหตุ : มีเคล็ดลับในการเรียกใช้ฟังก์ชันก่อนหน้าที่จะinitทำงาน เราสามารถใช้ตัวแปรระดับแพ็กเกจสำหรับสิ่งนี้โดยการเริ่มต้นพวกเขาโดยใช้ฟังก์ชั่นนั้น

func theVeryFirstFunction() int {
    log.Println("theVeryFirstFunction")
    return 6
}

var (
    Num = theVeryFirstFunction()
)

func init() { log.Println("init", Num) }

17

https://golang.org/doc/effective_go.html#blank

อาจเป็นงานที่กำลังดำเนินอยู่หรือนำเข้าเพื่อผลข้างเคียง ในกรณีนี้ฉันเชื่อว่าเป็นผลข้างเคียงดังที่อธิบายไว้ในเอกสาร


นี่คือลิงก์ไปยังตัวยึดการนำเข้าสำหรับผลข้างเคียงในหน้านั้น มันอธิบายว่า "บางครั้งมันมีประโยชน์ที่จะนำเข้าแพคเกจสำหรับผลข้างเคียงเท่านั้นโดยไม่ต้องใช้อย่างชัดเจน" และ "ในการนำเข้าแพคเกจสำหรับผลข้างเคียงเท่านั้นให้เปลี่ยนชื่อแพคเกจเป็นตัวระบุว่าง"
ลุคเชปปาร์ด
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.