手记

【go语言】wait,who am I

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




0人推荐
随时随地看视频
慕课网APP