2 回答
TA貢獻(xiàn)1770條經(jīng)驗(yàn) 獲得超3個(gè)贊
要解決您的問題,您必須解析一次源代碼,然后共享生成的*types.Package.
package main
import (
? ? "go/ast"
? ? "go/importer"
? ? "go/parser"
? ? "go/token"
? ? "go/types"
? ? "log"
)
const Src = `
package types
import (
? ? "io"
? ? "net/http"
)
var (
? ? IOReader? ? io.Reader
? ? Response? ? *http.Response
)
`
const (
? ? TypeIOReader = "IOReader"
? ? TypeResponse = "Response"
)
func GetType(name string, pkg *types.Package) types.Type {
? ? return pkg.Scope().Lookup(name).Type()
}
func main() {
? ? fset := token.NewFileSet()
? ? file, err := parser.ParseFile(fset, "types.go", Src, 0)
? ? if err != nil {
? ? ? ? panic(err)
? ? }
? ? conf := types.Config{Importer: importer.Default()}
? ? pkg, err := conf.Check("impler/types", fset, []*ast.File{file}, nil)
? ? if err != nil {
? ? ? ? panic(err)
? ? }
? ? log.Println(types.Identical(GetType(TypeResponse, pkg), GetType(TypeResponse, pkg)))
? ? log.Println(types.Identical(GetType(TypeIOReader, pkg), GetType(TypeIOReader, pkg)))
}
TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超4個(gè)贊
Go 中具有不同名稱的類型被視為不同,即使它們具有相同的結(jié)構(gòu)。
如果你想比較它們,你可以將一個(gè)值轉(zhuǎn)換為另一種類型:
?????type?A?{...}?//?some?declaration
?????type?B?{...}?//?the?same?declaration?
?????if?a?==?A(b)?{...}- 2 回答
- 0 關(guān)注
- 165 瀏覽
添加回答
舉報(bào)
