2 回答

TA貢獻1770條經驗 獲得超3個贊
要解決您的問題,您必須解析一次源代碼,然后共享生成的*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貢獻1851條經驗 獲得超4個贊
Go 中具有不同名稱的類型被視為不同,即使它們具有相同的結構。
如果你想比較它們,你可以將一個值轉換為另一種類型:
?????type?A?{...}?//?some?declaration ?????type?B?{...}?//?the?same?declaration? ?????if?a?==?A(b)?{...}
- 2 回答
- 0 關注
- 140 瀏覽
添加回答
舉報