登录
首页 >  Golang >  Go问答

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

来源:Golang技术栈

时间:2023-04-06 12:48:12 351浏览 收藏

本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《如何在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))
}

文中关于golang的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《如何在go中获取当前包的名称?》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表