gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 13:04:56 25 4
gpt4 key购买 nike

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

package main

import "fmt"

func main() {
pkgName := {some magic here:)}
fmt.Println(pkgName)
}

...结果应该是“main”

现在我正在使用类似的常量:

package main

import "fmt"
const (
pkgName = "main"
)

func main() {
fmt.Println(pkgName)
}

但我很好奇你是否可以避免这种情况

最佳答案

没有runtimereflect提供您正在寻找的功能的方法或函数。

我能找到的最接近的是:

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 - 如何在go中获取当前包的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25262754/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com