第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

go/types.Identical 不能比較其他包中的兩個(gè)相同類型?

go/types.Identical 不能比較其他包中的兩個(gè)相同類型?

Go
陪伴而非守候 2023-04-24 15:58:13
我寫了一些代碼來通過“go/types”獲得特殊類型import (    "go/ast"    "go/importer"    "go/parser"    "go/token"    "go/types"    "log")    const (    Src = `package typesimport (    "io"    "net/http")var (    IOReader    io.Reader    Err         error    StatusCode  int    Request     *http.Request    Response    *http.Response)`)const (    TypeIOReader   = "IOReader"    TypeErr        = "Err"    TypeStatusCode = "StatusCode"    TypeRequest    = "Request"    TypeResponse   = "Response")func GetType(name string) types.Type {    fset := token.NewFileSet()    file, err := parser.ParseFile(fset, "types.go", Src, 0)    if err != nil {        log.Fatal(err)    }    conf := types.Config{Importer: importer.Default()}    pkg, err := conf.Check("impler/types", fset, []*ast.File{file}, nil)    return pkg.Scope().Lookup(name).Type()}功能GetType(name string) types.Type可以做到。當(dāng)我比較兩種類型時(shí),我得到了一些奇怪的結(jié)果log.Println(types.Identical(GetType(TypeResponse), GetType(TypeResponse)))log.Println(types.Identical(GetType(TypeIOReader), GetType(TypeIOReader)))log.Println(types.Identical(GetType(TypeStatusCode), GetType(TypeStatusCode)))log.Println(types.Identical(GetType(TypeErr), GetType(TypeErr)))結(jié)果是falsefalsetruetrue似乎types.Identical無法比較其他包中的兩個(gè)相同類型?我如何比較它們?夠types.TypeString(typ1, nil) == types.TypeString(typ2, nil)堅(jiān)固嗎?
查看完整描述

2 回答

?
德瑪西亞99

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)))

}


查看完整回答
反對(duì) 回復(fù) 2023-04-24
?
繁花不似錦

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)?{...}


查看完整回答
反對(duì) 回復(fù) 2023-04-24
  • 2 回答
  • 0 關(guān)注
  • 165 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)