作用域
universe block > package block > file block > function block > inner block
绍兴网站建设公司创新互联,绍兴网站设计制作,有大型网站制作公司丰富经验。已为绍兴上千提供企业网站建设服务。企业网站搭建\
成都外贸网站建设要多少钱,请找那个售后服务好的
绍兴做网站的公司定做!
universe block
预声明的标识符。Go文件全部使用
1 2 3 4 5 6 7 8
| Types: bool byte complex64 complex128 error float32 float64 int int8 int16 int32 int64 rune string uint uint8 uint16 uint32 uint64 uintptr Constants: true false iota Zero value: nil Functions: append cap close complex copy delete imag len make new panic print println real recover
|
package block
例子 fmt下面的函数println 就是package scope
1 2 3 4 5 6 7 8 9 10
| package main
import "fmt"
var x int=5
func main(){
fmt.Println("mainx:",x) }
|
外部变量是package block:
下面的代码有效:
1 2 3 4 5 6 7 8 9 10
| // f1.go package main
var x int // f2.go package main
func f() { fmt.Println(x) }
|
调用另一个包中的函数和属性:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| //testdemo/destdemo.go package testdemo
import "fmt"
var Birth uint = 23 func Haha(){ fmt.Println("lalalal") } //------------------------------------- package main // main/scope.go
import ( "testdemo" "fmt" )
func main(){
testdemo.Haha() fmt.Println(testdemo.Birth) }
|
权限
如果要让包中的属性和变量被外部包调用,必须要首字母大写。
file block
下面的代码无效,因为import 是file block 。不能跨文件
1 2 3 4 5 6 7 8 9 10
| // f1.go package main
import "fmt" // f2.go 无效 package main
func f() { fmt.Println("Hello World") }
|
function block
函数体内部的变量是function block,注意前后顺序,同时不能跨函数使用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| func main() { fmt.Println("Hello World") x := 5 fmt.Println(x) }
//下面的代码无效: func main() { fmt.Println("Hello World")
fmt.Println(x) x := 5 }
//下面的代码无效2: func main() { fmt.Println("Hello World") x := 5 fmt.Println(x) } // func test(){ fmt.Println(x) }
|
函数内部变量与外部变量重名
就近原则
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| package main
import "fmt"
var x int=5
func test(){
var x int = 99; x = 100; fmt.Println("testx",x) //fmt.Println("testy",y)
}
|
inner block
在花括号中声明的变量只在花括号中有效。
1 2 3 4 5 6 7 8
| //内部变量 func main() { fmt.Println("Hello World") // x is out of scope { // x is out of scope x := 5 // x is in scope fmt.Println(x) // x is in scope } // x is out of scope again }
|
下面代码无效:
1 2 3 4 5 6
| func main() { { x := 5 } fmt.Println(x) }
|
参考资料:
Variables
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
当前标题:go语言渐入佳境[4]-scope作用域-创新互联
转载注明:
http://cdkjz.cn/article/dsishi.html