1.声明或者定义变量
2.赋值
3.使用
package main
import "fmt"
func main() {
//定义变量(主动指定类型)
var i int
//变量赋值
i = 10
//使用变量
fmt.Println("i = " , i)
}
运行可以使用命令
C:\Users\g\go\src\awesomeProject>go run 1.go
i = 10
也可以先编译再执行
C:\Users\g\go\src\awesomeProject>go build 1.go
C:\Users\g\go\src\awesomeProject>1.exe
i = 10
定义变量有三种方式
package main
import "fmt"
func main() {
//1.指定变量类型再赋值,若不赋值则使用默认值,int的默认值为0
var i int
fmt.Println("i = ",i)
//2.不定义类型让语言自行判断变量类型
var num = 111.111
fmt.Println("num = ",num)
//3.省略var定义使用 :=进行定义
//但是这个:一定不能省略
//:= 的意义相当于 var name string name = "haha"
name := "haha"
fmt.Println("name = ", name)
}
运行查看结果
C:\Users\g\go\src\awesomeProject>go run 1.go
i = 0
num = 111.111
name = haha
多变量声明
和定义变量的方式相同
1.多个变量之间使用逗号进行分割
var n1,n2,n3 int
fmt.Println(n1,n2,n3)
2.自行判断类型
var num,name,size = 111.111,"haha","big"
fmt.Println(num,name,size)
3.最后也可以使用:=的方式
num,name,size := 111.111,"haha","big"
fmt.Println(num,name,size)
变量的声明,初始化和赋值
声明:
var 变量名 数据类型
var i int
初始化变量
就是在声明变量的时候就给值
var i int = 11 //这个就是初始化
var i = 11 //也可以直接这样写 不用定义数据类型
赋值
var i int //这个时候变量i默认为0
i = 1 //这一步进行赋值操作
程序中‘+’的使用
两边都为数字的时候为加法运算
两边为字符串的时候为拼接
package main
import "fmt"
func main() {
i , j := 1 , 2 //都为数字
r := i + j
fmt.Println(r)
str1 , str2 := "hello","world" //都为字符串
str3 := str1 + str2
fmt.Println(str3)
}
运行结果
C:\Users\g\go\src\awesomeProject>go run 1.go
3
helloworld
数字类型
数字类型比较多,默认值都是 0。定义int类型时,默认根据系统类型设置取值范围,32位系统与int32的值范围相同,64位系统与int64的值范围相同。见下表:
golang的整型分:有符号和无符号分别为 int和uint
一般的整型默认声明为int型
//如何查看类型
package main
import "fmt"
func main() {
n1 := 1
fmt.Printf("n1 的类型为 %T",n1) //使用Printf做格式化输出 %T占位
}
[root@localhost demo1]# go run main.go
n1 的类型为 int
//如何在程序中查看每个变量的大小和数据
package main
import (
"fmt"
"unsafe" //额外的引入一个函数
)
func main() {
n1 := 1
fmt.Printf("n1 的类型为 %T n1的大小为%d" ,n1,unsafe.Sizeof(n1))
}
[root@localhost demo1]# go run main.go
n1 的类型为 int n1的大小为8
浮点类型
类型 | 占用空间 |
---|---|
单精度float32 | 4字节 |
双精度float64 | 8字节 |
package main
import "fmt"
func main() {
price := 123.45
fmt.Println(price)
var num1 float32 = -0.00057
var num2 float64 = -745613.4654165
fmt.Println("num1=",num1,"num2=",num2)
//尾数部分可能会丢失,造成精度损失
//所以需要精度高的用float64
var num3 float32 = -123.0000901
var num4 float64 = -123.0000901
fmt.Println("num3=",num3,"num4=",num4)
//输出num3= -123.00009 num4= -123.0000901
}
字符类型
go语言中没有专门的字符类型,如果要存储单个字符一般用byte类型保存。
go的字符串由字节组成。
package main
import "fmt"
func main() {
var c1 byte = 'a'
var c2 byte = '0'
fmt.Println(c1,c2)
//输出97 48
//输出的事码值,不是字符的样子
}
如果想直接输出可以使用格式化输出或者变量定义的时候采用其他方式
fmt.Printf("%c %c",c1,c2)
//输出a 0
或者
c1,c2 := 'a',"0"
fmt.Println("c1 = ",c1,"c2 = ",c2)
//输出a 0
布尔类型
只允许true和false
if条件控制语句会用到
for循环会用到
package main
import (
"fmt"
"unsafe"
)
func main() {
var b = false
fmt.Println(b,unsafe.Sizeof(b))
}
golang基本数据类型的转换
go的不同类型的变量之间赋值事需要显示转换,go中的数据类型不能自动转换
基本语法
数据类型(需要转换的变量)
package main
import "fmt"
func main() {
var i int32 = 100
//将int型转换成float
var n1 float32 = float32(i)
var n2 int8 = int8(i)
var n3 float64 = float64(i)
fmt.Println(i,n1,n2,n3)
//输出100 100 100 100
}
注:被转换的事变量存储的数据,变量本身的数据类型没有变化
即i的数据类型还是int32的 但是在转换中将100这个数据不断的修改类型
fmt.Printf("%T",i)
//输出为int32
基本数据类型装string
使用fmt.Sprintf(表达式)
格式化字符串并返回
package main
import "fmt"
func main() {
var num1 int = 99
var num2 float64 = 23.456
var b bool = true
var myChar byte = 'h'
var str string
str = fmt.Sprint( num1)
fmt.Printf("str type %T str = %v \n",str,str)
str = fmt.Sprint( num2)
fmt.Printf("str type %T str = %v \n",str,str)
str = fmt.Sprint( b)
fmt.Printf("str type %T str = %v \n",str,str)
str = fmt.Sprint( myChar)
fmt.Printf("str type %T str = %v \n",str,str)
}
输出为
str type string str = 99 //类型已经转变
str type string str = 23.456
str type string str = true
str type string str = 104
使用strconv的包的函数
package main
import (
"fmt"
"strconv"
)
func main() {
var num1 int = 99
var num2 float64 = 23.456
var b bool = true
var str string
str = strconv.FormatInt(int64(num1),10)
fmt.Printf("str type %T str=%q\n",str,str)
str = strconv.FormatFloat(num2,'f',10,64)
fmt.Printf("str type %T str=%q\n",str,str)
str = strconv.FormatBool(b)
fmt.Printf("str type %T str=%q\n",str,str)
}