Go变量和变量类型

go中定义变量和变量类型:

变量类型

Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。

整数类型

类型 有无符号 占用存储空间 表示范围 备注
int8 1字节 -2**7~2**7-1
int16 2字节 -2**15~2**15-1
int32 4字节 -2**31~2**31-1
int64 8,字节 -2**63~2**63-1
uint8 1字节 0~2**8-1
uint16 2字节 0~2**16-1
uint32 4字节 0~2**32-1
uint64 8字节 0~2**64-1
int 32位系统4字节
64位系统8字节
-2**31~2**31-1
-2**63~2**63-1
uint 32位系统4字节
64位系统8字节
0~2**32-1
0~2**64-1
rune 与int32一样 -2**31~2**31-1 等价int32
表示一个unicode码
byte 与uint8一样 0~2**8-1 当要存储字符时
使用byte

整型的使用细节:

  1. golang整数类型分为:有符号无符号intuint的大小和系统有关;
  2. 如果不指定,整数型数字默认int64
  3. golang使用整数类型时,遵从保小不保大原则,即在保证程序正常运行的情况下,尽量使用占用空间小的数据类型;

浮点类型

类型 占用存储空间 表示范围
单精度float32 4字节 -3.403E38~3.403E38
双精度float64 8字节 -1.798E308~1.798E308

说明:

  • 浮点数在机器中存在的形式:浮点数=符号位+指数位+尾数位(浮点数都是有符号的)11110000111.111111111111111111000
  • 尾数部分可能丢失,造成精度损失;
  • 浮点型的存储分为三个部分:符号位+指数位+尾数位;

浮点型的使用细节:

  • golang浮点类型有固定的范围和字段长度,不受操作系统的影响;
  • 默认为float64类别;
  • 浮点型常用两种形式表示:
    • 十进制:5.12、.512
    • 科学记数法形式:5.1234E2、5.1234E-2
  • 通常使用float64,它精度更高;
  • 浮点小数默认float64

字符类型

字符串是一串固定长度的字符连接起来的字符序列。golang没有专门的存储字符类型,如果要存储单个字符,用byte来保存。go的字符串是由单个字节连接起来的,它与传统的字符串是由字符组成的不同。

当我们直接输出字符c1,,得到的是它的ASCII值:97。要用格式化输出:fmt.Printf("%c",c1)。而当我们要存储中文时,此时不能够用byte类型了,即ASCII值大于255时,会显示溢出,我们要用int来存储:

补:格式化输出代表含义

  • %d:输出整型;
  • %f:输出浮点型;
  • %c:输出字符型;
  • %v:输出原变量值;
  • %T:输出变量的数据类型;
  • %t:输出布尔值:
  • %q:输出带双引号的字符串)

字符类型使用细节:(再也不用担忧编码的问题了,所有的编码都是utf-8)

  • 字符常量使用单引号括起来的单个字符;
  • go中允许使用转义字符\来将其后的字符转变为特殊字符型常量,例如var c int = '\n'
  • 字符使用utf-8编码;
  • go中,字符的本质是一个整数,直接输出时,会输出它对应的UTF-8编码的值;
  • 可以直接给变量赋予某个数字,然后格式化输出%c,会输出该数字对应的unicode字符
  • 字符类型是可以进行运算的,相当于一个整数,因为它都对应unicode码

布尔类型

只允许取两个值:truefalse;占用1个字节;主要用在逻辑运算;

字符串类型

go的字符串是由字节连接而成;

字符串的使用细节:

  1. go语言的字符串的字节使用utf-8编码;
  2. 与python一样,一旦字符串赋值了,就不能被更改;
  3. 两种表示形式
    • 双引号,会识别转义字符;
    • 反引号,以字符串的原生形式输出,包括换行和特殊字符,可以实现防止攻击,输出源代码等
  4. 字符串的拼接,当我们要拼接多行字符串时,要将加号留在每行末尾:(注意单个字符进行拼接是指对unicode值进行相加)

基本数据类型的默认值

  • 整型:0
  • 浮点型:0
  • 字符串:””
  • 布尔类型:false

基本数据类型之间的转换

golang和java、c不同,Go在不同类型变量之间赋值需要显示转换,也就是golang中数据类型不能自动转换

基本语法:

T(v),即将变量v转换成T数据类型

整数型之间的转换:

例如:

var i int8 = 10;
var n1 int64 = int64(i)
  • 数据类型转换可以从范围小–>范围大,范围大–>范围小;
  • 被转换的是变量存储的数据(即值),变量本身的数据类型并没有变化;
  • 在转换中,比如将int64转成int8,编译时不会报错,只是转换的结果是按溢出处理,和我们希望的结果不一样;
基本数据类型和string之间的转换
  1. fmt.Sprintf(“%参数”,表达式):参数和表达式的类型要匹配;结果返回转换后的字符串;
  2. 使用strconv

注意:要确保string类型要能够转换成有效的数据,即hello不能转换成布尔值、整型、浮点型

定义变量

声明变量一般用关键字var
代码如下:

package main
import "fmt"
func main() {
    var (
        a = 6
        c = 3006451967594537643
        f = "hello"
        h = -1346582948651325854
        i = -64325.94625184676581646
        )
    var e bool  = true
    var int b = -18
    var g = "青岛啤酒"
    d := 3.1415926
    fmt.Printf("变量a的类型是:%T \t 值是:%v \n", a, a)
    fmt.Printf("变量b的类型是:%T \t 值是:%v \n", b, b)
    fmt.Printf("变量c的类型是:%T \t 值是:%v \n", c, c)
    fmt.Printf("变量d的类型是:%T \t 值是:%v \n", d, d)
    fmt.Printf("变量e的类型是:%T \t 值是:%v \n", e, e)
    fmt.Printf("变量f的类型是:%T \t 值是:%v \n", f, f)
    fmt.Printf("变量g的类型是:%T \t 值是:%v \n", g, g)
    fmt.Printf("变量h的类型是:%T \t 值是:%v \n", h, h)
}

输出如下:
变量a的类型是:int 值是:6
变量b的类型是:int 值是:-18
变量c的类型是:int 值是:3006451967594537643
变量d的类型是:float64 值是:3.1415926
变量e的类型是:bool 值是:true
变量f的类型是:string 值是:hello
变量g的类型是:string 值是:青岛啤酒
变量h的类型是:int 值是:-1346582948651325854
变量i的类型是:float64 值是:-64325.94625184676


  转载请注明: So Cold Go变量和变量类型

 上一篇
解决go get下载包失败问题 解决go get下载包失败问题
解决go get下载包失败问题由于某些不可抗力的原因,国内使用go get命令安装包时会经常会出现timeout的问题。本文介绍几个常用的解决办法。 从github克隆golang在github上建立了一个镜像库,如https://gith
2020-03-03
下一篇 
Go流程控制 Go流程控制
Go语言基础之流程控制流程控制是每种编程语言控制逻辑走向和执行次序的重要部分,流程控制可以说是一门语言的“经脉”。 Go语言中最常用的流程控制有if和for,而switch和goto主要是为了简化代码、降低重复代码而生的结构,属于扩展类的流
2020-03-03
  目录