1、golang 数据类型
数据类型:
- 布尔类型,只有常量 true 或者 false
- 数字类型,包括几种不同大小的整数、浮点数和复数,
- 字符串类型,字符串就是一串固定长度的字符连接起来的字符序列。一个字符串是一个不可改变的字节序列。Go语言的字符串是由单个字节连接起来的。Go语言的字符串的字节使用 UTF-8 编码标识 unicode 文本
- 派生类型 :
- 指针类型(Pointer)
- 数组类型
- 结构化类型(struct)
- Channel 类型
- 函数类型
- 切片类型
- 接口类型(interface)
- Map 类型
2、整型
Go语言同时提供了有符号和无符号类型的整数运算 int8,uint8,int16,uint16,int64,uint64
不管它们的具体大小,int、uint和uintptr是不同类型的兄弟类型。其中int和int32也是不同的类型,即使int的大小也是32bit,在需要将int当作int32类型的地方需要一个显式的类型转换操作
2.1、byte
byte也是uint8类型的等价类型,byte类型一般用于强调数值是一个原始的数据而不是一个小的整数
func main() {
s := "abc"
b := []byte(s)
s1 := string(b)
fmt.Printf("b: %v\n", b)
fmt.Printf("s1: %v\n", s1)
}
2.2、int 和 uint
是两种一般对应特定CPU平台机器字大小的有符号和无符号整数int和uint;其中int是应用最广泛的数值类型. 当是32位操作系统对应的是4位(int32)。当是64位操作系统对应的是8位(int64)
package main
import (
"fmt"
"math"
"unsafe"
)
func main() {
var a int
fmt.Printf("a 默认值: %v\n", a)
//int8
var i uint8 = 1
fmt.Printf("sizeof : %v\n", unsafe.Sizeof(i))
fmt.Printf("max value : %v\n", math.MaxUint8)
//int
var n int = 10
fmt.Printf("int max val: %v\n", math.MaxInt)
fmt.Printf("int sizeof : %v\n", unsafe.Sizeof(n)) //64位操作系统
//自动类型推导的类型:int
b := 2
fmt.Printf("b: %T\n", b)
//显示的类型转换
c := int64(b)
fmt.Printf("c: %T\n", c)
}
// a 默认值: 0
// sizeof : 1
// max value : 255
// int max val: 9223372036854775807
// int sizeof : 8
// b: int
// c: int64
2.3、rune
Unicode字符rune类型是和int32等价的类型,通常用于表示一个Unicode码点。这两个名称可以互换使用
func main() {
var s = "hello世界"
fmt.Printf("s 的长度: %v\n", len(s))
fmt.Printf("s 的 rune长度: %v\n", len([]rune(s)))
s1 := []rune(s)
fmt.Println(string(s[5:7]))
fmt.Println(string(s1[5:7]))
}
2.4、uintptr
是一种无符号的整数类型uintptr,没有指定具体的bit大小但是足以容纳指针。 uintptr类型只有在底层编程时才需要,特别是Go语言和C语言函数库或操作系统接口相交互的地方
3、浮点类型
Go语言提供了两种精度的浮点数,float32和float64。它们的算术规范由IEEE754浮点数国际标准定义,该浮点数规范被所有现代的CPU支持。
这些浮点数类型的取值范围可以从很微小到很巨大。浮点数的范围极限值可以在math包找到。常量math.MaxFloat32表示float32能表示的最大数值,大约是 3.4e38;对应的math.MaxFloat64常量大约是1.8e308。它们分别能表示的最小值近似为1.4e-45和4.9e-324
//自动推到的类型: float64
d := 1.2
fmt.Printf("d type: %T\n", d)
//d type: float64
fmt.Printf("d max: %v\n", math.MaxFloat64)
//d max: 1.7976931348623157e+308
var e float32
fmt.Printf("e 默认值: %v\n", e)
//e 默认值: 0
4、运算符
算术运算、逻辑运算和比较运算的二元运算符,它们按照优先级递减的顺序排列
* / % << >> & &^
+ - | ^
== != < <= > >=
&&
||
& 位运算 AND
| 位运算 OR
^ 位运算 XOR
&^ 位清空(AND NOT)
<< 左移
>> 右移
在Go语言中,%取模运算符的符号和被取模数的符号总是一致的,因此-5%3和-5%-3结果都是-2。除法运算符/的行为则依赖于操作数是否全为整数,比如5.0/4.0的结果是1.25,但是5/4的结果是1,因为整数除法会向着0方向截断余数
golang的两个整数相除:
func main() {
n := 2 / 10
fmt.Printf("n: %v\n", n)
// n = 0
n1 := 2.0 /10
//n1=0.2
}