函数声明golang
func (p myType ) funcName ( a, b int , c string ) ( r , s int ) { return数组 }安全 |
func 关键字app
(p myType) 代表 函数所属于的类型对象!,即为特定类型定义方法,能够省去不写,即为普通的函数 (这里咱们主要讲解 普通的函数)函数
函数名ui
参数 (能够不声明)spa
返回值 (能够不声明)code
函数体对象
Golang 提供了 大量的包和实用函数 供用户使用,这些函数被称为标准函数。常见的标准包有 fmt, math, os, time bytes
通常包名都是小写。、
标准包的消息能够在 Go安装目录的 pkg 下面查看,也可使用godoc 查看。blog
一般,一个可执行的Go程序通常都有一个 main 包,在 main包中必须声明一个 main 函数。
若是须要调用外部包的函数,那么须要导入这个包,才能调用相关函数(首字母必须大写)。
13个内置函数,这些内置函数,很是有用。 len()
:能够获取数组,字符串,切片的长度 panic()
能够直接做用于系统底层,用于错误处理。
形式参数的 类型 和 个数 都是能够变化的。
典型的变参函数有: fmt.Printf(), fmt.Scanf() exec.Command() 等
func functionName (variableArgumetName ... dataType) returnValue {...}
(1) 变参的类型是”…类型“,并且变参必须是函数的最后一个参数。若是函数还有其余的参数,好比放在 变参的前面。 func f1(a int ,s string, args ...int) {...}
(2) 不定长 的变参,实际上就是一个切片,可使用 range 进行遍历。
一个变参函数,如何将这些变参传递给另一个 变参函数呢?
由于实际上变参就是一个切片,因此能够进行所有的传递,也能够进行部分的传递。
当用户但愿传递不一样类型的参数的时候,就像 fmt.Printf() 能够接受 int string 等各类类型。
此时,应该指定 变参 类型为为 空接口 interface{}
func f1(args... interface{}) //指定变参类型为 interface{}
在Go语言中,interface{} 能够指向任何数据类型,因此可使用 interface{}定义任意类型的变参。 同时 interface{] 也是类型安全的。
package main import ( "fmt" ) func main() { f1(2, "go", 8, "language", 'a', false, "A", 3.24) } // 采用 interface {} 做为类型 func f1(args ...interface{}) { var num = make([]int, 0, 6) var str = make([]string, 0, 6) var ch = make([]int32, 0, 6) //字符类型,是int32的哦! var other = make([]interface{}, 0, 6) //采用 interface{}做为类型 for _, arg := range args { switch v := arg.(type) { //这个是什么用法? case int: num = append(num, v) case string: str = append(str, v) case int32: //这里 'a' 被统计到了 int32中。 ch = append(ch, v) default: other = append(other, v) } } fmt.Println(num) fmt.Println(str) fmt.Println(ch) fmt.Println(other) } 输出为: [2 8] [go language A] [97] [false 3.24]
能够看到: Go 语言是类型安全的。 int
类型和 int32
不是同一个类型,可是应该是兼容的。 字符 字面值 被当作rune
类型(也就是 int32
类型,可是不是 int
类型 )
声明:
func (参数列表)(返回值){函数体} //注意没有函数名,因此称为匿名函数 func (a, b int) int { return (a + b) }
package main import ( "fmt" ) func main() { //声明 而且直接将 匿名函数 赋值 给变量f f := func(a, b int) int { return a + b } // 对函数类型的变量尽心调用 sum := f(2, 3) fmt.Println(sum) // 声明 而且 直接执行 匿名函数 sum = func(a, b int) int { return a + b }(2, 3) fmt.Println(sum) }
注意: 使用 匿名函数,不能将它做为顶级函数使用,也就是说必定要将它放在其余函数的函数体中。
2. 匿名函数中 能够 直接使用 上级函数中的变量(这也是其一个方便的用处)
golang 的 异常恢复机制,是采用 panic() / recover() 的机制。