递归函数(和Python的递归函数没什么区别,就是自己调用自己)
package main import "fmt" //递归 阶乘 func Factorial(n uint64)(result uint64) { if (n > 0) { result = n * Factorial(n-1) return result } return 1 } //斐波那契数列 func fibonacci(n int) int { if n < 2 { return n } return fibonacci(n-2) + fibonacci(n-1) } func main() { var i int = 15 fmt.Printf("%d 的阶乘是 %d ", i, Factorial(uint64(i))) var n int for n = 0; n < 10; n++ { fmt.Printf("%d ", fibonacci(n)) } }
变量类型转换
package main import "fmt" func main() { var sum int = 17 var count int = 5 var mean float32 //类型转换,和Python一样直接使用其他类型加(原类型)就可以了 mean = float32(sum)/float32(count) fmt.Printf("mean 的值为: %f ",mean) }
错误处理
//错误处理,Go 语言通过内置的错误接口提供了非常简单的错误处理机制 //error类型是一个接口类型,这是它的定义 /* type error interface { Error() string } */ package main import ( "errors" "fmt" ) func Sqrt(f float64) (float64, error) { if f < 0 { return 0, errors.New("math: square root of negative number") } // 实现 return f*f,nil } func main(){ result,err:= Sqrt(-1) if err != nil { fmt.Println(err) }else{ fmt.Println(result) } }
package main import ( "fmt" ) // 定义一个 DivideError 结构 type DivideError struct { dividee int divider int } // 实现 `error` 接口 func (de *DivideError) Error() string { strFormat := ` Cannot proceed, the divider is zero. dividee: %d divider: 0 ` return fmt.Sprintf(strFormat, de.dividee) } // 定义 `int` 类型除法运算的函数 func Divide(varDividee int, varDivider int) (result int, errorMsg string) { if varDivider == 0 { dData := DivideError{ dividee: varDividee, divider: varDivider, } errorMsg = dData.Error() return } else { return varDividee / varDivider, "" } } func main() { // 正常情况 if result, errorMsg := Divide(100, 10); errorMsg == "" { fmt.Println("100/10 = ", result) } // 当被除数为零的时候会返回错误信息 if _, errorMsg := Divide(100, 0); errorMsg != "" { fmt.Println("errorMsg is: ", errorMsg) } }