go--基本数据类型

整形

整型分为如下两个大类: 按长度分为:int八、int1六、int3二、int64 对应的无符号整型:uint八、uint1六、uint3二、uint64数组

其中,uint8就是咱们熟知的byte型,int16对应C语言中的short型,int64对应C语言中的long型。函数

八进制和十六进组织

func main(){
    // 十进制
    var a int = 10
    fmt.Printf("%d \n", a)  // 10
    fmt.Printf("%b \n", a)  // 1010  占位符%b表示二进制
 
    // 八进制  以0开头
    var b int = 077
    fmt.Printf("%o \n", b)  // 77
 
    // 十六进制  以0x开头
    var c int = 0xff
    fmt.Printf("%x \n", c)  // ff
    fmt.Printf("%X \n", c)  // FF
 
    // 变量的内存地址
    fmt.Printf("%p \n", &a)  // 0xc00004c080  占位符%p表示十六进制的内存地址

浮点型

Go语言支持两种浮点型数:float32float64性能

func main() {
        fmt.Printf("%f\n", math.Pi)
        fmt.Printf("%.2f\n", math.Pi)
}

布尔型

Go语言中以bool类型进行声明布尔型数据,布尔型数据只有true(真)和false(假)两个值。ui

注意: 1. 布尔类型变量的默认值为false。 2. Go 语言中不容许将整型强制转换为布尔型. 3. 布尔型没法参与数值运算,也没法与其余类型进行转换。编码

字符串

Go 语言里的字符串的内部实现使用UTF-8编码。 字符串的值为双引号(")中的内容。
注意:在go中,''单引号中存放的是单个的字符,而不是字符串。code

字符串经常使用函数

  • len():求字符串长度。
  • +或fmt.Sprintf:拼接字符串。
  • strings.Split:分割字符串
  • strings.contains:判断是否包含
  • strings.HasPrefix,strings.HasSuffix:前缀/后缀判断
  • strings.Index(),strings.LastIndex():子串出现的位置
  • strings.Join(a[]string, sep string):join操做

byte和rune类型

组成每一个字符串的元素叫作“字符”,能够经过遍历或者单个获取字符串元素得到字符。 字符用单引号(’)包裹起来。内存

Go 语言的字符有如下两种: 1. uint8类型,或者叫 byte 型,表明了ASCII码的一个字符。 2. rune类型,表明一个 UTF-8字符字符串

当须要处理中文、日文或者其余复合字符时,则须要用到rune类型。rune类型实际是一个int32。字符串处理

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

// 遍历字符串
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(河)

修改字符串

要修改字符串,须要先将其转换成[]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表示要转换的类型。表达式包括变量、复杂算子和函数返回值等. 好比计算直角三角形的斜边长。

func sqrtDemo() {
    var a, b = 3, 4
    var c int
    // math.Sqrt()接收的参数是float64类型,须要强制转换
    c = int(math.Sqrt(float64(a*a + b*b)))
    fmt.Println(c)
}
相关文章
相关标签/搜索