基本数据类型

数值型

整数

  • 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. SSH 报错解决方法记录汇总

    SSH 密钥签名失败 情景: 使用 SSH 密钥验证身份时 报错: sign_and_send_pubkey: signing failed: agent refused operation 环境: ...

  2. 工程能力之C4模型

    概述 刚在InfoQ上看到一篇介绍C4Model的文章,觉得这个模型设计的很赞,很有指导意义,做个简单的记录. Why,为什么需要架构图? ThoughtWorks中国 文章中有几句话我觉得很有道理, ...

  3. Python 命令行解析工具 Argparse介绍

    最近在研究pathon的命令行解析工具,argparse,它是Python标准库中推荐使用的编写命令行程序的工具. 以前老是做UI程序,今天试了下命令行程序,感觉相当好,不用再花大把时间去研究界面问题 ...

  4. RN 离线包集成后需要注意的一些问题

    1.ReactNative 开发中如何去掉iOS状态栏的"Loading from..." 等淡黑色的弹框,很难看? 在 AppDelegate.h 中引入: #import &l ...

  5. 机器装多个版本php,并安装redis插件报错【已解决】

    机器原版本php5.5.3 适应新的框架安装了7.1.12 期间遇到的小问题就是安装 redis插件的时候,总报错,报错如下: Starting php-fpm [02-Jan-2019 10:15: ...

  6. Thunder——Final冲刺中间产物

    版本控制: http://www.cnblogs.com/lick468/p/7994015.html 软件功能说明书: http://www.cnblogs.com/szjzsd/p/7979565 ...

  7. 团队项目之开题scrum meeting

    scrum meeting 会议记 一.会议要点: 1.确定成员角色: 2.讨论关于项目的疑问: 3.制定一周内成员任务. 二.具体会议内容: 1.成员角色: PM:杨伊 Dev:徐钧鸿 刘浩然 张艺 ...

  8. Scrum Meeting 11.06

    成员 今日任务 明日计划 用时 徐越 学习ListView+simpleAdapter,actionBar.阅读并修改前端代码 继续修改前端代码.完善数据库 4h 赵庶宏  构建后端数据库,进行完善 ...

  9. 一个web项目中间的团队管理

    一个web项目中间的团队管理     最近在参加一个比赛,我们选的题目是:MOOC大型网络在线课堂.这个题目是我们五个人都想做的,我们的成员都是志同道合的五个人.   作为团队的统率者:   定义规范 ...

  10. Beat(2/7)

    目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:beta冲刺(2/7) 团队部分 后敬甲(组长) 过去两天完成了哪些任务 整理博客 做了点商家数据表格 接下来的计划 做 ...