go 2.19 调用

  1. defer
  2. defer与匿名函数结合
  3. 获取取命令行参数
  4. 包的导入
  5. 给导入的包起别名
  6. 导入包的使用
  7. 关于包的约定
  8. 下划线引包

defer

如果一个函数中有多个defer,它们会以LIFO(先进后出)的顺序调用,
即使其中有defer调用过程中发生错误,这些调用依旧会执行

1
2
3
4
5

func main() {
defer fmt.Println("in defer") //延迟调用,在main函数结束前调用
fmt.Println("in main")
}
1
2
3
4
5
6
7
8
9
10
func test(x int) {
fmt.Println(100 / x)
}
func main() {
defer fmt.Println("in defer") //延迟调用,在main函数结束前调用
fmt.Println("in main")
defer fmt.Println("aa")
defer test(0) //这个调用会出现panic,但是后面的defer调用依旧会执行
defer fmt.Println("bb")
}

defer与匿名函数结合

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package main

import (
"fmt"
)

func main() {
a := 10
b := 20
defer func(a, b int) {
fmt.Println("in defer func a=", a)
fmt.Println("in defer func b=", b)
}(a, b) //只是传入参数,但未执行,所以执行结果是a=10,b=20,都是未改变的值

a = 110
b = 220
fmt.Println("in main a=", a)
fmt.Println("in main b=", b)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package main

import (
"fmt"
)

func main() {
a := 10
b := 20
defer func() {
fmt.Println("in defer func a=", a)
fmt.Println("in defer func b=", b)
}() // 匿名调用 ,调用的是最近变量,所以这里是调用的改变后的a,b的值:110,220

a = 110
b = 220
fmt.Println("in main a=", a)
fmt.Println("in main b=", b)
}

获取取命令行参数

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

import (
"fmt"
"os"
)

func main() {
list := os.Args
for i, data := range list {
fmt.Printf("os.Args[%v]= %v\n", i, data)
}

}

包的导入

导入的包必须使用,否则编译不能通过

给导入的包起别名

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

import (
io "fmt" //别名放于包名之前,用空格分隔
"os"
)

func main() {
list := os.Args
for i, data := range list {
io.Printf("os.Args[%v]= %v\n", i, data)
}

}

导入包的使用

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

import (
. "fmt" // 使用点代替导入的包史,引用时直接使用不用再写包名
. "os"
)

func main() {
list := Args // 不写包名,直接使用
for i, data := range list {
Printf("os.Args[%v]= %v\n", i, data) // 不写包名
}

}

关于包的约定

1)分文件编程(多个源文件),必须放在src目录
2)设置GOPATH环境变量,$GOPATH环境变量必须包括到src的上一级目录
3) 同一个目录,包名必须一样
4)go env查看go相关的环境路径
5) 同一个目录,调用别的文件的函数,无需包名引用,直接调用即可

下划线引包

有时,用户可能需要导入一个包,但是不需要引用这个包里的标识符,在这种情况下,可以使用空白标识符_来重命名这个导入

1
2
3
import (
_ "fmt"
)

这个操作其实是引用该包,而不直接使用包里的函数,而是调用了该包的init函数


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 rootid@126.com

文章标题:go 2.19 调用

本文作者:Shawn

发布时间:2019-05-17, 17:48:26

最后更新:2019-05-25, 22:56:57

原始链接:https://gitrootid.github.io/2019/05/17/golang/go-2-19-调用_/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏