package main
import "fmt"
func main(){
var i int//1定义变量
i=10 //2给变量赋值
fmt.Printf("i=%d",i)//3使用变量
}
1.3变量使用注意事项
(1)变量表示内存中的一个存储区域,该区域有自己的名称和类型;
(2)Golang变量使用的三种方式:
①指定变量类型,声明后若不赋值,使用默认值
②根据值自行判断变量类型
③省略var,注意:=左边的变量不能是已经声明的,否则会导致编译报错
(3)Golang中可以一次性声明多个变量;
例:
package main
import "fmt"
func main(){
name ,class,age:="jack","软工1班",19
fmt.Printf("name=%v,class=%v,age=%v",name,class,age)
}
如何一次性声明多个全局变量:
package main
import "fmt"
//定义全局变量
var a int =5
var b float32=3.6
var c string="csdn"
//一次性声明多个全局变量
var (
d=5
e=7
f="big"
)
func main(){
name ,class,age:="jack","软工1班",19
fmt.Printf("name=%v,class=%v,age=%v",name,class,age)
}
(4)变量在同一个作用域不能重名;
(5)变量=变量名+值+数据类型,这是变量的三要素;
(6) 变量在声明时如果没有赋值,则会使用默认值,int为0,string默认为空串;
若声明时给变量赋值,则可以省略数据类型,例如:var n=400;
二、数据类型
2.1基本介绍
如上图,go的数据类型非常多,这里我们只讲基本数据类型,复杂数据类型在后面的文章再叙。
2.2整数类型
2.2.1基本介绍
用于存放整数值的类型
2.2.2整数的各个类型
类型
有无符号
占用存储空间
取值范围
int8
有
1byte
-128~127
int16
有
2byte
-2^15~2^15-1
int32
有
4byte
-2^31~2^31-1
int64
有
8byte
-2^63~2^63-1
uint8
无
1byte
0~255
uint16
无
2byte
0~2^16-1
uint32
无
4byte
0~2^32-1
uint64
无
8byte
0~2^64-1
2.2.3使用细节
(1)Golang的整形默认声明为int型
var n=6//n的数据类型为int
(2)在声明int型时,默认为int32类型
var n int =100//这里的int为int32
m:=200
(3)如何查看某个变量的大小和数据类型
var n int=100
fmt.Printf("n的数据类型为%T, 大小为%d字节",n,unsafe.Sizeof(n))
var str string="hello"+" csdn"
fmt.Printf("%s",str)//输出hello csdn
(4)当字符串太长时,可以将其分成多行,但+号需留在上一行,即+号不能在一行的开头
var str string="hfeebnehr"+
"hegvbfiwegifvwebgvwioebgvw"+
"oegvwoegnwbeopvnwgpegvonwpegovnw"
fmt.Printf("%s",str)
2.6基本数据类型的默认值
类型
默认值
整型
0
浮点型
0
字符串
""
布尔类型
false
2.7基本数据类型之间的相互转换
2.7.1基本语法
T(v):将v转换为T类型,v为需要转换的变量,T为v转换后的的类型
例如:
var a int=10
var b float64=float64(a)
fmt.Printf("b的类型为%T,值为%f",b,b)
2.7.2使用细节
(1)在Go中,数据类型的转换可以从范围小转范围大,也可以从范围大转范围小。
(2)被转换的是变量存储的数据(即值),变量本身数据类型不变
(3)在转换中,从int64转换成int8编译不会报错,不过结果会按溢出处理
var a int32=10
var b int8
var c int8
b=int8(a)+127//编译通过,结果按溢出处理
c=int8(a)+128//编译报错,栈溢出
fmt.Printf("b的类型为%T,值为%d",b,b)
2.8基本数据类型和string间的转换
2.8.1基本数据类型转string
(1)使用Sprintf函数
用法:Sprintf("%参数",表达式)
说明:Sprintf根据参数生成格式化的字符串并返回该字符串
var n=432
var m=3.14
var str string=fmt.Sprintf("%d",n)
var str2 string=fmt.Sprintf("%f",m)
fmt.Printf("str的类型为%T,值为%s\n",str,str)
fmt.Printf("str2的类型为%T,值为%s",str2,str2)
(2)使用strconv包中的函数
var n int=444
/*
func FormatInt(i int64, base int) string
i必须为int64型,所以当不是int64型时,需类型转换
base 表示进制,范围为2~32
*/
var str string=strconv.FormatInt(int64(n),10)
fmt.Printf("str的数据类型为%T,值为%s",str,str)
/*
func FormatFloat(f float64, fmt byte, prec, bitSize int) string
fmt表示格式
prec表示精度,若fmt=='f',则prec表示数点后的位数
*/
var f float64=520.1314
var str2 string=strconv.FormatFloat(f,'f',4,64)
fmt.Printf("str2的数据类型为%T,值为%s",str2,str2)
2.8.2 string类型转基本数据类型
方法:使用strconv包中的函数
var str1 string="4315"
var str2 string="3.14159"
var n1 int64
n1, _=strconv.ParseInt(str1,10,64)
fmt.Printf("n1的数据类型为%T,值为%d\n",n1,n1)
var n2 float64
n2,_=strconv.ParseFloat(str2,64)
fmt.Printf("n2的数据类型为%T,值为%f",n2,n2)