函数
最少有个main() 函数,可以返回多个值
- 值传递:默认情况下,Go 语言使用的是值传递,即在调用过程中不会影响到实际参数。
- 引用传递:引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。
/* 调用 swap() 函数
* &a 指向 a 指针,a 变量的地址
* &b 指向 b 指针,b 变量的地址
*/
swap(&a, &b)
//ab的值就得到了交换。
func swap(x *int, y *int) {
var temp int
temp = *x /* 保存 x 地址上的值 */
*x = *y /* 将 y 值赋给 x */
*y = temp /* 将 temp 值赋给 y */
}
函数作为值:函数定义后可作为值来使用
import(
"fmt"
"math"
)
func main(){
/* 声明函数变量 */
getSquareRoot := func(x float64) float64{
return math.Sqrt(x)
}
/* 使用函数 */
fmt.Println(getSquareRoot(9))
}
//输出结果 3
闭包:闭包是匿名函数,可在动态编程中使用
方法: 方法就是一个包含了接受者的函数
变量作用域
- 局部变量:在函数体内生命的变量为局部变量,它的作用域只在函数体内。
- 全局变量:在函数体外生命的变量。全局变量可以在整个包甚至外部包(被导出后)使用。
(ps:全局变量和局部变量名称相同时,优先烤炉局部变量)
形式参数:为函数的局部变量来使用
数组
数组的长度是固定的。可以根据声明的数组来设置大小。
- 多维数组 var threedim [5][10][4]int
- 向函数传递数组
void myFunction(param []int) //未设置大小
void myFunction(param [10]int) //指定数组大小
指针
变量是一种使用方便的占位符,用于引用计算机内存地址。Go 语言的取地址符是&,放到一个变量前使用就会返回相应变量的内存地址。例:&a
一个指针变量可以指向任何一个值的内存地址它指向那个值的内存地址。
//声明指针
var ip *int /* 指向整型*/
var fp *float32 /* 指向浮点型 */
使用指针
- 定义指针变量
- 为指针变量赋值
- 访问指针变量中指向地址的值
package main
import "fmt"
func main() {
var a int= 20 /* 声明实际变量 */
var ip *int /* 声明指针变量 */
ip = &a /* 指针变量的存储地址 */
fmt.Printf("a 变量的地址是: %xn", &a )
/* 指针变量的存储地址 */
fmt.Printf("ip 变量的存储地址: %xn", ip )
/* 使用指针访问值 */
fmt.Printf("*ip 变量的值: %dn", *ip )
}
/*
输出结果
a 变量的地址是: 20818a220
ip 变量的存储地址: 20818a220
*ip 变量的值: 20
*/
空表示为:nil 同null一样。 指针声明后未分配到任何变量时为nil。打印出来是0;
更多内容
- Go 指针数组:可以定义一个指针属猪来存储地址
- Go 指向指针的指针:Go 支持指向指针的指针
- Go 像函数传递指针参数:通过引用或地址传参,在函数调用时可以改变其值