变量
–1 变量声明方式
1)指定变量类型,声明若不赋值,使用默认值
func main(){
//定义变量 声明变量
var i int
//给变量i 复制
i = 10
//使用变量
fmt.Println("i=",i);
}
2)根据值自行判断变量类型(类型推导)
var num = 10.11
fmt.Println("num=", num);
3)省略var,注意左侧的变量不应该是已经声明过的,否则会导致编译错误;
另外此形式声明,只能再函数内部,不能在函数外部
name := "tom"
fmt.Println("name=", name)
4) 多变量声明,一次性声明多个变量
n1,name,n3 := 100,"tom~",88
fmt.Println("n1=",n1,"name=",name,"n3",n3)
5)在go函数外定义变量就是全局变量
//定义全局变量
var n1 = 100
var n2 = 200
var name = "jack"
//上面的声明方式,也可以改成一次性声明
var(
n3 = 300
n4 = 900
name2 = "mary"
)
6)错误代码
var i int = 10
i = 20
i = 30
i = 1.2 // 错误,变量i类型为int,不能再变为小数类型
var i int = 10
i := 10 //错误,变量在同一个作用域内不能重名
–2 整数数据类型
类型 | 有无符号 | 占用存储空间 | 范围 |
---|---|---|---|
int8 | 有 | 1字节 | -128 ~ 127 |
int16 | 有 | 2字节 | -2(15) ~ 2(15) - 1 |
int32 | 有 | 4字节 | -2(31) ~ 2(31) - 1 |
int64 | 有 | 8字节 | -2(63) ~ 2(63) - 1 |
uint8 | 无 | 1字节 | 0 ~ 255 |
uint16 | 无 | 2字节 | 0 ~ 2(16) - 1 |
uint32 | 无 | 4字节 | 0 ~ 2(32) - 1 |
uint64 | 无 | 8字节 | 0 ~ 2(64) - 1 |
byte | 无 | 与uint8等价 | 0 ~ 255 当存储字符时选用byte |
rune | 有 | 与int32等价 | 0 ~ 255 等价int32,表示一个Unitcode码 |
var i int8 = 127
fmt.Println("i = ",i)
var j int8 = 128
fmt.Println("j = ", j) //报错,溢出
var k int8 = -129
fmt.Println("k = ", k) //报错,溢出
var a uint8 = 255
fmt.Println("a = ", a)
var b uint8 = 256
fmt.Println("b = ", b) //报错,溢出
var c uint8 = -1
fmt.Println("c = ", c) //报错,溢出
–3 变量的字节大小和数据类型
var a int64 = 20
fmt.Printf("a 的数据类型为 %T, 大小为%d\n", a , unsafe.Sizeof(a))
var i = 10
fmt.Printf("i 的数据类型为 %T, 大小为%d", i , unsafe.Sizeof(i))
//int64 和 int 都占据8个字节
// int的大小是和操作系统位数相关的,如果是32位操作系统,int类型的大小就是4字节。如果是64位操作系统,int类型的大小就是8个字节。uint同理
–4 浮点数数据类型
类 型 | 占用存储空间 | 表数范围 |
---|---|---|
单精度float32 | 4字节 | -3.403E38 ~ 3.403E38 |
双精度float64 | 8字节 | -1.798E308 ~ 1.798E308 |
1)尾数部分可能丢失精度,造成精度损失
var num3 float32 = -123.0000901
var num4 float64 = -123.0000901
fmt.Println("num3=", num3,"num4=", num4)
打印
num3= -123.00009 num4= -123.0000901
–5 字符类型
1)说明
-
Golang没H有专门的字符类型,如果要存储单个字符(字母),一般使用byte来保存
-
Go的字符串是由单个字节连接起来的
-
如果保存的字符在ASCII表中,比如[0-9,a-z,A-Z]直接可以保存到byte;如果保存的字符对应码值大于255,考虑使用int类型保存
-
字符类型是可以进行运算的,相当于一个整数,因为它有对应的Unicode码
-
Go语言的字符使用UTF-8编码,英文字母占一个字节,汉字占三个字节
var c1 byte = 'a'
var c2 byte = 'o'
//当我们直接输出byte值,就是输出了对应字符的码值
fmt.Println("c1 = ", c1)
fmt.Println("c2 = ", c2)
//如果我们希望输出对应字符,需要使用格式化输出
fmt.Printf("c1=%c c2=%c\n", c1 ,c2)
//overflow溢出
var c3 int ='北'
fmt.Println("c3=%c c3对应码值=%d",c3 , c3)
//直接给某个变量赋一个数字,然后格式化输出,会输出数字对应的unicode字符
var c4 int = 22269
fmt.Printf("c4 = %c\n", c4)
2)字符类型本质讨论
字符型 存储到计算机中,需要将字符对应的码值找出
存储 : 字符-->对应码值-->二进制-->存储
读取 : 二进制-->码值-->字符-->读取
–6 布尔类型
布尔类型占一个字节
–7 String类型
-
字符串就是一串固定长度的字符连接起来的字符序列
-
Go语言的字符串的字节使用UTF-8编码表示Unicode文本,这样Golan统一使用UTF-8编码,中文乱码问题不会再困扰程序员。
-
字符串一旦赋值了,字符串就不能修改了;字符串是不可变的
var str = "hello"
str[0] = 'a' //错误
str = "world" //换地址
字符串两种表示形式
1)双引号,可以识别转义字符
str2 := "abc\naa"
2)反引号,以字符串原生形式输出,包括换行和特殊字符,可以实现防止攻击、输出源代码等效果
str3 := `
aa
/n
\n
//注释
`
fmt.Println(str3)
–8 基本数据类型默认值
数据类型 | 默认值 |
---|---|
整型 | 0 |
浮点型 | 0 |
字符串 | “” |
布尔类型 | false |
var a int
var b float32
var c float64
var isMarried bool
var name string
fmt.Printf("a=%d, b=%v, c=%v ,isMarried=%v ,name=%v",ab,c,isMarried,name)
//%v表示相应值的默认格式
-
整型默认声明为int型
-
浮点数都是有符号的
-
浮点数默认数据类型为float64类型
var num = 1.1
fmt.Printf("num5的数据类型是%T\n",num5)