一、为什么需要变量
- 一个程序就是一个世界
- 变量是程序的基本组成单位
二、变量的介绍
1)概念:相当于一个数据存储空间的表示(门牌号,通过变量名可以访问到变量)
2)变量使用步骤
- 声明
- 赋值
- 使用(不使用程序会报错)
三、变量快速入门案例
package main
import "fmt"
func main(){
var i int
i=10
fmt.Println(i)
}
四、变量使用注意事项
1)变量表示内存中的一个存储区域
2)该区域有名称和类型,即变量名和数据类型
3)使用变量的三种方式
- 声明不赋值默认
funct main(){
var i int
fmt.Println("i=",i)
}
- 类型推导
func main(){
var num=10.12
fmt.Println("num=",num)
}
- 省var,:=表声明+定义
func main{
name:="tom"
fmt.Println("name=",name)
}
4)多变量声明
- 局部变量
m1,m2,m3:="tom",23,34
fmt.Println(m1,m2,m3)
- 全局变量
var j1=12
var j2="jack"
var j3=12.3
// var (
// j1=12
// j2="jack"
// j3=90.8
// )
5)同一类型范围可以不断变化
6)变量在同一作用域 (函数或代码) 不能重名
7)变量=变量名+值=数据类型
8)默认值:int,小数=0;String=空串
五、变量的声明,初始化和赋值
六、+号的使用
1)数值,加法
2)字符,字符
var a=12
var j=23
var k=a+j
var str="hello "
var str1="world"
fmt.Println(k)
fmt.Println(str+str1)
注意:字符和数值不能相加
七、数据类型的基本介绍
与其他语言相差很大
八、数据类型
1.整数类型
1)整数的各个类型
2)使用细节
- 整数类型分有符号-int和无符号-uint
- 默认int
- 保小不保大,尽量使用占用空间小的数据结构例外:类型不清楚的
- 查看变量字节大小和数据类型 %T(type)和unsafe.Sizeof()
var i int64 =100
fmt.Printf("i的数据类型%T,占用字节数%d",i,unsafe.sizeof(i))
2.小数类型/浮点型
1)案例
var price float32=12.123
fmt.Println("price=",price)
2)分类
- 浮点数=符号位+指数位+尾数位
- 尾部数据可能丢失
var num2 float32=0.00000384925616154
var num3 float64=0.00000384925616154
fmt.Println("num2=",num2,"num3=",num3)
3)细节
- 浮点类型不受OS影响(int受OS影响)
- 通常用float64,更精确
- 默认float64注意没有double类型
- 两种表示
3.字符类型
1)介绍:Golang无字符类型,用byte保存传统字符串用字符连接,Golang由字节组成
2)案例
package main
import "fmt"
func main(){
var c1 byte='a'
c2:='0'
fmt.Println(c1)
fmt.Printf("c2的数据类型%T\n",c2)
var c3 int ='北'
c4:='北'
fmt.Printf("c3:%c c4的数据类型%T",c3,c4)
}
- ASCII表中的字符可以保存到byte中
- 码值超过255,用int保存
- 字符输出格式化,fmt.Prinf("%c")
- 默认int32
3)细节
- 单引号‘’
- Golang用UTF-8编码英文-1字节,中文-3字节
- 字符本质整数,可以给变量符整数,格式化用%c,输出对用UNICode字符
- 字符类型可以运算,相当整数
- 4)字符本质
4.布尔类型
1) 案例
package main
import (
"fmt"
"unsafe"
)
func main(){
b:=false
fmt.Println("b=",b)
fmt.Println("b的占用空间=",unsafe.Sizeof(b))
}
2)细节
- bool类型,只允许取true和false
- 占用一个字节
- 适用于逻辑运算
5.String类型
1)介绍:字节连接而成,用UTF-8标识文本
2)案例演示
func main(){
var address string = "北京欢迎你"
fmt.Println(address)
}
3)注意
-
一旦赋值,字符串不能修改
-
两种形式
package main
import "fmt"
func main(){
var address string = "北京欢迎你"
fmt.Println(address)
str1:="abc\nabc"
fmt.Println(str1)
str2:=`
package main
import (
"fmt"
"unsafe"
)
func main(){
b:=false
fmt.Println("b=",b)
fmt.Println("b的占用空间=",unsafe.Sizeof(b))
}
`
fmt.Println(str2)
}
- 拼接方式太长可以分行写,+号保留在上一行
fmt.Println(str2)
str3:="hello"+"world"+"hello"+"world"+"hello"+"world"+"hello"+
"world"+"hello"+"world"+"hello"+"world"+"hello"+"world"+
"hello"+"world"+"hello"+"world"+"hello"+"world"
fmt.Println(str3)
九、基本数据类型的默认值
1)介绍:没赋值有默认值,默认值又叫零值
2)注意:布尔默认为false,%v按照变量的值输出
十、基本数据类型的相互转换
1)内容:不同类型都得显式转换,不能自动转换
2)基本语法
3)演示
package main
import "fmt"
func main(){
var i int32=100
var n1 float32=float32(i)
var n2 int8=int8(i)
var n3 int64=int64(i)//低精度->高精度
fmt.Printf("i=%v n1=%v n2=%v n3=%v",i,n1,n2,n3)
}
4)注意
- 被转换的是变量的数据值,变量本身数据类型没有变化
- 高精度到低精度,编译正确,结果按溢出处理,转换考虑范围
5)练习
十一、基本数据类型和String的转换
1)基本数据类型转string类型
func main(){
var num1 int =99
var num2 float64 =23.234
var b bool = true
var myChar byte ='h'
var str string
str=fmt.Sprintf("%d",num1)
fmt.Printf("str=%v\n",str)
str=fmt.Sprintf("%f",num2)
fmt.Printf("str=%v\n",str)
str=fmt.Sprintf("%t",b)
fmt.Printf("str=%q\n",str)
str=fmt.Sprintf("%c",myChar)
fmt.Printf("str=%v\n",str)
str=strconv.FormatInt(int64(num1),10)//必须是int64
fmt.Printf("str=%v\n",str)
//'f'格式,10:小数保留 64:double64
str=strconv.FormatFloat(num2,'f',10,64)
fmt.Printf("str=%v\n",str)
str=strconv.FormatBool(b)
fmt.Printf("str=%q\n",str)
//传入int,如果是int64,转成int(num1)
str=strconv.FormatItoa(num1)
fmt.Printf("str=%q",num)
2)string类型转基本数据类型
注意:go语言函数返回值有两个时,只想要其中一个,_表忽略
func main(){
var str string = "true"
var b bool
b,_=strconv.ParseBool(str)
fmt.Printf("b type %T b=%v\n",b,b)
var str1="235452"
var n int64
n,_=strconv.ParseInt(str1,10,64)
fmt.Printf("n=%v\n",n)
var str2="123.45"
var f float64
f,_=strconv.ParseFloat(str2,64)
fmt.Printf("f=%v\n",f)
}
十二、指针
1)基本介绍:
-
值类型
-
获取变量的值,用&num
-
指针类型,指针变量存的是一个地址,地址所指向的空间才是值
-
获取指针所指向的值,*ptr
2)案例演示
func main(){
var num int =9
fmt.Printf("num address=%v\n",&num)
var ptr *int
ptr=&num
*ptr=10
fmt.Println("num=",num)
}
3)练习
4)细节
- 值引用,都有对应的指针类型
- 值类型:int系列,float系列,bool,string,数组和结构体struct
十三、值类型和引用类型
1)值类型:变量直接存储值,内存在栈中分配
2)引用类型:变量存储地址,在堆区分配,没有变量引用这个地址,地址对应的数据空间就成为垃圾,由GC回收
3)内存栈区和堆区示意图
十四、标识符,保留关键字,预定义表示符
标识符
1)概念:
2)命名规则
3)案例
4)注意事项
- 包名和目录保存一致
- 变量,常量,函数名,采用驼峰法xxxYyyyyZzzz
- 变量名,函数名,常量名首字母大写共有,首字母小写私有,无public ,private等关键字
系统保留关键字
系统的预定义标识符
总结
提示:这里对文章进行总结:
本文仅仅简单介绍了Golang变量的使用,此篇是通过b站尚硅谷Golang视频的学习做的笔记。