由浅到深认识Go语言(3):数据类型

该文章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布尔类型1false其值不为真即为假,不可以用数字代表true或false
byte字节型10uint8别名
int, uint整型-0有符号32位或无符号64位
int8整型10-128 ~ 127
uint8整型100 ~ 255
int16整型20-32768 ~ 32767
uint16整型200 ~ 65535
int32整型40-2147483648 到 2147483647
uint32整型400 到 4294967295
int64整型800 到 18446744073709551615
uint64整型80-9223372036854775808到 9223372036854775807
float32浮点型40.0小数位精确到7位
float64浮点型80.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 2312311);

64位系统中,int是8个字节,范围是:-9223372036854775808 ~ 9223372036854775807( − 2 63 到 2 63 − 1 -2^{63}到2^{63}-1 2632631);

无符号整型uint

var a uint

uint可以包含正整数和零;

32位系统中,int是4个字节,范围是:0 ~ 4294967295( 0 到 2 32 − 1 0到2^{32}-1 02321);

64位系统中,int是8个字节,范围是:0 ~ 18446744073709551615( 0 到 2 64 − 1 0到2^{64}-1 02641);

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))
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

下一章:由浅到深认识Go语言(4):常量&运算符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值