博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
入坑Golang —— 数据类型的基本介绍
阅读量:3945 次
发布时间:2019-05-24

本文共 5079 字,大约阅读时间需要 16 分钟。

Golang的数据类型介绍

数据类型的基本介绍

数据类型

整数类型

  • 基本介绍
    简单的说,就是用于存放整数值的,比如 0, -1, 2345等。
    整数的各个类型
    有符号整数
  • 有符号整数演示案例:
package mainimport "fmt"//演示golang中的整数类型使用func main() {
var i int = 1 fmt.Println("i=", i) // 测试一下 int8的范围 -128~127 // 其它的 int16, int32, int64,类推…… var j int8 = 127 fmt.Println("j=", j)}

无符号整数

  • 无符号整数类型
package mainimport "fmt"func main() {
//无符号整数类型 // 测试一下 uint8的范围(0-255),其他的 uint16,uint32, uint64类推即可 var k uint16 = 255 fmt.Println("k=", k)}

整型类型

  • int,uint,rune,byte的使用
func main() {
// int,uint,rune,byte的使用 var a int = 8900 fmt.Println("a=", a) var d rune = 32 fmt.Println("d=", d) var b uint = 1 var c byte = 255 fmt.Println("b=", b, "c=", c)}
整型的使用细节
func main() {
// 整型的使用细节 var n1 = 100 // ? n1 是什么类型 // 这里我们给介绍一下如何查看某个变量的数据类型 // fmt.Printf() 可以用于做格式化输出 fmt.Printf("n1 的 类型 %T \n", n1)}
  • 如何在程序查看某个变量的占用字节大小和数据类型 (使用较多)
func main() {
var n2 int64 = 10 // unsafe.Sizeof(n1) 是unsafe包的一个函数,可以返回n1变量占用的字节数 fmt.Printf("n2 的 类型 %T n2占用的字节数是 %d ", n2, unsafe.Sizeof(n2))}
  • Golang 程序中整型变量在使用时,遵守保小不保大的原则,即:在保证程序正确运行下,尽量使用占用空间小的数据类型
func main() {
var age byte = 90 fmt.Println("age=", age)}

bit:计算机中的最小存储单位。byte:计算机中基本存储单元。[二进制再详细说] 1 byte = 8 bit

小数类型/浮点型

  • 基本介绍

    小数类型就是用于存放小数的,比如 1.2 0.23 - 1.911

  • 小数类型分类

小数类型分类

  • 案例演示
func main() {
// 演示golang中小数类型使用 var price float32 = 89.12 fmt.Println("price=", price) // 关于浮点数在机器中存放形式的简单说明,浮点数=符号位+指数位+尾数位 // 说明:浮点数都是有符号 var num1 float32 = -0.00089 var num2 float64 = -7809656.09 fmt.Println("num1=", num1, "num2=", num2) // 尾数部分可能丢失,造成精度损失。-123.0000901 var num3 float32 = -123.0000901 var num4 float64 = -123.0000901 fmt.Println("num3=", num3, "num4=", num4)}

PS. 说明:float64 的精度比 float32 的要准确

PS. 说明:如果我们要保存一个精度高的数,则应该选用 float64
浮点型的存储分为三部分:符号位+指数位+尾数位 在存储过程中,精度会有丢失

浮点型使用细节
  1. Golang 浮点类型有固定的范围和字段长度,不收具体OS(操作系统)的影响
  2. Golang 的浮点型默认声明为 float64 类型
func main() {
// Golang 的浮点型默认声明float64 类型 var num5 = 1.1 fmt.Printf("num5的数据类型是 %T \n", num5)}
// 执行结果D:\go\liteide\golang\main>go run 4数据类型.gonum5的数据类型是 float64
func main() {
// 浮点型常量有两种表示形式 // 十进制:如:5.12 .512 (必须有小数点) num6 := 5.12 num7 := .123 // => 0.123 fmt.Println("num6=", num6, "num7=", num7) // 科学计数法:如:5.1234e2 = 5.12*10的2次方 5.12E-2 = 5.12/10的2次方 num8 := 5.1234e2 // ? 5.1234 * 10的2次方 num9 := 5.1234E2 // ? 5.1234 * 10的2次方 shift+alt+向下的箭头 num10 := 5.1234E-2 // ? 5.1234 / 10的2次方 0.051234 fmt.Println("num6=", num6, "num7=", num7, "num8=", num8, "num9=", num9, "num10=", num10)}
// 执行结果D:\go\liteide\golang\main>go run 4数据类型.gonum6= 5.12 num7= 0.123num6= 5.12 num7= 0.123 num8= 512.34 num9= 512.34 num10= 0.051234
  1. 通常情况下,应该使用 float64 ,因为它比 float32 更精准。[开发中,推荐使用 float64]

字符类型

  1. 基本介绍
    Golang 中没有专门的字符类型,如果要存储单个字符(字母),一般使用byte来保存。
    字符串就是一串固定长度的字符连接起来的字符序列。Go 的字符串是由单个字节连接起来的。也就是说对于传统的字符串是字符组成的,而Go的字符不同,它是由字节组成的。
  • 案例演示
func main() {
var c1 byte = 'a' var c2 byte = '0' //字符的0 // 当我直接输出byte值,就是输出了的对应的字符的码值 // 'a' ==> fmt.Println("c1=", c1) fmt.Println("c2=", c2) // 如果我们希望输出对应字符,需要使用格式输出 fmt.Printf("c1=%c c2=%c\n", c1, c2) // var c3 byte = '北' // overflow溢出 var c3 int = '北' // overflow溢出 fmt.Printf("c3=%c c3对应码值=%d", c3, c3)}
  • 对于上面代码说明

    1. 如果我们保存的字符在ASCII表的,比如[0-1,a-z,A-Z…]直接可以保存到byte
    2. 如果我们保存的字符对应码值大于255,这是我们可以考虑使用int类型保存
    3. 如果我们需要安装字符的方式输出,这时我们需要格式化输出,即 fmt.Printf("%c",c1)…
  • 下面是执行结果

D:\go\liteide\golang\main>go run 4数据类型.goc1= 97c2= 48c1=a c2=0c3=北 c3对应码值=21271
字符类型使用细节
  1. 字符常量是用单引号(’’)括起来的单个字符。例如:

    var c1 byte = ‘a’
    var c2 int = ‘中’
    var c3 byte = ‘9’

  2. Go中允许使用转义字符’'来将其后的字符转变为特殊字符型常量。例如:

    var c3 char = ‘\n’ // '\n’表示换行符

  3. Go语言的字符使用 UTF-8 编码,如果想查询字符对应的 utf8 码值:http://www.mytju.com/classcode/tools/encode_utf8.asp

    英文字母-1个字节 汉字-3字节

  4. 在Go中,字符的本质是一个整数,直接输出时,是该字符对应的 UTF-8 编码的码值。

  5. 可以直接给某个变量赋一个数字,然后按格式输出时 %c ,会输出改数字对应的 unicode 字符

    var c4 int = 22269 // 22269 -> ‘国’ 120-> ‘x’

  6. 字符类型是可以进行运算的,相当于一个整数,因为它都对应有 Unicode 码

    var n1 = 10 + ‘a’ // 10 + 97 = 107
    fmt.Println(“n1=”, n1) == fmt.Println(“n1=”, (10 + 97 = 107))

  • 字符类型本质探讨
  1. 字符型 存储到 计算机中,需要将字符对应的码值(整数)找出来
    存储:字符 --> 对应码值 --> 二进制 --> 存储
    读取:二进制 --> 码值 --> 字符 --> 读取
  2. 字符和码值的对应关系是通过字符编码表决定的(是规定好)
  3. Go语言的编码都统一成了utf-8.非常方便,很统一,再也没有编码乱码的困扰了

布尔类型

  1. 布尔类型也叫bool类型,bool类型的数据只允许取值 “true” 和 “false”
  2. bool类型占 1 个字节
  3. bool类型适用于逻辑运算,一般用于程序流程控制:[注:这个在bool类型的使用中会详细介绍]
    if 条件控制语句:
    for 循环控制语句
  • 案例演示
package mainimport (	"fmt"	"unsafe")func main() {
var b = false fmt.Println("b=", b) // 注意事项 // 1、bool类型占 1 个字节 fmt.Println("b 的占用空间=", unsafe.Sizeof(b)) // 2、bool类型的数据只取值 "true" 和 "false"}

string 类型

  1. 字符串就是一串固定长度的字符连接起来的字符序列。Go的字符串是由单个字节连接起来的。Go语言的字符串字节使用 UTF-8 编码标识 Unicode 文本
  2. Go语言的字符串的字节使用UTF-8编码标识Unicode文本,这样Golang统一使用UTF-8编码,中文乱码问题不会再困扰程序员
  3. 字符串一旦赋值了,字符串就不能修改了:在Go中字符串是不可变的
  4. 字符串的两种表示形式
    1. 双引号,会识别转义字符
    2. 反引号,以字符串的原生形式输出,包括换行和特殊,可以实现防止攻击、输出源码等效果
  • 案例演示
package mainimport "fmt"func main() {
str2 := "abc\nabc" fmt.Println("str2=", str2) str3 := ` package main import ( "fmt" "unsafe" ) func main() { var b = false fmt.Println("b=", b) // 注意事项 // 1、bool类型占 1 个字节 fmt.Println("b 的占用空间=", unsafe.Sizeof(b)) // 2、bool类型的数据只取值 "true" 和 "false" } ` fmt.Println("str3=", str3) // 字符串拼接方式 var str = "hello" + "world" str += " haha!" fmt.Println("str=", str) // 当一个拼接的操作很长时,可以分行写。注意:需要将 "+" 保留在上一行 str4 := "hello " + "world " + "hello " + "world" fmt.Println("str4=", str4)}

转载地址:http://ahqwi.baihongyu.com/

你可能感兴趣的文章
Github使用问题合集
查看>>
QT多线程服务器
查看>>
Ubuntu 18.04.2 ulimit配置
查看>>
Ubuntu Mysql 安装与配置
查看>>
QT5.12 Mysql驱动未能加载问题
查看>>
现场直击|SequoiaDB@SIGMOD 2021:关注数据库的根科技存储技术
查看>>
赋能政企智慧办公,巨杉数据库与致远互联完成产品互认证
查看>>
SequoiaDB湖仓一体架构亮相 ACM SIGMOD 2021
查看>>
信通院发布第十二批大数据产品能力评测结果,巨杉数据库两款产品通过
查看>>
巨杉数据库荣获2020年度河南省科学技术进步奖
查看>>
湖仓一体提升管理效率 培育数据沃土
查看>>
报名启动!巨杉数据库 2021 湖仓一体技术大赛带你进入分布式技术的星辰大海
查看>>
python的collections
查看>>
J2ME程序开发新手入门九大要点
查看>>
双向搜索算法
查看>>
日本GAME製作方式
查看>>
移动行业术语资料
查看>>
3G到来将全面颠覆SP、CP游戏规则
查看>>
射击游戏中跟踪弹及小角度移动的开发
查看>>
播放声音文件的完整源代码
查看>>