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

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

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))

}

以上是 如何在go中获取当前包的名称? 的全部内容, 来源链接: utcz.com/qa/399515.html

回到顶部