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的,閨女叫出去玩了,下次再寫 :)