从0开始go语言-5|Go主题月

161 阅读4分钟

基础类型-1

Go语言内置的类型有:

  • 布尔类型:bool
  • 整型:int8、byte、int16、int、unint、uintptr等
  • 浮点类型:float32、float64
  • 复数类型:complex64、complex128
  • 字符串:string
  • 字符类型:rune
  • 错误类型:error 此外Go语言还支持以下复合类型:
  • 指针:pointer
  • 数组:array
  • 切面:slice
  • 字典:map
  • 通道:chan
  • 结构体:struct
  • 接口:interface

布尔类型

Go语言中的布尔类型与其他语言基本一致,关键字bool,可赋值为预定义的true和false实例如下:

var a bool
a=true
b:=(1==2) // b可推导为bool类型

注意:布尔类型不接受其他类型的赋值,不支持自动或者强制类型转换。

整型

整型是所有编程语言最基本的类型,Go语言支持如下的整型类型:

image.png

  • 类型表示 需要注意的是int和int32在Go语言中被认为是两种不同的类型,编译器不会自动帮你做类型转换,比如如下会有编译错误:
var a int32
b := 64  //b会自动推导为int类型
a = b    //编译错误

编译错误类似于: cannot use value1 (type int) as type int32 in assignment。 可以使用强制类型转换

a = int32(b)  //编译通过

当然,在做强制类型转换时,需要注意数据长度被截短而发生的数据精度损失(比如将浮点数强制转为整数)和值溢出(值超过转换的目标类型的值范围时)问题。

  • 数值运算 Go语言支持下面的常规整数运算:+、一、*、/和%加减乘除就不详细解释了,需要说下的是,% 和在C语言中一样是求余运算,比如:
7 % 3 // 结果为:1
  • 比较运算 Go语言支持以下的几种比较运算符:>、<、==、>=、<=和!=。与大多数其他语言相同。 注意:两个不同类型的的整数是不能比较的,这个现实中事实一致,必须换算成相同的类型才能比较,比如int8类型的数和int类型的数不能直接比较,但各种类型的整型变量都可以直接与字面常量(literal)进行比较。
var i int32
var j int64
i, j = 1, 2 
if i == j { 
 // 编译错误
 fmt.Println("i and j are equal.") 
} 
if i == 1 || j == 2 { 
  // 编译通过
 fmt.Println("i and j are equal.") 
}
  • 位运算 Go语言支持以下位运算: image.png

浮点型

浮点型用于表示包含小数点的数据,比如1.339就是一个浮点型数据。Go语言中的浮点类型采用IEEE-754标准的表达方式。

  • 浮点数表示 Go语言中表示浮点类型有float32和float64,其中float32等价于C语言中的float类型,float64等价于c语言的double类型。在Go语言中定义浮点类型变量如下:
var fvalue1 float32
fvalue1 = 12 
fvalue2 := 12.0 // 如果不加小数点,fvalue2会被推导为整型而不是浮点型
  • 浮点数比较 因为浮点数不是一种精确的表达方式,所以像整型那样直接用==来判断两个浮点数是否相等是不可行的。 浮点型的比较推荐如下表示:
import "math" 
// p为用户自定义的比较精度,比如0.00001 
func IsEqual(f1, f2, p float64) bool { 
 return math.Fdim(f1, f2) < p 
}

复数类型

复数其实由两部分组成,一个表示实部(real),一个表示虚部(imag)。

  • 复数表示
var value1 complex64       //由2个float32构成的复数类型
value1 = 3.2 + 12i 
value2 := 3.2 + 12i        //value2是complex128类型
value3 := complex(3.2, 12) // value3结果同 value2
  • 实部和虚部 对于一个复数z = complex(x, y),就可以通过Go语言内置函数real(z)获得该复数的实部,也就是x,通过imag(z)获得该复数的虚部,也就是y。

字符串

在Go语言中字符串也是一种基本类型,Go语言中字符串的声明非常简单如下:

var str string         // 声明一个字符串变量
str = "my name is Go"  // 字符串赋值
ch := str[0]           // 取字符串的第一个字符

字符串的内容可以用类似于数组下标的方式获取,但与数组不同,字符串的内容不能在初始化后被修改,如下:

str := "my name is Go" // 字符串也支持声明时进行初始化的做法
str[0] = 'H' // 编译错误
  • 常见字符串操作 image.png
  • 字符串遍历 Go语言支持两种方式遍历字符串,一种是以字节数组的方式遍历如下:
str := "Hello,世界"
n := len(str) 
for i := 0; i < n; i++ { 
 ch := str[i] // 依据下标取字符串中的字符,类型为byte 
 fmt.Println(i, ch) 
}

另一种是Unicode字符遍历

str := "Hello,世界"
for i, ch := range str { 
 fmt.Println(i, ch)//ch的类型为rune 
}

字符类型

在Go语言中支持两个字符类型,一个是byte(实际上是uint8的别名),代表UTF-8字符串的单个字节的值;另一个是rune,代表单个Unicode字符。

备注

本文正在参与「掘金Golang主题学习月」, 点击查看活动详情