当前位置: 首页 > 面试题库 >

去解析器未检测到对结构类型的文档注释

孙承
2023-03-14
问题内容

我正在尝试使用Go的解析器和ast包读取有关结构类型的Doc注释。在此示例中,代码仅将自身用作源。

package main

import (
    "fmt"
    "go/ast"
    "go/parser"
    "go/token"
)

// FirstType docs
type FirstType struct {
    // FirstMember docs
    FirstMember string
}

// SecondType docs
type SecondType struct {
    // SecondMember docs
    SecondMember string
}

// Main docs
func main() {
    fset := token.NewFileSet() // positions are relative to fset

    d, err := parser.ParseDir(fset, "./", nil, parser.ParseComments)
    if err != nil {
        fmt.Println(err)
        return
    }

    for _, f := range d {
        ast.Inspect(f, func(n ast.Node) bool {
            switch x := n.(type) {
            case *ast.FuncDecl:
                fmt.Printf("%s:\tFuncDecl %s\t%s\n", fset.Position(n.Pos()), x.Name, x.Doc)
            case *ast.TypeSpec:
                fmt.Printf("%s:\tTypeSpec %s\t%s\n", fset.Position(n.Pos()), x.Name, x.Doc)
            case *ast.Field:
                fmt.Printf("%s:\tField %s\t%s\n", fset.Position(n.Pos()), x.Names, x.Doc)
            }

            return true
        })
    }
}

可以毫无问题地输出func和字段的注释文档,但是由于某种原因,找不到“ FirstType docs”和“ SecondType
docs”。我想念什么?Go版本是1.1.2。

(要运行上面的代码,请将其保存到main.go文件中,然后单击go run main.go


问题答案:

您需要使用该go/doc软件包从ast中提取文档:

package main

import (
    "fmt"
    "go/doc"
    "go/parser"
    "go/token"
)

// FirstType docs
type FirstType struct {
    // FirstMember docs
    FirstMember string
}

// SecondType docs
type SecondType struct {
    // SecondMember docs
    SecondMember string
}

// Main docs
func main() {
    fset := token.NewFileSet() // positions are relative to fset

    d, err := parser.ParseDir(fset, "./", nil, parser.ParseComments)
    if err != nil {
        fmt.Println(err)
        return
    }

    for k, f := range d {
        fmt.Println("package", k)
        p := doc.New(f, "./", 0)

        for _, t := range p.Types {
            fmt.Println("  type", t.Name)
            fmt.Println("    docs:", t.Doc)
        }
    }
}


 类似资料:
  • 我之前通过调用成功地用Tika解析了所有类型的文件,而没有设置任何自定义配置或元数据。现在我需要根据MIME-Type过滤文件进行解析。 我可以用找到mime-type,但是在调用之后,tika使用EmptyParser,检测到的内容类型是“application/octet-stream”。这是默认值,意味着tika无法找到它是什么类型的文件。我试图在解析文件之前设置元数据中的内容类型,但这导致

  • 本文向大家介绍C#枚举类型与结构类型实例解析,包括了C#枚举类型与结构类型实例解析的使用技巧和注意事项,需要的朋友参考一下 本文以C#实例讲解了枚举类型与结构类型的用法,程序主要是通过个人电话本演示枚举类型与结构类型的用法,具体代码如下所示:

  •   要支持多种文档类型,可以在CWinApp派生类对象中创建和注册附加的CMultiDocTemplate对象。在MFC应用程序中,要增加附加的文档类型,步骤可分为五步。下面我们试着将上一章的文本编辑器加到绘图程序中。这样程序不仅支持绘图,还支持文本编辑功能。 (1)使用ClassWizard创建新的文档类和视图类:   由于已经有了前面的文本编辑器程序,只需要将其中的文件拷贝过来就可以了,然后用

  • 我不确定这是我对框架的无知还是一个实际问题,请原谅我,因为我已经能够找到关于Axon 4的事件重放的很少的文档。 场景: 这摘自重播事件文档 版本信息:Spring Boot Starter:2.1.2、Axon Starter:4.0.3

  • 让我们创建一个Potion文件作为插件的测试样本。 :::text factorial = (n): total = 1 n to 1 (i): total *= i. total. 10 times (i): i string print '! is: ' print factorial (i) string print

  • 所以我对PyCharm有问题,找不到解决方法。它无法识别未解析的引用: 该图像还显示它无法自动完成 request.session。它只发生在 .session 上,它适用于所有其他属性。 此外,这张图片显示它确实检测到了其他内容的未解析引用: 我正在虚拟环境上运行它,解释器配置正确,并且启用了 Django 支持。 哦,我正在使用Python3和Django 1.10.2 编辑:刚刚在其他项目中