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

相关文章
相关标签/搜索