有没有办法在运行时获取当前包的名称?
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))
}
问题内容: 我正在研究一个项目,一个要求是,如果main方法的第二个参数以“ ” 开头(对于Linux),则应将其视为绝对路径(不是问题),但如果它不是以“”开头”,则它应获取该类的 当前工作路径 ,并将其附加给定的参数。 我可以通过几种方式获取类名:,和,等等。 问题是,这只会给我提供存储包的目录-即,如果我有一个存储在“ ”中的类,它将只给我“ ”,而忽略了实际存在的包名称。 有什么建议? 编
问题内容: 如何在C中获取进程名称?同名,在中。我不想解析该文件。有什么编程方式可以做到这一点? 问题答案: 它指向了,或者您确实可以阅读。或者,您可以使用,不确定由谁来设置它以及它的可靠性。
问题内容: 出于跟踪目的,我想打印出当前函数名称,例如gcc中的宏。 这样当我有一个功能 它会自动打印出来或类似的东西。 问题答案: [注意:Go 1.7+建议使用代替; 包运行时是您的朋友在这里:
问题内容: 给定一个函数,可以得到它的名字吗?说: 有人告诉我runtime.FuncForPC会有所帮助,但我不明白如何使用它。 问题答案: 很抱歉回答我自己的问题,但我找到了解决方案:
多谢了。
问题内容: 我需要自己编写一些util类,并且需要android应用的程序包名称。虽然我发现仅可在Activity中使用的packageManager等具有上下文。我只想在我的班级中获取包名,该包名将在android应用程序中使用。那我该怎么做呢?谢谢! 问题答案: 用途: 或者 您还可以创建一个函数: