package demo
type People struct {
Name string
Age uint
}
type UserInfo struct {
Address string
Hobby []string
NickNage string
}
แพ็คเกจอื่น:
import "demo"
ในแพ็คเกจนี้ ฉันจะส่งออกทุกประเภทจากแพ็คเกจสาธิตได้อย่างไร
package demo
type People struct {
Name string
Age uint
}
type UserInfo struct {
Address string
Hobby []string
NickNage string
}
แพ็คเกจอื่น:
import "demo"
ในแพ็คเกจนี้ ฉันจะส่งออกทุกประเภทจากแพ็คเกจสาธิตได้อย่างไร
การใช้ 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)
Go ไม่มีรายการหลักของโครงสร้าง อินเทอร์เฟซ หรือตัวแปรในระดับแพ็กเกจ ดังนั้นสิ่งที่คุณถามจึงเป็นไปไม่ได้
เดรท ฉันหวังว่าคำตอบของจซอร์จะผิด แต่ฉันหาวิธีแก้ไม่ได้เลย
ทั้งหมดจะไม่สูญหายไป: หากคุณมีแหล่งที่มาสำหรับ 'สาธิต' คุณสามารถใช้แพ็คเกจ parser
เพื่อหาข้อมูลที่คุณต้องการได้ แม้ว่าแฮ็คเล็กน้อย
คุณมาจากภาษาสคริปต์บ้างไหม? มันดูเป็นเช่นนั้น
Go มีเหตุผลที่ดีที่จะเผยแพร่เพื่ออย่าปล่อยให้ 'เวทย์มนตร์' หลุดลอยไปในโค้ดของคุณ
สิ่งที่ดูง่ายในตอนเริ่มต้น (สามารถเข้าถึงโครงสร้างทั้งหมด ลงทะเบียนโดยอัตโนมัติที่ไหนสักแห่ง "การบันทึก" การเขียนโค้ด) จะจบลงด้วยการดีบักและการบำรุงรักษาฝันร้ายเมื่อโปรเจ็กต์ของคุณมีขนาดใหญ่ขึ้น
จากนั้นคุณจะต้องจัดทำเอกสารและค้นหาแบบแผนและความหมายที่น่ารังเกียจทั้งหมดของคุณ ฉันรู้ว่าฉันกำลังพูดถึงอะไร เพราะฉันไปเส้นทางนี้หลายครั้งด้วย Ruby และ nodejs
แต่ถ้าคุณทำให้ทุกอย่างชัดเจน คุณจะได้รับฟีเจอร์บางอย่าง เช่น การเปลี่ยนชื่อโครงสร้าง People
เพื่อให้คอมไพเลอร์บอกคุณว่าถูกใช้ที่ไหนในฐานโค้ดทั้งหมดของคุณ (และคอมไพเลอร์ go นั้นเร็วกว่าคุณ)
ความเป็นไปได้ดังกล่าวเป็นสิ่งล้ำค่าสำหรับการดีบัก การทดสอบ และการปรับโครงสร้างใหม่
นอกจากนี้ยังทำให้โค้ดของคุณง่ายต่อการให้เหตุผลกับเพื่อนผู้เขียนโค้ดและตัวคุณเองหลายเดือนหลังจากที่คุณเขียนโค้ด
parser
ตามที่คำตอบด้านล่างบอกไว้ หากคุณต้องการเพียงเพื่อเป็นข้อมูลของคุณเอง คุณสามารถใช้คำสั่งgo doc
หรือ godoc.org - person MatrixFrog   schedule 28.12.2013