一、为什么需要变量
  • 一个程序就是一个世界
  • 变量是程序的基本组成单位
    在这里插入图片描述

二、变量的介绍

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视频的学习做的笔记。