变量
变量使用方式
- 指定变量类型,声明若不赋值,使用默认值
var i int
- 根据值自行判定变量类型
var num = 10.11
- 省略var
name := "tom"
//等价于
var name string
name = "tom"
注: **:=**左侧的变量不应该是已经声明过的,否则编译出错
多变量声明
- 方式一:相同类型
var n1,n2,n3 int
//等价于
var n1 int
var n2 int
var n3 int
- 方式二:不同类型
var n1,name,n3 = 100,"tom",888
- 方式三:类型推导
n1,name,n3 := 100,"tom",888
全局变量声明
var n1 = 100
var n2 = 200
var name = "jack"
//等价于
var(
n1 = 100
n2 = 200
n3 = "jack"
)
整形使用细节
- Go各整形类型分:有符号和无符号,int和uint的大小和系统有关
- Go的整型默认声明为int型
- 在程序中查看某个变量的数据类型和占用字节大小
var n1 = 100
fmt.Printf("n1 的类型 %T,n1占用的字节数是 %d",n1,unsafe.Sizeof(n1))
- Go程序在保证程序正常运行下,尽量使用占用空间下的数据类型
- bit:计算机中最小的存储单位。byte:计算机中基本存储单元
浮点型使用细节
- 浮点数在机器中存放形式:浮点数=符号数+指数位+尾数位
- 尾数部分可能丢失,造成精度损失
- Go浮点类型有固定的范围和字段长度,不受OS影响
- Go浮点类型默认声明为float64
- Go浮点类型支持科学计数法
num :=2.1234e2// 5.1234 * 10的2次方
num :=2.1234E2// 5.1234 * 10的2次方
num :=2.1234E-2// 5.1234 / 10的2次方
- 通常使用float64类型
字符类型使用细节
Go中没有特定的字符类型,一般用byte类型
当直接输出byte值,就是输出了的对应的字符的码值
如果需要输出对应字符,需要格式化输出
var c1 byte = 'a'
var c2 byte = '0'
fmt.Printf("c1=%c,c2=%c\n",c1,c2)
- 字符常量是用单引号(‘’)括起来的单个字符
var c1 byte = 'a'
var c2 int = '中'
var c3 byte = '9'
- Go中允许使用转义字符“\”来将其后的字符转变为特殊字符型常量
- Go语言的字符使用UTF-8编码 英文字母----1个字节 汉字----3个字节
- Go中,字符的本质是一个整数,直接输出时,是该字符对应的UTD-8的码值
- 可以直接给某个变量赋一个数字,然后按格式化输出时%c,会输出该数字对应的unicode字符
- 字符类型是可以进行运算的,相当于一个整数,因为它都对应有Unicode码
布尔类型使用细节
-
bool类型占用存储空间是一个字节
-
bool类型只能取true或者false
-
不可以用0或者非0代替bool类型
字符串类型使用细节
-
Go语言的字符串的字节使用UTF-8编码表示Unicode
-
字符串一旦赋值了,字符串就不能修改了:在Go中字符串是不可变的
-
字符串的两种表示方式
1.双引号,会识别转义字符
扫描二维码关注公众号,回复: 15049765 查看本文章2.反引号(``),以字符串的原生形式输出,包括换行和特殊字符,可以实现防止攻击,输出源代码等效果
-
字符串拼接方式
var str = "hello " + "world"
当拼接很长的字符串时,可以分行写(把加号写在上一行)
var str = "hello" + "world" + "hello" + "world"
数据转换使用细节
-
Go中数据类型必须强制转换,不能自动转换
-
Go中数据类型的转换可以是从表示范围小---->表示范围大,也可以表示范围大---->表示范围小
-
被转换的时变量存储的数据(即值),变量本身的数据类型并没有变化
-
在转换中,比如将int64转成int8,编译不会报错,只是转换的结果是按溢出处理,和我们希望的结果不一样
基本数据类型转String
方式一:fmt.Sprintf
fmt.Sprintf("%参数",数据)
//例子
var num1 int = 99
var num2 float64 = 23.456
var myChar byte = 'h'
var str string
str = fmt.Sprintf("%d",num1)
str = fmt.Sprintf("%f",num2)
str = fmt.Sprintf("%c",myChar)
方式二:strconv
//例子
var num1 int = 99
var num2 float64 = 23.456
var b bool = true
var str string
str = strconv.FormatInt(int64(num1),10)
str = strconv.FormatFloat(num2,'f',20,64)
str = strconv.FormatBool(b)
String转基本类型
方式一:strconv
var str string = "true"
var b bool
b,_ = strconv.ParseBool(str)
var str string = "1234590"
var n1 int
n1,_ = strconv.ParseInt(str,10,0)
注意事项:
- 在将String类型转成基本数据类型时,要确保String类型能够转成有效数据。如果将"hello"转成整数,那么Golang直接将其转成0
常量
介绍
- 常量使用const修饰
- 常量在定义的时候,必须初始化
- 常量不能修改
- 常量智能修饰bool,数值类型,string类型
注意
-
比较简洁的写法
const ( a=1 b=2 )
-
还有一种专业的写法
const( a=itoa b c ) // a=0,b=1,c=2
-
Go中没有常量必须字母大写的规范
-
仍然通过首字母的大小写来控制变量的访问范围