当前位置: 首页 > 面试题库 >

如何在go中获取当前包的名称?

吕新
2023-03-14
问题内容

有没有办法在运行时获取当前包的名称?

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应用程序中使用。那我该怎么做呢?谢谢! 问题答案: 用途: 或者 您还可以创建一个函数: