第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何在 golang 中獲取 func 文檔?

如何在 golang 中獲取 func 文檔?

Go
一只斗牛犬 2023-06-05 17:27:06
如何在 go 代碼中獲取 func 描述?// My very nice descriptionfunc myFunc() { ... }我想要My very nice description。獲取函數(shù)的名稱非常簡單:runtime.FuncForPC(reflect.ValueOf(myFunc).Pointer()).Name()文檔有類似的東西嗎?我解析原go文件就可以了。那里有捷徑嗎?
查看完整描述

2 回答

?
慕妹3146593

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超9個(gè)贊

使用go/doc包從源代碼中提取文檔。

以防萬一有人需要代碼,我會(huì)把它貼在這里。它可能仍然有點(diǎn)難看,但適合我的場景。您可以根據(jù)自己的需要進(jìn)行調(diào)整。


package funcreader


import (

? ? "go/ast"

? ? "go/doc"

? ? "go/parser"

? ? "go/token"

? ? "path/filepath"

? ? "reflect"

? ? "runtime"

? ? "strings"

)


// Get the name and path of a func

func FuncPathAndName(f interface{}) string {

? ? return runtime.FuncForPC(reflect.ValueOf(f).Pointer()).Name()

}


// Get the name of a func (with package path)

func FuncName(f interface{}) string {

? ? splitFuncName := strings.Split(FuncPathAndName(f), ".")

? ? return splitFuncName[len(splitFuncName)-1]

}


// Get description of a func

func FuncDescription(f interface{}) string {

? ? fileName, _ := runtime.FuncForPC(reflect.ValueOf(f).Pointer()).FileLine(0)

? ? funcName := FuncName(f)

? ? fset := token.NewFileSet()


? ? // Parse src

? ? parsedAst, err := parser.ParseFile(fset, fileName, nil, parser.ParseComments)

? ? if err != nil {

? ? ? ? log.Fatal(err)

? ? ? ? return ""

? ? }


? ? pkg := &ast.Package{

? ? ? ? Name:? "Any",

? ? ? ? Files: make(map[string]*ast.File),

? ? }

? ? pkg.Files[fileName] = parsedAst


? ? importPath, _ := filepath.Abs("/")

? ? myDoc := doc.New(pkg, importPath, doc.AllDecls)

? ? for _, theFunc := range myDoc.Funcs {

? ? ? ? if theFunc.Name == funcName {

? ? ? ? ? ? return theFunc.Doc

? ? ? ? }

? ? }

? ? return ""

}


查看完整回答
反對 回復(fù) 2023-06-05
?
慕姐8265434

TA貢獻(xiàn)1813條經(jīng)驗(yàn) 獲得超2個(gè)贊

您可以使用 godoc 工具生成文檔。

查看完整回答
反對 回復(fù) 2023-06-05
  • 2 回答
  • 0 關(guān)注
  • 202 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)