Go基础篇 - 初级(1) - 变量

变量

–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 整数数据类型

类型有无符号占用存储空间范围
int81字节-128 ~ 127
int162字节-2(15) ~ 2(15) - 1
int324字节-2(31) ~ 2(31) - 1
int648字节-2(63) ~ 2(63) - 1
uint81字节0 ~ 255
uint162字节0 ~ 2(16) - 1
uint324字节0 ~ 2(32) - 1
uint648字节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 浮点数数据类型

类 型占用存储空间表数范围
单精度float324字节-3.403E38 ~ 3.403E38
双精度float648字节-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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值