gpt4 book ai didi

go - 如何在 Golang 中将 ast.TypeSpec 断言为 int 类型?

转载 作者:行者123 更新时间:2023-12-02 17:45:14 32 4
gpt4 key购买 nike

我有以下用于 Golang 文档解析的代码。 “ts”是ast.TypeSpec。我可以检查 StructType 等。但是,ts.Type 是“int”。如何断言 int 和其他基本类型?

ts, ok := d.Decl.(*ast.TypeSpec)
switch ts.Type.(type) {
case *ast.StructType:
fmt.Println("StructType")
case *ast.ArrayType:
fmt.Println("ArrayType")
case *ast.InterfaceType:
fmt.Println("InterfaceType")
case *ast.MapType:
fmt.Println("MapType")
}

最佳答案

AST 中的类型表示用于声明类型的语法,而不是实际类型。例如:

type t struct { }

var a int // TypeSpec.Type is *ast.Ident
var b struct { } // TypeSpec.Type is *ast.StructType
var c t // TypeSpec.Type is *ast.Ident, but c variable is a struct type

我发现在尝试理解不同语法的表示方式时打印示例 AST 很有帮助。 Run this program to see an example .

此代码在大多数情况下会检查整数,但并不可靠:

if id, ok := ts.Type.(*ast.Ident); ok {
if id.Name == "int" {
// it might be an int
}
}

以下情况的代码不正确:

type myint int
var a myint // the underlying type of a is int, but it's not declared as int

type int anotherType
var b int // b is anotherType, not the predeclared int type

要可靠地查找源中的实际类型,请使用 go/types包裹。 A tutorial on the package is available .

关于go - 如何在 Golang 中将 ast.TypeSpec 断言为 int 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40266003/

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