type sn3 struct {
name string
age int
}
func main() {
sn1 := struct {
age int
name string
}{age: 11, name: "qq"}
sn2 := struct {
age int
name string
}{age: 11, name: "qq"}
if sn1 == sn2 {
fmt.Println("sn1 == sn2")
}
sm1 := struct {
age int
m map[string]string
}{age: 11, m: map[string]string{"a": "1"}}
sm2 := struct {
age int
m map[string]string
}{age: 11, m: map[string]string{"a": "1"}}
if sm1 == sm2 { //該處代碼報(bào)錯(cuò),編譯不過(guò)
fmt.Println("sm1 == sm2")
}
}
type MyType1 int
type MyType2 = int
func main(){
var a int = 10
var b MyType1 = a //此處代碼編譯不過(guò)
var c MyType2 = a
}
考察知識(shí)點(diǎn)
類型別名與類型定義的區(qū)別
類型別名的定義用 = 符號(hào)
第 1 行代碼是基于類型 int 創(chuàng)建了新類型 MyType1,第 2 行代碼是創(chuàng)建了 int 的類型別名 MyType2。所以,第 5行代碼相當(dāng)于是將 int 類型的變量賦值給 MyType1類型的變量,Go 是強(qiáng)類型語(yǔ)言,編譯當(dāng)然不通過(guò);而 MyType2只是 int 的別名,本質(zhì)上還是 int,可以賦值
可以通過(guò)類型轉(zhuǎn)換賦值 例如:var b MyType1 = MyType1(a)
五。go中iota的使用
const (
x = iota
_
y
z = "zz"
k
p = iota
)
func main() {
fmt.Println(x,y,z,k,p) //打印的結(jié)果值為:0, 2, zz, zz, 5
}