345
唉,这是int类型吗?
看着是~
它有可能是345.0,可以简写为345.(没有看错,只是把0给简没有了)
func main() {
s := 345
var t int32 = 345
fmt.Println(s == t)
}
会出现什么呢?
对了,会出现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的,闺女叫出去玩了,下次再写 :)
本文出自 “青客” 博客,请务必保留此出处http://qingkechina.blog.51cto.com/5552198/1895827
有疑问加站长微信联系(非本文作者)