Как получить func документацию на Голанге? - PullRequest
0 голосов
/ 06 февраля 2019

Как я могу получить описание функции в коде go?

// My very nice description
func myFunc() { ... }

Я хотел бы получить My very nice description.

Получить имя функции довольно просто:

runtime.FuncForPC(reflect.ValueOf(myFunc).Pointer()).Name()

Есть ли что-то похожее в документации?Было бы хорошо, если бы я проанализировал исходный файл go.Есть какие-нибудь ярлыки?

Ответы [ 3 ]

0 голосов
/ 06 февраля 2019

Используйте пакет go / doc для извлечения документации из исходного кода.

0 голосов
/ 08 февраля 2019

На всякий случай, если кому-то понадобится код, я выложу его здесь.Это может быть немного уродливо, но отлично работает для моих сценариев.Вы можете настроить его под свои нужды.

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 ""
}
0 голосов
/ 06 февраля 2019

Вы можете использовать инструмент godoc для создания документации.

Проверьте следующую ссылку https://blog.golang.org/godoc-documenting-go-code

Она должна дать то, что вы ищете

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...