要点
- 变量
- 常量
- 结构体
- 强制转换
- map
- slice
- channel
- 自定义数据类型
- 命名
- 占位符
变量
命名方式
- 变量名称 变量类型 = 值
var x int = 100
var y float32 = 3.21
var z string = "HelloWolrd"
var h,g int32 = 5, 5 //h g 都必须是 int32类型
- 变量名称 = 值 自动推导变量类型
var a = 900
var b = 3.21
var c = "HelloWolrd"
- 变量名称 = 值 自动推导变量类型
var a = 900
var b = 3.21
var c = "HelloWolrd"
// 同时声明两个变量 reflect.TypeOf()得到数据类型
var m,n = 1, 0.1
fmt.Println(reflect.TypeOf(m))
fmt.Println(reflect.TypeOf(n)) // float64
- var()的形式
var (
q = 1
w = 0.2
e = "heyhey"
)
- 变量 := 值 不能在函数外定义
r := 99
// 不需要第三个变量就可以交换两个变量
t := 1
u := 2
t, u = u, t
常量
- const 变量名称 (变量类型) = 值
const x, y int = 1,3
const s = "helloworld"
- const ()
const (
a int = 1
b = 2
c // 自动复制上面的值 2
d // 2
)
fmt.Println(a,b,c,d) // 结果为 1 2 2 2
- iota 使用iota实现自增加
const (
q = 1
w = iota
e = 100
r
t = iota
y
)
fmt.Println(q,w,e,r,t,y) // 1 1 100 100 4 5 iota表示的是其所在的位置
未赋值的值和上一个值一样,如果上一个值是常量,本值也是常量,如果上一个值是iota,则本值为上一个值+1。第一个值必须被赋值,否则无法通过编译。
结构体
type Student struct{
Name string
Age int
}
使用new创建一个结构体
stu1 := new(Student) stu1.Name = "qqq" stu1.Age = 1 fmt.Println(stu1) // &{qqq 1}
使用&创建一个结构体
stu2 := &Student{"zzz", 2} fmt.Println(stu2) // &{zzz 2}
强制转换
- string 转 int数组
x := "0Abc"
fmt.Println([]int32(x)) // 输出为ASCll [48 65 98 99]
- float 转 int
y := 1.2
fmt.Println(int(y)) // 1
- 取地址
u := 123
fmt.Println(&u) // 动态地址
map
- map[key]value
m := make(map[int]string)
m[1] = "1"
m[2] = "2"
fmt.Println(m) // map[1:1 2:2]
slice
- 截取
s := []int{1,2,3,4,5,6,7,8} // 声明数组
s = s[0:6] // 截取 s[0] - s[5] 不包括 s[6]
fmt.Println(s) //[1 2 3 4 5 6]
- 截取
sl := make([]int,3, 3) //make(数据类型, Size, 最大Size) 使用make分配内存空间
sl = append(sl, 4) // 添加
fmt.Println(sl) // [0 0 0 4]
-动态分配内存
qq := 5
e := make([]int, qq)
fmt.Println(e) // [0 0 0 0 0]
channel
- make(chan 数据类型, 大小)
c := make(chan int, 5)
c <- 1
c <- 2
c <- 3
fmt.Println(<-c) // 1
fmt.Println(<-c) // 2
fmt.Println(<-c) // 3
自定义数据类型
-type 自定义名称 已有数据类型
type MyInt int
var q MyInt = 2
//var c int = q 无法通过编译
fmt.Println(q)
命名
-开头字母大写代表可以被外部包调用,公有。
-小写则代表不可以被外部包调用,私有
_占位符
- 因为若有未使用的变量(除const)则无法通过编译,所以对于一些有多个返回值的函数来说,需要占位符来替代那些我们并不需要的返回值。
x,_ = strconv.Atoi("12")