package mainimport ( "fmt")func cal_result (m float64, n float64, cal_method byte) float64 { var result float64 switch cal_method { case '+': result = m + n case '-': result = m - n case '*': result = m * n case '/': result = m / n default: fmt.Println("Input correct method") } return result}func main() { var m float64 var n float64 var cal_method byte var result float64 fmt.Println("Input 1st number:") fmt.Scanln(&m) fmt.Println("Input 2nd number:") fmt.Scanln(&n) fmt.Println("Input cal method (+ - * /):") fmt.Scanf("%c", &cal_method) //接受字符输入 result = cal_result(m, n, cal_method) fmt.Println("Result is:", result)}
package utilsimport "fmt"var Num1 int = 300 //大写开头变量名允许跨包访问func Cal (m float64, n float64, operator byte) float64 { // 函数名大写,可以跨包调用 var res float64 switch operator{ case '+': res = m + n case '-': res = m - n case '*': res = m * n case '/': res = m / n default: fmt.Println("Input corrent operator") } return res}
在别的地方调用:
touch goproject/functiondemo/main/main.go
package mainimport( "fmt" "goproject/functiondemo/utils" // 定义好了GOPATH之后,引用包的路径就从src的下级目录开始写。而且是以目录的形式。utils是目录名,可以引用到目录下的所有包)func main(){ fmt.Println("utils.go Num1 is:", utils.Num1) var m float64 = 6.4 var n float64 = 5.7 var operator byte = '+' fmt.Printf("result=%f", utils.Cal(m, n, operator))}
跨包访问规则
Go 中大写开头的函数名和变量名可以被其他包访问,小写开头的只能在包内使用。这是 Go 的访问控制机制。
函数return
具名返回值
函数体直接定义返回值的变量名:
package mainimport ( "fmt")func getMinMax(i1, i2 int) (min, max int) { if i1 > i2 { max = i1 min = i2 } else { max = i2 min = i1 } return}func main() { min, max := getMinMax(43, 34) fmt.Println("从小到大排序:", min, max)}
返回多个值的接收
Go的函数可以返回多个值。在调用函数接收返回值时,希望忽略某个返回值,则使用下划线表示占位忽略。
package mainimport ( "fmt")func cal(m float64, n float64) (float64, float64) { return m + n, m - n}func main() { var sum float64 sum, _ = cal(10, 6) fmt.Println("Sum is:", sum)}
package mainimport ( "fmt")// 累加器 返回值是一个匿名函数func AddUpper() func(int) int { var n int = 10 return func(x int) int { n += x return n }}func main() { f := AddUpper() fmt.Println(f(1)) fmt.Println(f(1)) fmt.Println(f(1)) // 函数里面的n每次调用都会累加}