内容简介:Go Packages 主要用来把相关的functions, variables, 和constants 组织到一起,这样你就可以很方便的迁移Packages和把它们用到自己的程序中。注意除了main package, Go packages 不是自治程序,不能被编译成可执行文件。它们必须直接或者间接的被main package调用才能使用。如果你直接执行一个没个package:
关于Go Package关于Go Package
Go Packages 主要用来把相关的functions, variables, 和constants 组织到一起,这样你就可以很方便的迁移Packages和把它们用到自己的程序中。
注意除了main package, Go packages 不是自治程序,不能被编译成可执行文件。它们必须直接或者间接的被main package调用才能使用。
如果你直接执行一个没个package:
$ go run aPackage.go go run: cannot run non-main package
关于Go function关于Go function
匿名函数(anonymous functions)
匿名函数可以在内部定义,而不需要使用函数名,匿名函数通常被用来实现一些不需要太多代码的功能。在 Go 中 一个函数可以返回一个匿名函数,或者使用匿名函数作为它的其中一个参数。另外,匿名函数可以通过一Go 变量来访问。注意,匿名函数也称为闭包,特别是在函数式编程术语中。
匿名函数具有较小的实现和本地焦点,这被认为是一种很好的做法。 如果匿名函数没有本地焦点,那么你可能需要考虑使其成为常规函数。
注意不要在没有特殊需求的时候在你程序中使用使用大量的匿名函数。
Go 函数可以返回多个值
func aFunction() (int, int, float64, float64) { }
下面会有一个用一个functions.go来展示Go的匿名函数
package main
import (
"fmt"
"os"
"strconv"
)
func doubleSquare(x int) (int, int) {
return x * x, x * x
}
func main() {
arguments := os.Args
if len(arguments) != 2 {
fmt.Println("The program needs 1 argument!")
return
}
y, err := strconv.Atoi(arguments[1])
if err != nil {
fmt.Println(err)
return
}
square := func (s int) int {
return s * s
}
fmt.Println("The square of", y, "is", square(y))
double := func (s int) int {
return s + s
}
fmt.Println("The double of", y, "is", double(y))
fmt.Println(doubleSquare(y))
d, s := doubleSquare(y)
fmt.Println(d, s)
}
上面的square 和 double 都持有一个匿名函数。不好的一点是,在以后的程序中你可以更改square,double或之后其他变量的值为匿名函数的变量,这意味着这些变量的含义可以更改并计算其他内容。
修改值为匿名函数变量的值是不推荐的,因为这可能是导致非常难以排查bug的主要原因。
如上面所示我们可以直接打印doubleSquare()的返回值,也可以给他们分配不同的变量进行打印。
执行functions.go:
$ go run function.go 1 21 The program needs 1 argument! rMacBook:code mtsouk $ go run functions.go 10 The square of 10 is 100 The double of 10 is 20 20 100 20 100
函数的返回值可以被命名函数的返回值可以被命名
下面以returnNames.go为例,我们会把returnNames.go的代码分成3部分来进行讲解
Part 1
package main
import (
"fmt"
"os"
"strconv"
)
func nameMinMax(x, y int) (min, max int) {
if x > y {
min = y
max = x
} else {
min = x
max = y
}
return
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
深入理解OpenCV
[巴西]Daniel Lelis Baggio / 刘波 / 机械工业出版社 / 2014-9 / 59
opencv是最常见的计算机视觉库之一,它提供了许多经过优化的复杂算法。本书对已掌握基本opencv技术同时想提高计算机视觉的实践经验的开发者来讲是一本非常好的书。每章都有一个单独的项目,其背景也在这些章节中进行了介绍。因此,读者可以依次学习这些项目,也可以直接跳到感兴趣的项目进行学习。 《深入理解opencv:实用计算机视觉项目解析》详细讲解9个实用的计算机视觉项目,通过本书的学习,读者可......一起来看看 《深入理解OpenCV》 这本书的介绍吧!