变量与常量

变量

声明变量的一般形式是使用 var 关键字。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 方法一:声明一个变量, 默认的值是0
var a int

// 方法二:声明一个变量, 初始化一个值
var b int = 100

// 方法三:在初始化的时候,可以省去数据类型,通过值去自动匹配当前变量的数据类型
var c = 100

// 方法四:(常用的方法) 省去var关键字,使用:=,既推导数据类型又赋值
// 注: 短声明是在函数或方法内部使用, 不支持全局变量声明!!!!
e := 100

// 声明多个变量
var x, y int = 100, 200

常量

定义一个常量,使用 const 关键字。常量定义的时候就要赋值。

1
2
3
4
5
6
7
8
9
// 常量(只读属性)
const length int = 10

// const来定义枚举类型
const (
BEIJING = 0
SHANGHAI = 1
SHENZHEN = 2
)

关键字

1
2
3
4
5
break      default       func     interface   select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var

make和new的区别

new函数

内置函数 new 分配内存。该函数只接受一个参数,该参数是一个任意类型(包括自定义类型),而不是值,返回指向该类型新分配零值的指针。

使用 new 函数首先会分配内存,并设置类型零值,最后返回指向该类型新分配零值的指针。

1
2
3
4
5
6
7
8
9
10
11
package main

import (
"fmt"
)

func main() {
num := new(int)
// 打印出类型的值
fmt.Println(*num) // 0
}

make 函数

内置函数 make 只能分配和初始化类型为 slicemapchan 的对象。与 new 一样,第一个参数是类型,而不是值。与 new 不同, make 的返回类型与其参数的类型相同,而不是指向它的指针。结果取决于类型:

  • slice:size 指定长度。切片的容量等于其长度。可提供第三个参数以指定不同的容量;它不能小于长度。
  • map:为空映射分配足够的空间来容纳指定数量的元素。可以省略大小,在这种情况下,分配一个小的起始大小。
  • chan:使用指定的缓冲区容量初始化通道的缓冲区。如果为零,或者忽略了大小,则通道是无缓冲的。
1
2
3
4
5
6
7
8
// slice
a := make([]int, 2, 10)

// map
b := make(map[string]int)

// chan
c := make(chan int, 10)

new 和 make 的区别

new:为所有的类型分配内存,并初始化为零值,返回指针。

make:只能为 slicemapchan 分配内存,并初始化,返回的是类型。