该文章Github地址:https://github.com/AntonyCheng/go-notes【有条件的情况下推荐直接访问GitHub以获取最新的代码更新】
在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template【有条件的情况下推荐直接访问GitHub以获取最新的代码更新】& CSDN文章地址:https://blog.csdn.net/AntonyCheng/article/details/136555245),该模板集成了最常见的开发组件,同时基于修改配置文件实现组件的装载,除了这些,模板中还有非常丰富的整合示例,同时单体架构也非常适合SpringBoot框架入门,如果觉得有意义或者有帮助,欢迎Star & Issues & PR!
上一章:由浅到深认识Go语言(2):变量操作
3.数据类型
类型 | 名称 | 长度 | 零值 | 说明 |
---|---|---|---|---|
bool | 布尔类型 | 1 | false | 其值不为真即为假,不可以用数字代表true或false |
byte | 字节型 | 1 | 0 | uint8别名 |
int, uint | 整型 | - | 0 | 有符号32位或无符号64位 |
int8 | 整型 | 1 | 0 | -128 ~ 127 |
uint8 | 整型 | 1 | 0 | 0 ~ 255 |
int16 | 整型 | 2 | 0 | -32768 ~ 32767 |
uint16 | 整型 | 2 | 0 | 0 ~ 65535 |
int32 | 整型 | 4 | 0 | -2147483648 到 2147483647 |
uint32 | 整型 | 4 | 0 | 0 到 4294967295 |
int64 | 整型 | 8 | 0 | 0 到 18446744073709551615 |
uint64 | 整型 | 8 | 0 | -9223372036854775808到 9223372036854775807 |
float32 | 浮点型 | 4 | 0.0 | 小数位精确到7位 |
float64 | 浮点型 | 8 | 0.0 | 小数位精确到15位 |
string | 字符串 | “” | utf-8字符串 |
3.1.整型
有符号整型int
var a int
int可以包含正整数,负整数和零;
32位系统中,int是4个字节,范围是:-2147483648 ~ 2147483647( − 2 31 到 2 31 − 1 -2^{31}到2^{31}-1 −231到231−1);
64位系统中,int是8个字节,范围是:-9223372036854775808 ~ 9223372036854775807( − 2 63 到 2 63 − 1 -2^{63}到2^{63}-1 −263到263−1);
无符号整型uint
var a uint
uint可以包含正整数和零;
32位系统中,int是4个字节,范围是:0 ~ 4294967295( 0 到 2 32 − 1 0到2^{32}-1 0到232−1);
64位系统中,int是8个字节,范围是:0 ~ 18446744073709551615( 0 到 2 64 − 1 0到2^{64}-1 0到264−1);
3.2.浮点型
单精度浮点型float32
小数位精确到7位;
var a float32
双精度浮点型float64
小数位精确到15位;
var a float64
注意事项:
-
这里推荐使用float64,以为Go语言中和数学计算相关的包都使用的是float64;
-
一旦使用格式化输出,小数位数会自动进行四舍五入的操作;
-
使用自动推导类型来创建浮点数,默认也是float64
3.3.bool型
var a bool
声明默认为false,取值要么为 true ,要么为 false;
3.4.字符型
字符类型定义
使用单引号引起的单个字符为字符类型;
var a byte = 'a'
fmt.Println("a =", a)
打印结果如下:
此时输出的是 97 ,而不是 a ,这是因为 Go 语言中普通输出默认是 int 类型,而 byte 转换为 int 需要ASCII码的支持,如果想看到打印内容为 a ,则需要对其进行格式化输出;
package main
import "fmt"
func main() {
var a byte = 'a'
fmt.Printf("a = %c", a)
}
打印效果如下:
ASCII码
ASCII码是一套字符集,是美国国家标准局(ANSI)制定了ASCII(American Standard Code for Information Interchange)码;
3.5.字符串型
字符串类型定义
双引号括起来的字符是字符串型;
package main
import "fmt"
func main() {
var a string = "name"
fmt.Printf("a = %s\n", a)
}
打印效果如下:
字符串结束标志
虽然看到 a 中包含了 4 个字符,但是还隐藏着一个字符串的结束标志 ’\0‘ ,而计算机打印的内容就是这个结束标志之前的内容;
测试字符串中字符个数
测试字符串字符个数的函数是 len()
;
package main
import "fmt"
func main() {
var a string = "name"
i := len(a)
fmt.Println("length of a is", i)
}
打印效果如下:
如果字符串内容中有汉字,那么一个汉字所在字符是 3 个,这是为了和 Linux 系统保持一直;
package main
import "fmt"
func main() {
var a string = "你好go"
i := len(a)
fmt.Println("length of a is", i)
}
打印效果如下:
3.6.强制类型转换
基本格式
//数据类型(被转换内容)
示例如下:
package main
import "fmt"
func main() {
var num float64 = 3.15
var num1 int = 20
fmt.Printf("%d\n", int(num))
fmt.Printf("%f\n", float64(num1))
var num2 float32 = 5.8
var num3 float64 = 6.6
fmt.Printf("%f\n", float64(num2)+num3)
}
打印效果如下:
强制类型转换总结:
- 类型转换用于将一种数据类型的变量转换为另外一种类型的变量;
- 在转换时,建议低类型转换为高类型,保证数据精度;
- 如果高类型转换成低类型,可能会丢失精度或者出现数据溢出的情况;
3.7.数据类型综合案例
请输入用户姓名和年龄,当输入完成后在屏幕上显示:您好!XX,您的年龄是XX;
package main
import "fmt"
func main() {
name := ""
age := 0
fmt.Println("请输入你的姓名:")
fmt.Scan(&name)
fmt.Println("请输入你的年龄:")
fmt.Scan(&age)
fmt.Printf("您好!%s,你的年龄是%d", name, age)
}
打印效果如下:
3.8.fmt输入输出格式
格式 | 含义 |
---|---|
%% | 一个%字面量 |
%b | 一个二进制整数值(基数为2),或者是一个(高级的)用科学计数法表示的指数为2的浮点数 |
%c | 字符型。可以把输入的数字按照ASCII码相应转换为对应的字符 |
%d | 一个十进制数值(基数为10) |
%f | 以标准记数法表示的浮点数或者复数值 |
%o | 一个以八进制表示的数字(基数为8) |
%p | 以十六进制(基数为16)表示的一个值的地址,前缀为0x,字母使用小写的a-f表示 |
%q | 使用Go语法以及必须时使用转义,以双引号括起来的字符串或者字节切片[]byte,或者是以单引号括起来的数字 |
%s | 字符串。输出字符串中的字符直至字符串中的空字符(字符串以’\0‘结尾,这个’\0’即空字符) |
%t | 以true或者false输出的布尔值 |
%T | 使用Go语法输出的值的类型 |
%x | 以十六进制表示的整型值(基数为十六),数字a-f使用小写表示 |
%X | 以十六进制表示的整型值(基数为十六),数字A-F使用小写表示 |
3.9.各种类型的大小
unSafe.Sizeof()方法可以用来测试各种类型的默认内存大小,下面的示例来说明这些数据类型的默认大小:
package main
import (
"fmt"
"unsafe"
)
func main() {
var i1 int8 = 1
var i2 int16 = 1
var i3 int32 = 1
var i4 int64 = 1
var f1 float32 = 1.1
var f2 float64 = 1.1
var b bool = true
var by byte = 1
fmt.Println("sizeof(int8) =", unsafe.Sizeof(i1))
fmt.Println("sizeof(int16) =", unsafe.Sizeof(i2))
fmt.Println("sizeof(int32) =", unsafe.Sizeof(i3))
fmt.Println("sizeof(int16) =", unsafe.Sizeof(i4))
fmt.Println("sizeof(float32) =", unsafe.Sizeof(f1))
fmt.Println("sizeof(float64) =", unsafe.Sizeof(f2))
fmt.Println("sizeof(bool) =", unsafe.Sizeof(b))
fmt.Println("sizeof(byte) =", unsafe.Sizeof(by))
}
打印效果如下: