数据类型

在Go中除了有最基础的整型、浮点型、布尔型、字符串以外,还拥有数组、切片、结构体、函数、map、通道(channel)等。其中基本类型和别的语言都是大同小异的

 

整型:

  整型主要分成了两大类:按长度分为了:int8、int6、int32、int64对应的就是无符号整型:uint8、uint16、uint32、uint64

  其中uint8就是我们熟悉的bytes类型,int16对应了C语言中的short类型,int64对应了C语言中的long类型

 

 

 特殊整型:

  

 

 

   ps:在使用int和uint的时候,不能假定它是32或者64位的整型,而是考虑int和uint可能在不同的平台上面的使用的差异

    获取对象的长度用内建函数len()  函数返回的长度可以根据不同平台的字节长度进行变化。在实际的使用中切片或者map的元素数量等都可以用int来表示。在涉及到二进制传输、读写文件的结果描述的时候,为了保持文件的结构不会受到不同编译目标平台字节长度的影响,不要使用int和uint。

 

字符串:

  Go语言中的字符串以原生数据类型出现,使用字符串就像是使用其它原生数据一样,Go语言里的字符串的内部实现使用utf8编码。字符串的值为双引号中的内容,可以在Go语言的源码中直接添加非ascii码的字符

  

  字符串转义符:

    \n:换行符(直接跳到下一行的同列位置)

    \r:回车符(返回首行)

    \t:制表符

    \':单引号

    \":双引号

    \\:反斜杠

  多行字符串:

    Go语言中要定义一个多行字符串时,就必须使用反引号字符`内容`

  字符串中常见的操作

 

 

 

 

byte和rune类型

  组成每个字符串的元素叫做字符,可以通过遍历或者单个获取字符串元素获得字符。字符用单引号包裹起来

  Go的字符有以下两种:

    1、uint8类型,或者叫byte类型,代表了ascii码的一个字符

    2、rune类型,代表一个utf-8字符

  当你需要处理中文、日文或者其它的复合字符的时候,就会需要用到rune类型。rune类型实际上就是一个int32。

  Go使用了特殊的rune类型来处理unicode,让基于unicode的文本处理更为方便,也可以使用byte类型进行默认字符串处理,性能和扩展性都有照顾

func traversalString() {
    s := "hello沙河"
    for i := 0; i < len(s); i++ { //byte
        fmt.Printf("%v(%c) ", s[i], s[i])
    }
    fmt.Println()
    for _, r := range s { //rune
        fmt.Printf("%v(%c) ", r, r)
    }
    fmt.Println()
}

  输出:

104(h) 101(e) 108(l) 108(l) 111(o) 230(æ) 178(²) 153() 230(æ) 178(²) 179(³) 
104(h) 101(e) 108(l) 108(l) 111(o) 27801(沙) 27827(河) 

 

  因为utf8编码下一个中问汉字是由3-4个字节组成的,所以我们不能简单的按照字节去遍历一个包含中文的字符串,否则就会出现上面输出第一行中的结果

  字符串底层是一个byte数组,所以可以和[]byte类型互相转换。字符串是不能修改的 字符串是由byte字节组成,所以字符串的长度是byte字节的长度。rune类型用来表示utf8字符,一个rune字符由一个或者多个byte组成。

 

修改字符串:

  要是想修改字符串,首先需要将其转换成[]rune或者[]byte,完成后再转换为string。无论转换成哪种,都会重新分配内存,并复制字节数组。

func changeString() {
    s1 := "big"
    // 强制类型转换
    byteS1 := []byte(s1)
    byteS1[0] = 'p'
    fmt.Println(string(byteS1))

    s2 := "白萝卜"
    runeS2 := []rune(s2)
    runeS2[0] = ''
    fmt.Println(string(runeS2))
}

 

 

类型转换:

  Go语言中只有强制类型转换,没有隐式类型转换。该语法只能在两个类型之间支持相互转换的时候使用。

  T(表达式)

  其中T表示要转换的类型,表达式包括变量、复杂算子、函数返回值等等

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2019-11-05 19:59  tulintao  阅读(185)  评论(0编辑  收藏  举报