zoukankan      html  css  js  c++  java
  • Go语言趣学指南lesson4

    变量作用域

    本章学习目标

    1、知悉变量作用域的好处

    2、学会更简洁的方法声明变量

    3、了解for、if和switch是如何和变量作用域交互的

    4、学会如何控制作用域的范围

    什么是作用域

    • 在程序运行过程中,很多变量都会在很短暂的使用后被丢弃,这就是作用域的作用。

    • 当变量被声明后,它就进入了作用域(变量就变得可见了)

      • 只要在作用域里,就可以访问
      • 否则,访问它就会报错
    • 变量声明的位置,决定了它的作用域

    • 作用域的好处?

      • 可以在不通的作用域内使用相同的变量名
    • 在Go里面,作用域的范围是{}之间的部分

    • 例子(4.1)

      package main
      
      import (
      	"fmt"
      	"math/rand"
      )
      
      func main() {
      	var count = 0 //count变量在function作用域里
      
      	for count < 10 {
      		var num = rand.Intn(10) + 1 //num变量在for作用域里
      		fmt.Println(num)
      		count++
      	}
      }
      
      
      执行结果:
      
      2
      8
      8
      10
      2
      9
      6
      1
      7
      1
      

    短声明

    简单声明为var关键字提供了另一种备选语法,

    var count = 10 和count := 10 等价,简短声明还能用在一些无法使用var关键字的地方

    例子(4.2)

    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	var count = 0
    	for count := 10; count > 0; count-- {
    		fmt.Println(count) //随着循环结束这个count变量会释放掉
    	}
    	fmt.Println(count) //count变量仍在function作用域中
    }
    
    
    执行结果:
    
    10
    9
    8
    7
    6
    5
    4
    3
    2
    1
    0
    

    作用域的范围

    例子(4.3)

    package main
    
    import (
    	"fmt"
    	"math/rand"
    )
    
    var era = "AD" //era变量在整个包都是可用的
    
    func main() {
    	year := 2018 //era、year变量都处于作用域之内
    	switch month := rand.Intn(12) + 1; month { //era、year、month变量都处于作用域之内
    	case 2:
    		day := rand.Intn(28) + 1 //era、year、month、day变量都处于作用域之内
    		fmt.Println(era, year, month, day)
    	case 4, 6, 9, 11:
    		day := rand.Intn(30) + 1 //era、year、month变量都处于作用域之内,这个day变量和第一个day变量不在同一个作用域
    		fmt.Println(era, year, month, day)
    	default:
    		day := rand.Intn(31) + 1 //era、year、month变量都处于作用域之内,这个day变量和第一个day变量不在同一个作用域
    		fmt.Println(era, year, month, day)
    	} //month 和day变量不在处于作用域中
    } // year变量不在处于作用域中
    
    • era变量位于包作用域中,它对整个包都是可见的
    • 包作用域在声明时不能用简短声明
  • 相关阅读:
    HDU 2141.Can you find it?-二分
    POJ 3258.River Hopscotch-二分
    HDU 1213.How Many Tables-并查集
    HDU 1232.畅通工程-并查集
    hdu 5701 中位数计数 思路题
    codeforces 354 div2 C Vasya and String 前缀和
    codeforces 11 B.Jumping Jack 想法题
    hdu 2204 Eddy's爱好 容斥原理
    xtu 1242 Yada Number 容斥原理
    codeforces 300 div2 B.Pasha and Phone 容斥原理
  • 原文地址:https://www.cnblogs.com/walker1024/p/14153154.html
Copyright © 2011-2022 走看看