go语言渐入佳境[4]-scope作用域-创新互联

作用域

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

  • 本文链接: https://dreamerjonson.com/2018/11/17/golang-4-scope/

  • 版权声明:本博客所有文章除特别声明外,均采用 CC BY 4.0 CN协议 许可协议。转载请注明出处!

go语言渐入佳境[4]-scope作用域

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


本文题目:go语言渐入佳境[4]-scope作用域-创新互联
文章位置:http://scyanting.com/article/dsishi.html