变量

1、变量

2、全局变量

1、全局变量声明

  • 定义在{ }外面的是全局变量
  • 只允许全局变量在声明时赋值,不允许全局变量声明后再改变全局变量的值
//不报错
var c chan bool=make(chan bool)

//报错
var a chan bool
a=make(chan bool)

func main(){
	go eat(a)
	fmt.Println(<-a)
}

func eat(){
	fmt.Println("eat")
	a<- true
}

3、局部变量

  1. 定义在{ }里面的变量时局部变量,只能在{ }里面有效
  2. 执行到定义的那句话,开始分配内存空间,离开作用域自动进行释放

4、不同作用域中,同名变量

  1. 不同的作用域,允许定义同名的变量
  2. 使用变量的原则,就近原则,如果局部变量没有,就去全局变量中找

5、make和new的区别

1、make

  1. make 被用来分配引用类型变量的堆内存,从而初始化该变量,只有slice,map,channel这3种
  2. make还是返回的引用类型变量本身;
  3. 引用类型变量,使用var声明后,必须使用make进行初始化,不然没有内存,不能赋值

2、new

  1. new 被用来分配除了引用类型以外的任意类型变量的堆内存:int, string, 数组等
  2. new返回的是指向类型的指针
  3. new把内存置为零
//使用new关键字创建一个数组
func main() {
a := new([5]int)
fmt.Println(a)
}
上一篇:Go lang simple demo


下一篇:go里面管道使用