จะรับประเภทที่กำหนดไว้ทั้งหมดได้อย่างไร?

package demo

type People struct {
    Name string
    Age  uint
}

type UserInfo struct {
    Address  string
    Hobby    []string
    NickNage string
}

แพ็คเกจอื่น:

import "demo"

ในแพ็คเกจนี้ ฉันจะส่งออกทุกประเภทจากแพ็คเกจสาธิตได้อย่างไร


go
person emitle    schedule 27.12.2013    source แหล่งที่มา
comment
คุณกำลังพยายามที่จะบรรลุอะไร?   -  person Paul Hankin    schedule 28.12.2013
comment
หากคุณต้องการโดยทางโปรแกรม คุณอาจต้องการใช้ parser ตามที่คำตอบด้านล่างบอกไว้ หากคุณต้องการเพียงเพื่อเป็นข้อมูลของคุณเอง คุณสามารถใช้คำสั่ง go doc หรือ godoc.org   -  person MatrixFrog    schedule 28.12.2013


คำตอบ (4)


การใช้ go/importer:

pkg, err := importer.Default().Import("time")
if err != nil {
    fmt.Println("error:", err)
    return
}
for _, declName := range pkg.Scope().Names() {
    fmt.Println(declName)
}

(หมายเหตุ สิ่งนี้จะส่งคืนข้อผิดพลาดใน Go Playground)

person 王一帆    schedule 12.08.2019

Go ไม่มีรายการหลักของโครงสร้าง อินเทอร์เฟซ หรือตัวแปรในระดับแพ็กเกจ ดังนั้นสิ่งที่คุณถามจึงเป็นไปไม่ได้

person LinearZoetrope    schedule 27.12.2013

เดรท ฉันหวังว่าคำตอบของจซอร์จะผิด แต่ฉันหาวิธีแก้ไม่ได้เลย

ทั้งหมดจะไม่สูญหายไป: หากคุณมีแหล่งที่มาสำหรับ 'สาธิต' คุณสามารถใช้แพ็คเกจ parser เพื่อหาข้อมูลที่คุณต้องการได้ แม้ว่าแฮ็คเล็กน้อย

person BraveNewCurrency    schedule 27.12.2013

คุณมาจากภาษาสคริปต์บ้างไหม? มันดูเป็นเช่นนั้น

Go มีเหตุผลที่ดีที่จะเผยแพร่เพื่ออย่าปล่อยให้ 'เวทย์มนตร์' หลุดลอยไปในโค้ดของคุณ

สิ่งที่ดูง่ายในตอนเริ่มต้น (สามารถเข้าถึงโครงสร้างทั้งหมด ลงทะเบียนโดยอัตโนมัติที่ไหนสักแห่ง "การบันทึก" การเขียนโค้ด) จะจบลงด้วยการดีบักและการบำรุงรักษาฝันร้ายเมื่อโปรเจ็กต์ของคุณมีขนาดใหญ่ขึ้น

จากนั้นคุณจะต้องจัดทำเอกสารและค้นหาแบบแผนและความหมายที่น่ารังเกียจทั้งหมดของคุณ ฉันรู้ว่าฉันกำลังพูดถึงอะไร เพราะฉันไปเส้นทางนี้หลายครั้งด้วย Ruby และ nodejs

แต่ถ้าคุณทำให้ทุกอย่างชัดเจน คุณจะได้รับฟีเจอร์บางอย่าง เช่น การเปลี่ยนชื่อโครงสร้าง People เพื่อให้คอมไพเลอร์บอกคุณว่าถูกใช้ที่ไหนในฐานโค้ดทั้งหมดของคุณ (และคอมไพเลอร์ go นั้นเร็วกว่าคุณ)

ความเป็นไปได้ดังกล่าวเป็นสิ่งล้ำค่าสำหรับการดีบัก การทดสอบ และการปรับโครงสร้างใหม่

นอกจากนี้ยังทำให้โค้ดของคุณง่ายต่อการให้เหตุผลกับเพื่อนผู้เขียนโค้ดและตัวคุณเองหลายเดือนหลังจากที่คุณเขียนโค้ด

person metakeule    schedule 06.03.2014
comment
การเข้าถึงโครงสร้างทั้งหมดไม่ได้หมายความว่าคุณต้องการลงทะเบียนโดยอัตโนมัติ มีเหตุผลเช่นการสร้างรหัส - person vimdude; 09.03.2015
comment
@vimdude สำหรับการสร้างโค้ด คุณสามารถใช้ go parser เพื่อรับโครงสร้างทั้งหมดของแพ็คเกจและใช้ประโยชน์จาก go:generate flag - person metakeule; 10.03.2015