從轉換規范中,我讀到
在以下任何一種情況下,非常量值 x 都可以轉換為型別 T:
- [..]
- 忽略結構標簽(見下文),x 的型別和 T 不是型別引數,但具有相同的基礎型別。
- [..]
從上面的規范中,我希望下面的代碼可以編譯
package main
import "github.com/fxtlabs/date"
type Date struct {
day int32
}
func main() {
_ = date.Date(Date{12345})
}
但是,它不會與錯誤訊息一起編譯
cannot convert Date{…} (value of type Date) to type date.Date
注意這里"github.com/fxtlabs/date".Date定義為
type Date struct {
// day gives the number of days elapsed since date zero.
day int32
}
為什么編譯失敗?是因為該欄位day未"github.com/fxtlabs/date".Date匯出嗎?如果是,不應該在規格中指定嗎?
uj5u.com熱心網友回復:
是因為“github.com/fxtlabs/date”.Date 中的欄位日未匯出嗎?
是的。
如果是,不應該在規格中指定嗎?
它在Type Identity下的規范中。
如果兩個結構型別具有相同的欄位序列,并且相應的欄位具有相同的名稱、相同的型別和相同的標簽,則它們是相同的。來自不同包的非匯出欄位名稱總是不同的。
換句話說,底層型別并不相同,因為它們的欄位是unexported。
相同型別struct {Day int32}(包 a)和struct{Day int32}(包 b)的示例。struct {day int32}不同型別(包 a)和struct{day int32}(包 b)的示例。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/518080.html
標籤:去类型转换
