go语言数据类型

本文转载自 https://studygolang.com/articles/11869

下面是 Go 支持的基本类型:

  1. bool
  2. 数字类型
    • int8, int16, int32, int64, int
    • uint8, uint16, uint32, uint64, uint
    • float32, float64
    • complex64, complex128
    • byte
    • rune
  3. string

bool

bool 类型表示一个布尔值,值为 true 或者 false。

有符号整型

类型 大小 范围 描述
int8 8位 -128~127 表示 8 位有符号整型
int16 16位 -32768~32767 表示 16 位有符号整型
int32 32位 -2147483648~2147483647 表示 32 位有符号整型
int64 64位 -9223372036854775808~9223372036854775807 表示 64 位有符号整型
int 32 | 64位

int 根据不同的底层平台(Underlying Platform),表示 32 或 64 位整型。除非对整型的大小有特定的需求,否则应该使用 int 表示整型。
大小:在 32 位系统下是 32 位,而在 64 位系统下是 64 位。
范围:在 32 位系统下是 -2147483648~2147483647,而在 64 位系统是 -9223372036854775808~9223372036854775807。

无符号整型

类型 大小 范围 描述
uint8 8位 0~255 表示 8 位无符号整型
uint16 16位 0~65535 表示 16 位无符号整型
uint32 32位 0~4294967295 表示 32 位无符号整型
uint64 64位 0~18446744073709551615 表示 64 位无符号整型
uint 32 | 64位

uint 根据不同的底层平台,表示 32 或 64 位无符号整型。
大小:在 32 位系统下是 32 位,而在 64 位系统下是 64 位。
范围:在 32 位系统下是 0~4294967295,而在 64 位系统是 0~18446744073709551615。

浮点型

float32:32 位浮点数
float64:64 位浮点数

复数类型

complex64:实部和虚部都是 float32 类型的的复数。
complex128:实部和虚部都是 float64 类型的的复数。

其他数字类型

byte 是 uint8 的别名。
rune 是 int32 的别名。

string 类型

string

类型转换

Go 有着非常严格的强类型特征。Go 没有自动类型提升或类型转换。我们通过一个例子说明这意味着什么。

package main

import (  
    "fmt"
)

func main() {  
    i := 55      //int
    j := 67.8    //float64
    sum := i + j //不允许 int + float64
    fmt.Println(sum)
}

上面的代码在 C 语言中是完全合法的,然而在 Go 中,却是行不通的。i 的类型是 int ,而 j 的类型是 float64 ,我们正试图把两个不同类型的数相加,Go 不允许这样的操作。如果运行程序,你会得到 main.go:10: invalid operation: i + j (mismatched types int and float64)
要修复这个错误,i 和 j 应该是相同的类型。在这里,我们把 j 转换为 int 类型。把 v 转换为 T 类型的语法是 T(v)。

package main

import (  
    "fmt"
)

func main() {  
    i := 55      //int
    j := 67.8    //float64
    sum := i + int(j) //j is converted to int
    fmt.Println(sum)
}

现在,当你运行上面的程序时,会看见输出 122。

赋值的情况也是如此。把一个变量赋值给另一个不同类型的变量,需要显式的类型转换。下面程序说明了这一点。

package main

import (  
    "fmt"
)

func main() {  
    i := 10
    var j float64 = float64(i) // 若没有显式转换,该语句会报错
    fmt.Println("j", j)
}

在第 9 行,i 转换为 float64 类型,接下来赋值给 j。如果不进行类型转换,当你试图把 i 赋值给 j 时,编译器会抛出错误。

你可能感兴趣的:(golang学习笔记)