有没有办法在运行时获取当前包的名称?
package main import "fmt" func main() { pkgName := {some magic here:)} fmt.Println(pkgName) }
…且结果应为“主要”
现在我正在使用常量,例如:
package main import "fmt" const ( pkgName = "main" ) func main() { fmt.Println(pkgName) }
但我很好奇您能否避免这种情况
没有提供所需功能的运行时或反射方法或函数。
我能找到的最接近的东西是:
package main import ( "azul3d.org/lmath.v1" "fmt" "reflect" ) type Empty struct{} func main() { fmt.Println(reflect.TypeOf(Empty{}).PkgPath()) fmt.Println(reflect.TypeOf(lmath.Vec3{0, 0, 0}).PkgPath()) }
这将输出:
main azul3d.org/lmath.v1
您还可以读取文件的第一行并删除“ package”子字符串。(不确定这是最好的主意)
package main import ( "bufio" "bytes" "fmt" "os" ) func main() { file, err := os.Open("so.go") if err != nil { panic(err) } r := bufio.NewReader(file) line, _, err := r.ReadLine() if err != nil { panic(err) } packageName := bytes.TrimPrefix(line, []byte("package ")) fmt.Println(string(packageName)) }