一、函数
函数是基本的代码块,用于执行一个任务。 Go 语言最少有个 main() 函数。 你可以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务。
函数声明包括函数名﹑形式参数列表﹑返回值列表(可省略)以及函数体。
func name( parameter-list ) [result-list] {
body
}
- 形式参数列表描逑了函数的参数名以及参数类型。这些参数作为局部变量,被初始化为参数调用者提供的值,或默认为参数类型的值(int 0;string " ")。当函数被调用时,你可以将值传递给参数,这个值被称为实际参数。参数列表指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参数。
- 函数使用参数,可以通过两种方式传参:
- 值传递:值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。
- 引用传递:引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。
- 返回值列表描述了函数返回值的变量名以及类型。如果函数返回一个无名变量或者没有返回值,返回值列表的括号是可以省略的。如果一个函数声明不包括返回值列表,那么函数体执行完毕后,不会返回任何值。
二、递归函数
函数是可以递归的,在运行时直接或间接的自己调用自己。 我们在使用递归时,程序员需要设置边界条件,否则递归将陷入无限循环中。
实例:
Go语言递归实现阶乘
package main
import "fmt"
func Factorial(n uint64)(result uint64) {
if (n > 0) {
result = n * Factorial(n-1)
return result
}
return 1
}
func main() {
var i int = 15
fmt.Printf("%d 的阶乘是 %d\n", i, Factorial(uint64(i)))
}
Go语言递归实现斐波那契数列
package main
import "fmt"
func fibonacci(n int) int {
if n < 2 {
return n
}
return fibonacci(n-2) + fibonacci(n-1)
}
func main() {
var i int
for i = 0; i < 10; i++ {
fmt.Printf("%d\t", fibonacci(i))
}
}
三、指针
Go语言中的指针是一种特殊的数据类型,用于存储变量的内存地址。指针变量可以指向任何数据类型,包括基本类型、结构体、数组、函数等。
声明指针变量时需要使用*
符号,例如:
var ptr *int
//表示声明了一个指向整型变量的指针。
指针变量可以通过&
操作符取得变量的地址,例如ptr = &num
表示将整型变量num
的地址赋值给指针变量ptr
。
通过指针变量可以访问和修改指向的变量的值,可以使用*
操作符来解引用指针,例如*ptr
表示获取指针变量ptr
所指向的变量的值。可以通过解引用操作符修改指向的变量的值,例如*ptr = 10
表示将指针变量ptr
所指向的变量的值修改为10。
指针也可以用于函数传参,通过传递指针可以实现对变量的引用传递,可以在函数内部修改变量的值,对外部产生影响。
需要注意的是,在Go语言中,指针不能进行运算和比较,也没有指针运算符->
。此外,Go语言的垃圾回收机制可以自动管理内存,因此不需要手动释放指针所指向的内存。
四、错误处理
Go 语言通过内置的错误接口提供了非常简单的错误处理机制。 error 类型是一个接口类型,这是它的定义:
type error interface {
Error() string
}
我们可以在编码中通过实现 error 接口类型来生成错误信息。文章来源:https://www.toymoban.com/news/detail-660183.html
函数通常在最后的返回值中返回错误信息。使用 errors.New 可返回一个错误信息:文章来源地址https://www.toymoban.com/news/detail-660183.html
func Sqrt(f float64) (float64, error) {
if f < 0 {
return 0, errors.New("math: square root of negative number")
}
// 实现
}
到了这里,关于Go语言进阶:函数、指针、错误处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!