变量
声明变量
只记:(只有两种声明:普通声明、初始化声明)
var
到处行- 数据类型
||
初始化 :=
只能在函数内- Go中数据类型在变量名的后面
package main //程序入口包
import (
"fmt"
"net"
)
/**
变量
*/
/*
一、声明变量
未初始化会有默认值
*/
// 1.标准格式: var 变量名 变量类型
var x int
// 2.批量格式: (注意:var(...)是小括号!!!)
var (
a int //默认:0 整数类型
b string //默认:空 字符串类型
c []float32 //默认:[] 32位浮点切片类型
d func() bool //默认:nil 将函数以变量的形式保存(返回值为布尔类型的函数) 一般用于回调函数
e struct{ //默认:{0} 结构体变量(类似Java中自定义的对象)
x int
}
)
/*
二、声明初始化变量
*/
// 1.标准格式: var 变量名 类型 = 表达式
var hp int = 100
// 2.由于编译器可以根据赋值推导出变量类型 所以: var 变量名 = 表达式
// 注意:变量会推导为默认类型 若为非默认类型则需要声明
// 如:var x = 0.17 为了保证精确度编译器会推导为float64
// 若只想要float32则需要声明: var x float32 = 0.17
var attack = 40
// 程序的入口函数(整个项目最多有一个 用go写插件时可以没有)
func main(){
// 3.短变量声明初始化: 变量名 := 表达式
// 注意:只能在函数中声明 且函数中声明的变量必须被使用到!!!
age := 10
conn,err := net.Dial("tcp","127.0.0.1:8080")
fmt.Println(age)
fmt.Printf("conn=%v;err=%v",conn,err)
}
多重赋值
不用有中间值了!!!
a := 100
b := 200
a,b = b,a
匿名变量 _
匿名变量不会被分配内存
获取不需要的返回值:
只想要err,不想用conn
_,err := net.Dial("tcp","127.0.0.1:8080")
常量
编译时对常量表达式计算求值,并在运行期间恒定不变!
常量声明
关键字const
变量初始化必须赋值
iota枚举
枚举时很有用!
注意点:
- iota在const出现时被重置为0
- const中每新增一行常量声明,iota递增一
1.枚举声明
const (
n1 = iota //0
n2 //1
n3 //2
n4 //3
)
2.使用_跳过某些值
const (
n1 = iota //0
n2 //1
_
n4 //3
)
3.iota声明中间插队
const (
n1 = iota //0
n2 = 100 //100
n3 = iota //2
n4 //3
)
const n5 = iota //0
4.多个iota定义在一行
const (
a, b = iota + 1, iota + 2 //1,2
c, d //2,3
e, f //3,4
)
定义数量级 (这里的<<表示左移操作,1<<10表示将1的二进制表示向左移10位,也就是由1变成了10000000000,也就是十进制的1024。同理2<<2表示将2的二进制表示向左移2位,也就是由10变成了1000,也就是十进制的8。)
const (
_ = iota
KB = 1 << (10 * iota)
MB = 1 << (10 * iota)
GB = 1 << (10 * iota)
TB = 1 << (10 * iota)
PB = 1 << (10 * iota)
)