基本数据类型

数值型

整数

  • int 64位操作系统默认为int64,32位操作系统为int32,但是类型检查时时int
  • int8 (byte 1字节)
  • int16 (short 2字节)
  • int32 (int 4字节)
  • int64 (long 8字节)

uint uint8 uint16 uint32 uint64 代表无符号int 无符号只能表示正数

无符号的表示范围更大,因为表示数值得位多1

int8 -2^(8-1) ~ 2^(8-1) -1

uint8 0~ 2^8

整数使用的细节

根据需求使用int,uint,比如表示人的年龄用uint比int好

自动推导整数就是int,比如 a:=2 这里a是int,在64位操作系统中就是int64

保小不保大,在确保程序正确运行情况下,尽量使用占用空间较小的数据类型,比如人的年龄 uint8,0到255足够

bit是计算机中最小存储单位

byte是计算机中基本存储单元 1byte=8bit

查看变量数据类型及占用字节大小

package main

import (
"fmt"
"unsafe"
) func main() { n1 := 12
var n2 int64 = 666 fmt.Printf("n1 type is %T, 占用字节数:%d \n", n1,unsafe.Sizeof(n1))
fmt.Printf("n1 type is %T, 占用字节数:%d \n", n2,unsafe.Sizeof(n2))
} // 输出结果
n1 type is int, 占用字节数:8
n1 type is int64, 占用字节数:8

浮点数

  • float32 (4字节 float)
  • float64 (8字节 double)

浮点数都是有符号的,注意没有float,只有float32和float64

浮点数=符号位+指数位+尾数位

尾数位可能丢失,造成精度损失

float64比float32表示的范围更大精度更高

浮点数使用细节
  • golang的浮点数有固定的范围和字段长度,不受具体os的影响

  • 默认声明为float64

  • 通常使用float64,因为精度高,开发中推荐使用float64

  • 浮点数的科学计数法

    4.223E2 = 4.223* 10的2次方

    E可以用小写e代替

    4.251E-2=4.251*10的-2次方

字符型

golang没有专门的char类型,一般用单个byte保存单个字母字符

1byte=8bit 一般说是8位

UTF-8编码中:1个英文字符或英文标点占1byte

1个中文汉字或一个中文标点占3byte

1byte不能存中文字符,utf8编码中一个汉字需要3字节

func main() {
var c3 byte = '狗'
fmt.Println(c3)
}
// 编译报错
# command-line-arguments
.\main.go:12:16: constant 29399 overflows byte // 字符'狗'unicode码值是29399,byte的范围-128~127,所以overflows byte
// 想要保存中文字符怎么办? 用更大的数据类型 比如int
var cc int = '狗'
// Println(cc) 输出的是码值 29399 想输出字符需要Printf("%c",cc) //-----------自动推导
c4 := '狗'
fmt.Printf("%c,%d byte,type is %T",c4, unsafe.Sizeof(c4), c4)
// -------------输出结果----
狗,4 byte,type is int32

字符型使用细节

  1. 如果保存ASCII表中的字符,保存到byte
  2. 如果保存的字符码值overflow byte,可以考虑用int,字符型自动推导类型时就会按码值大小选择int32或int64
  3. 默认输出的是字符对应的码值,想输出字符需要用%c
  4. 允许字符转义,如'\n'表示一个换行符
  5. golang中的字符本质是一个整数,可以进行运算,如'A'+23

字符型数据存储和读取过程

存储:字符 ->查码表 ->获取码值->将码值转二进制 ->保存

读取:二进制数据 ->转码值 ->查码表 -> 字符

布尔型

bool 类型的值只有true 和 false

bool占用1byte

bool用于逻辑判断

与int不兼容 不能转数字类型

字符串

其他语言的中:一串固定长度的字符连接起来的字符序列称为字符串,由字符(char)组成

golang字符串由单个字节连接起来构成的,由字节(byte)组成

	str := "国际歌"
fmt.Println(len(str)) // 长度是9 java/python/js中长度是3

java的字符串是一个char数组,但是golang是没有char的

string在go中属于基本数据类型

不可变类型,字符串在各种编程语言中都是不可变的,因为字符使用场景太多,作为函数参数,hash表的key

等需求要求字符串高效、安全,可hash,所以设计成不可变类型

字符串两种表示形式

  1. 使用双引号 var name string ="Jack"

  2. 使用反引号

    var Message = `I can not love \n golang\t any more!`
    // 反引号中的字符串是原始字符串,就像python中的 r" something "

字符串使用细节

字符串拼接:

msg :="hello"+"world"

msg+="!!!!"

多行字符串拼接时+号必须放在行尾,而不是下一行的行首

info := "asjdkljflskdf"+"adsfasdf"+
"xxxx"

不常用的几种基本类型

  • uintptr 表示一个整数,长度与操作系统有关,可以保存指针地址
  • rune int32的别名 用unicode码值保存
  • complex64 complex128

基本数据类型的默认值

定义一个变量,未赋值,这个变量有默认值,这个值也称为零值。

DATA TYPE DEFAULT VALUE
int 0
float 0.0
string ""
bool false

数值型相互转换

golang中的数据类型转换必须显示转换,没有自动转换

不像Java中小转大,低精度转高精度能自动转型

类型转换基本语法:T(v)将变量v强制转换为T类型

var i int32 = 666
var f float32 = float32(i)

数据类型转换细节:

  1. golang小转大,大转小,低精度到高精度,高精度转低精度都要强制类型转换
  2. 被转换的是变量中保存的数据值,变量本身的数据类型不变,就像函数中的值传递
  3. 大转小时,比如int64一个比较大的数转int8,不会报错但是也不是希望的结果,会按溢出处理,转换时注意数据类型的取值范围
  4. 两个范围、精度不同的数据在一个表达式中运算时,结果是其中范围大,精度高的一个

string的类型转换

方式1:

fmt.Sprintf("%参数", 表达式) // 字符串格式化
// %c char
// %t bool
// %d 十进制整数
// %f 浮点数

方式2:

// 使用strconv包的函数
func FormatBool(b bool) string
func FormatInt(i int64, base int) string
func FormatUint()
func FormatFloat(f float64,fmt byte,prec,bitSize int)string // 十进制 Atoi s->int Itoa int->s // 字符串转其他 失败时有默认值
func ParseBool(str string)(value bool,err error)
func ParseInt(s string, base int, bitSize int)(i int64,err error )
func ParseUint()
func ParseFloat(s string, bitSize int)(f float64,err error)

go数据类型之基本类型的更多相关文章

  1. 由js apply与call方法想到的js数据类型(原始类型和引用类型)

    原文地址:由js apply与call方法想到的js数据类型(原始类型和引用类型) js的call方法与apply方法的区别在于第二个参数的不同,他们都有2个参数,第一个为对象(即需要用对象a继承b, ...

  2. MySQL日期数据类型、时间类型使用总结

    MySQL日期数据类型.时间类型使用总结 MySQL日期数据类型.MySQL时间类型使用总结,需要的朋友可以参考下.   MySQL 日期类型:日期格式.所占存储空间.日期范围 比较. 日期类型    ...

  3. ABAP基本数据类型、通用类型

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  4. MySQL数据库数据类型之集合类型SET测试总结

    MySQL数据库提供针对字符串存储的一种特殊数据类型:集合类型SET,这种数据类型可以给予我们更多提高性能.降低存储容量和降低程序代码理解的技巧,前面介绍了首先介绍了四种数据类型的特性总结,其后又分别 ...

  5. Delphi 基本数据类型列表 高级数据类型列表 字符类型查询列表清单

    原文:Delphi 基本数据类型列表 高级数据类型列表 字符类型查询列表清单 长长的列表文字类型文件 分类 范围 字节 备注 简单类型 序数 整数 Integer -2147483648 .. 214 ...

  6. MySQL (二)-- 数据类型(列类型)、数值类型、 小数类型、 时间日期类型、 字符串类型 、 MySQL记录长度、列属性

    1 数据类型(列类型) 所谓的数据类型:对数据进行统一的分类,从系统的角度出发是为了能够使用统一的方式进行管理,更好的利用有限的空间. SQL中将数据类型分成了三大类: 2 数值类型 数值类型数据:都 ...

  7. redis数据类型-散列类型

    Redis数据类型 散列类型 Redis是采用字典结构以键值对的形式存储数据的,而散列类型(hash)的键值也是一种字典结构,其存储了字段(field)和字段值的映射,但字段值只能是字符串,不支持其他 ...

  8. Mysql 数据类型、约束类型

    mysql数据类型 MySQL中定义数据字段的类型对你数据库的优化是非常重要的. MySQL支持多种类型,大致可以分为三类:数值.日期/时间和字符串(字符)类型.   数值类型 MySQL支持所有标准 ...

  9. Java基础之基本数据类型的包装类型

    Java的基本数据类型的包装数据类型有多种: int Integer,short Short,boolean Boolean,float Float,double Double等等. Java包装类数 ...

随机推荐

  1. 从零开始的Python学习Episode 19——面向对象(2)

    面向对象之继承 继承是一种创建新类的方式,新建的类可以继承一个或多个父类(python支持多继承),父类又可称 为基类或超类,新建的类称为派生类或子类. 子类会“”遗传”父类的属性,从而解决代码重用问 ...

  2. VMware启动Centos时出现错误Cannot open the disk 'xxxxxxx.vmdk' or one of the snapshot disks it depends on. .

    今天拔装虚拟机的硬盘的时候,没有关掉虚拟机,导致虚拟打开的时候出现:Cannot open the disk 'xxxxxxx.vmdk' or one of the snapshot disks i ...

  3. PHP 预定义变量

    1.$_SERVER <?php $a=$_SERVER; var_dump($a); ?> 2.$_FILES <?php if($_FILES){ echo "< ...

  4. JS特效@缓动框架封装及应用

    | 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.变量CSS样式属性获取/赋值方法 给属性赋值:(既能获取又能赋值) 1)div.style.width 单个赋值:点语法,这个方法比较固定 ...

  5. 20162328蔡文琛 week10 大二

    20162328 2017-2018-1 <程序设计与数据结构>第十周学习总结 教材学习内容总结 理解图与有向图.无向图 理解带权图 会应用带权图 理解图的广度优先遍历和深度优先遍历 掌握 ...

  6. C#窗体随机四则运算 (第四次作业)

    ---恢复内容开始--- 增量内容:1)处理用户的错误输入,比如输入字母或符号等,处理除法运算中分母为0的情况,处理结果为负数的情况,保证是小学水平不出现负数,比如不能出现5-8=-3这种情况:2)用 ...

  7. Leetcode题库——33.搜索旋转排序数组

    @author: ZZQ @software: PyCharm @file: search.py @time: 2018/11/12 18:12 要求:假设按照升序排序的数组在预先未知的某个点上进行了 ...

  8. model类的构造部分属性的对象 产生的json

    在 action方法里, 产生一个对象,可能会是默认的全属性对象,那么在输出的 json就又所有 都出现了. 只是其他的属性全部是 null 那么 在 json里面配上 <!-- json 不产 ...

  9. Internet History, Technology and Security (Week5.2)

    Week5 Now, I want to make it real clear that, when I give you a 15 minute video of an amazing invent ...

  10. CPU结合CS、IP寄存器进行执行程序

    上一篇介绍了CS.IP两个寄存器内容,当我们运行一个可执行文件时,我们需要另外一个程序来将这个可执行文件加载到内存当中,关于这个加载可执行文件的程序,我们在这里不管他,点一下即可,一般是通过操作系统的 ...