本文系第四篇Golang语言学习教程
在Go语言中,数据类型用于声明函数和变量。
Go语言按类别有以下几种数据分类
序号 | 类型 | 描述 |
---|---|---|
1 | bool | bool类型表示一个布尔值,值为true或false |
2 | 数字类型 | 整型int和浮点型float32、float64.Go支持整型和浮点型数字,并且原生支持复数。 |
3 | 字符串类型 | 一串固定长度字符连接起来的序列,Go语言中字符串由单个字节连接起来,使用UTF-8编码标识Unicode文本。 |
4 | 派生类型 | 包括: (a) 指针类型(Pointer) (b) 数组类型 (c) 结构化类型(struct) (d) Channel 类型 (e) 函数类型 (f) 切片类型 (g) 接口类型(interface) (h) Map 类型 |
bool
bool类型表示一个布尔值,值为true或false
例:
package main
import . "fmt"
func main(){
a := true //定义 a为true
b := false //定义 b为false
Println("a is",a, "b is",b)
c := a && b //c = a 和 b做与运算
Println("c is",c)
d := a || b //d = a 和 b做或运算
Println("d is",d)
}
以上程序运行结果如下:
a is true b is false
c is false
d is true
数字类型
序号 | 类型和描述 |
---|---|
1 |
uint8 无符号8位整型(0 - 255) |
2 |
uint16 无符号16位整型(0 - 65535) |
3 |
uint32 无符号32位整型(0 - 4294967295) |
4 |
uint64 无符号64位整型(0 - 18446744073709551615) |
5 |
int8 有符号8位整型(-128 - 127) |
6 |
int16 有符号16位整型(-32768 - 32767) |
7 |
int32 有符号整型32位(-2147483648 - 2147483647) |
8 |
int64 有符号整型64位(-9223372036854775808 - 9223372036854775807) |
int:根据不同的底层平台(Underlying Platform),表示 32 或 64 位整型。除非对整型的大小有特定的需求,否则你通常应该使用 int 表示整型。
大小:在 32 位系统下是 32 位,而在 64 位系统下是 64 位。
例:
package main
import (
"fmt"
"unsafe"
)
func main(){
a,b := 95,80 //给 a 和 b 赋值
fmt.Println("values of a is",a, "values of b is",b)
fmt.Printf("the type of a is %T,the size of a is %d\n",a, unsafe.Sizeof(a)) //输出 a 的类型和类型大小
fmt.Printf("the type of b is %T,the size of b is %d\n",b, unsafe.Sizeof(b)) //输出 b 的类型和类型大小,\n换行
}
在 Printf 方法中,使用 %T 格式说明符(Format Specifier),可以打印出变量的类型。Go 的 unsafe 包提供了一个 Sizeof 函数,该函数接收变量并返回它的字节大小。unsafe 包应该小心使用,因为使用 unsafe 包可能会带来可移植性问题。不过出于本教程的目的,我们是可以使用的。
上面程序会输出变量 a 和 b 的类型和大小。格式说明符 %T
用于打印类型,而 %d
用于打印字节大小。
以上程序运行结果如下:
values of a is 95 values of b is 80
the type of a is int,the size of a is 8
the type of b is int,the size of b is 8
从上面的输出,我们可以推断出 a 和 b 为 int 类型,且大小都是 64 位(8 字节)。
浮点型
package main
import "fmt"
func main(){
a,b := 11.5,55.98 //自动推断 a, b 的类型
fmt.Printf("Type of is a is %T, type of b is %T\n",a,b) //输出 a, b 的类型
sum := a+b //将a+b赋值给sum
diff := a-b //将a-b赋值给diff
fmt.Println("sum",sum, "diff",diff) //输出sum、diff
}
以上程序简单演示了浮点型的运用。
运行结果如下:
Type of is a is float64, type of b is float64
sum 67.47999999999999 diff -44.48
复数类型
Go语言提供了两种精度的复数类型:complex64和complex128,分别对应float32和float64两种浮点数精度。
内置的complex函数用于构建复数,内建的real和imag函数分别返回复数的实数和虚数。
例:
package main
import ( "fmt" )
func get_real_imag() {
value4 := 1.2 + 10i
var r = real(value4) //返回复数的实部: 1.2
var i = imag(value4) //返回复数的虚部: 10
fmt.Println("the real is",r, "and the imag is",i)
}
func main() {
get_real_imag()
}
以上运行结果如下:
the real is 1.2 and the imag is 10
类型转换
Go 有着非常严格的强类型特征。Go 没有自动类型提升或类型转换。
例:
package main
import "fmt"
func main(){
i := 1 // i 的类型为int
j := 5.5 // j 的类型为float64
sum := i + j //赋值sum为 i + j
fmt.Println(sum)
}
以上程序会报错:
i + j (mismatched types int and float64)
试图将两个不同类型的数相加是不行的,所以需要将 i 转换成float64类型
例:
package main
import "fmt"
func main(){
i := 1 // i 的类型为int
j := 5.5 // j 的类型为float64
sum := float64(i) + j //赋值sum为 i + j,转换 i 的类型为float64
fmt.Println(sum)
}
以上运行结果如下:
6.5
注意:本例中将 i 转换为float64,运算正常。若将 j 转换为int整数类型,则 j 变成整数,输出结果为 6。
字符串类型(string)
在Golang中,字符串是字节的集合。
例:
package main
import "fmt"
func main(){
first := "Hello,everyone!" //first 赋值
second := "This is ergouzi's Mac " //second 赋值
all := first + " " + second // + 操作符用于拼接字符,将first、空格、second拼接在一起赋值给all
fmt.Println(all)
}
以上运行结果如下:
Hello,everyone! This is ergouzi's Mac
以上为学习golang数据类型笔记
有疑问加站长微信联系(非本文作者)