今天来学习Go语言中的基本数据类型,还是相当丰富,除了基本的整型浮点型布尔型字符串数组,还有切片结构体函数map通道(channel)等。其实Go语言的基本类型和其他语言大同小异,下面我们来认识一下吧~

基本数据类型

整型

整型分类两大类:

  • 有符号 - int8int16int32int64
  • 无符号 - uint8uint16uint32uint64

详细说明

特殊整型

特殊整型

说明:它们的类型会根据操作系统的不同而不同,因此如果要使用它们需要考虑在不同平台之间的差异性,建议慎用。

八进制、十六进制

GO语言中不可以直接定义二进制数,关于八进制、十六进制小示例如下:

package main

import "fmt"

func main() {
    // 十进制
    var i1 = 101
    fmt.Printf("%d\n", i1) // 十进制 101
    fmt.Printf("%b\n", i1) // 十进制转二进制 1100101
    fmt.Printf("%o\n", i1) // 十进制转八进制 145
    fmt.Printf("%x\n", i1) // 十进制转十六进制 65

    // 八进制,以0开头
    i2 := 066
    fmt.Printf("%d\n", i2) // 十进制 54

    // 十六进制,以0x开头
    i3 := 0x111
    fmt.Printf("%d\n", i3) // 十进制 273
}

浮点型

GO语言中的浮点型分为两类:float32float64

  • float32 - 最大值为3.4e38,可以使用常量math.MaxFloat32来定义。
  • float64 - 最大值为1.8e308,可以使用常量math.MaxFloat64来定义。

打印浮点型可以使用%f,小示例如下:

package main

import (
    "fmt"
    "math"
)

func main() {
    var a1 = 123.11726366
    fmt.Printf("%T\n", a1) // float64
    fmt.Printf("%f\n", a1) // 123.117264 会有一定的精度损失

    a2 := float32(13.222)  // 指定具体类型,不指定时默认为float64
    fmt.Printf("%T\n", a2) // float32
    fmt.Printf("%f\n", a2) // 13.222000

    // 最大范围
    fmt.Printf("%f\n", math.MaxFloat32)
    fmt.Printf("%f\n", math.MaxFloat64)
}

布尔型

GO语言以bool场景布尔型数据,布尔型只有truefalse两个值。

注意:

  • 布尔型的默认值为false
  • 不允许将整型强制转为布尔型(和PHP不一样)
  • 布尔型也不能参与数值运算

字符串

GO语言中的字符串与其它语言基本一致,内部实现使用utf-8编码,字符串的值为双引号的内容,如下:

a1 := "hello"
a2 := "你好"

// 多行字符串,使用“反引号”,指原样输出
a3 := `第一行
第二行
`

注意:

  • 字符串必须使用双引号包裹,单引号包裹的是字符!!!

字符串转义符

GO语言的字符串常见转义符包含回车换行单双引号制表符等,具体如下:

字符串转义符

字符串常用操作

字符串常用操作

类型转换

GO语言中只有强制类型转换,不存在隐式转换这么一说,语法格式如下:

T(表达式)
int(3.14)

拓展小知识

fmt常用点位符

我们打印数据时经常会用到fmt.Printf(…)函数及相应的点位符,那么它常用的都有哪些呢?

package main

import "fmt"

func main() {
    a1 := 100
    fmt.Printf("%T\n", a1) // 数据类型 int
    fmt.Printf("%v\n", a1) // 数据值 100
    fmt.Printf("%b\n", a1) // 二进制
    fmt.Printf("%d\n", a1) // 十进制
    fmt.Printf("%o\n", a1) // 八进制
    fmt.Printf("%x\n", a1) // 十六进制

    a2 := "hello"
    fmt.Printf("%s\n", a2)  // 字符串值 hello
    fmt.Printf("%#v\n", a2) // 带类型的数据值 "hello"
    fmt.Printf("%c\n", 'B') // 字符 B
}