【go語言】wait,who am I

345golang

唉,這是int類型嗎?ide

看着是~spa

它有多是345.0,能夠簡寫爲345.(沒有看錯,只是把0給簡沒有了code


func main() {orm

s := 345內存

var t int32 = 345字符串

fmt.Println(s == t)編譯器

}源碼

會出現什麼呢?string

對了,會出現s == t (mismatched types int and int32),由於s := 345被golang編譯器缺省賦予了int類型。



func main() {

s := 345

var t float = 345

fmt.Println(s == t)

}

會出現什麼呢?

想都別想了,由於golang的浮點只有float32和float64,哈哈哈哈哈哈~



func main() {

s := 345.0

var t float32 = 345

fmt.Println(s == t)

}

此次呢,會出現什麼呢?

會出現s == t (mismatched types float64 and float32),golang編譯器缺省認爲345.0是float64類型的


是否是有點無聊?

只是忽然間想起來,就隨手寫一下吧,反正也沒有什麼系列化 :)



再來一個字符串,看看who am I?

你們都常常這樣定義字符串:var t string = "wait, who am I?"

可是有讀其它源碼的,好比beego中,有出現相似這樣定義的:var s string = `wait, who am I?`

唉,這好像有點區別,一個是雙引號",一個是Tab鍵上面的`號

func main() {

var s string = `wait, who am I?`

var t string = "wait, who am I?"

fmt.Println(s == t)

}

運行一下,居然能打印出true,若是雙引號是字符串定義,那麼`就會說:」who am I ?「


`wait, who am I?`: 原生字符串

"wait, who am I?":解釋型字符串

這有什麼區別?好像蠻高級的。



追加一個\"看看

func main() {

var s string = `wait, who am I\"?`

var t string = "wait, who am I\"?"

fmt.Println(s)

fmt.Println(t)

fmt.Println(s == t)

}

執行結果:

wait, who am I\"?

wait, who am I"?

false

看到差別了吧,原生字符串定義是什麼樣它就是什麼樣,不會轉義。



把\"轉成\' 試試

func main() {

var s string = `wait, who am I\'?`

var t string = "wait, who am I\'?"

fmt.Println(s)

fmt.Println(t)

fmt.Println(s == t)

}

會發現拋unknown escape sequence: ',說明人家解釋型字符串根本不與\'一塊玩。



上面兩個示例估計就能理解什麼是原生字符串什麼 是解釋型字符串了。

再看一下字符串的內存地址問題:

func main() {

var s string = "wait, who am I ?"

var t string = "wait, who am I ?"

fmt.Println("s address is :", &s)

fmt.Println("t address is :", &t)

}

跑起來呀,跑起來:

s address is : 0xc0420381d0

t address is : 0xc0420381e0

發現這兩個字符串的內存地址都不同,用C的coder說這原本就不同呀,用Java的coder笑了



原本還想寫一下什麼是slice的,閨女叫出去玩了,下次再寫 :)

相關文章
相關標籤/搜索