如何在go中获取当前包的名称?
有没有办法在运行时获取当前包的名称?
package mainimport "fmt"
func main() {
pkgName := {some magic here:)}
fmt.Println(pkgName)
}
…且结果应为“主要”
现在我正在使用常量,例如:
package mainimport "fmt"
const (
pkgName = "main"
)
func main() {
fmt.Println(pkgName)
}
但我很好奇您能否避免这种情况
回答:
没有提供所需功能的运行时或反射方法或函数。
我能找到的最接近的东西是:
package mainimport (
"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())
}
这将输出:
mainazul3d.org/lmath.v1
您还可以读取文件的第一行并删除“ package”子字符串。(不确定这是最好的主意)
package mainimport (
"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))
}
以上是 如何在go中获取当前包的名称? 的全部内容, 来源链接: utcz.com/qa/399515.html