05.数字类型
# 01.数字类型
# 1.1 Golang数据类型介绍
Go 语言中数据类型分为:基本数据类型和复合数据类型
基本数据类型有:
- 整型、浮点型、布尔型、字符串
复合数据类型有:
- 数组、切片、结构体、函数、map、通道(channel)、接口
# 1.2 整型分为两大类
有符号整形按长度分为:int8、int16、int32、int64
对应的无符号整型:uint8、uint16、uint32、uint64
关于字节:
字节也叫 Byte,是计算机数据的基本存储单位。8bit(位)=1Byte(字节) 1024Byte(字节)=1KB
1024KB=1MB 1024MB=1GB
1024GB=1TB 。在电脑里一个中文字是占两个字节的。
# 1.3 unsafe.Sizeof
- unsafe.Sizeof(n1) 是 unsafe 包的一个函数,可以返回 n1 变量占用的字节数
package main
import (
"fmt"
"unsafe"
)
func main() {
var a int8 = 124
fmt.Printf("%T\n", a) // int8
fmt.Println(unsafe.Sizeof(a)) // 1 (表示占用1个字节,也就是8 byte)
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 1.4 int不同长度直接的转换
package main
import (
"fmt"
)
func main() {
var num1 int8
num1 = 127
num2 := int32(num1) // 将num1类型转换成 int32 并赋值给num1
fmt.Printf("值:%v 类型%T", num2, num2) //值:127 类型 int32
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 1.5 浮点型
- Go 语言支持两种浮点型数:float32 和 float64
package main
import (
"fmt"
"math"
)
func main() {
fmt.Printf("%f\n", math.Pi) // 3.141593 (默认保留 6 位小数)
fmt.Printf("%.2f\n", math.Pi) // 3.14 (保留 2 位小数)
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 1.6 reflect.TypeOf查看数据类型
package main
import (
"fmt"
"reflect"
)
func main() {
c := 10
fmt.Println( reflect.TypeOf(c) ) // int
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 02.int互转
# 2.0 int常用转换
package main
import (
"fmt"
"strconv"
)
func main() {
// string到int
intV,_ := strconv.Atoi("123456")
// string到int64
int64V, _ := strconv.ParseInt("123456", 10, 64)
// int到string
strS := strconv.Itoa(123)
// int64到string
var tmp int64 = 123
str64S:=strconv.FormatInt(tmp,10)
fmt.Printf("%T--%T--%T--%T", intV, int64V, strS, str64S)
// int--int64--string--string
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 2.1 int8转int16
package main
import "fmt"
func main() {
var a int8 = 20
var b int16 = 40
var c = int16(a) + b //要转换成相同类型才能运行
fmt.Printf("值:%v--类型%T", c, c) //值:60--类型 int16
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 2.2 int16转float32
package main
import "fmt"
func main() {
var a float32 = 3.2
var b int16 = 6
var c = a + float32(b)
fmt.Printf("值:%v--类型%T", c, c) //值:9.2--类型 float32
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 2.3 math.Sqrt强转
package main
import (
"fmt"
"math"
)
func main() {
var a, b = 3, 4
var c int
// math.Sqrt()接收的参数是 float64 类型,需要强制转换
c = int(math.Sqrt(float64(a*a + b*b)))
fmt.Println(c) // 5
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 03.int与str转换
# 3.1 int与str转换
package main
import (
"fmt"
"strconv"
)
func main() {
//2.1 int64转str
var num2 int64 = 123456
str2 := strconv.FormatInt(num2, 10)
fmt.Printf("%v---%T \n",str2,str2) // 123456---string
//2.2 str转int64
v1, _ := strconv.ParseFloat(str2, 64)
fmt.Printf("%v---%T\n",v1,v1) // 123456---float64
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 3.2 str与int64转换
package main
import (
"fmt"
"strconv"
)
func main() {
//1.1 int转sting
num1 := 123456
str1 := strconv.Itoa(num1)
fmt.Printf("%v---%T \n",str1,str1) // 123456---string
// 1.2 sting转int
_int, err := strconv.Atoi(str1)
fmt.Println(_int,err) // 123456 <nil>
fmt.Printf("%v---%T\n",_int,_int) // 123456---int
//2.1 int64转str
var num2 int64 = 123456
str2 := strconv.FormatInt(num2, 10)
fmt.Printf("%v---%T \n",str2,str2) // 123456---string
//2.2 str转int64
v1, _ := strconv.ParseFloat(str2, 64)
fmt.Printf("%v---%T\n",v1,v1) // 123456---float64
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 04.布尔值
Go 语言中以 bool 类型进行声明布尔型数据,布尔型数据只有 true(真)和 false(假)两个值。
注意:
- 1.布尔类型变量的默认值为 false。
- 2.Go 语言中不允许将整型强制转换为布尔型.
- 3.布尔型无法参与数值运算,也无法与其他类型进行转换。
package main
import (
"fmt"
"unsafe"
)
func main() {
var b = true
fmt.Println(b, "占用字节:", unsafe.Sizeof(b)) // true 占用字节: 1
}
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
上次更新: 2024/3/13 15:35:10