学习是一个趁热打铁的过程,高效的学习能提高大脑反应。所以我们接着了解go语言的数组、变量作用域、函数。
数组
- 和其他语言申明类似:var variable_name [SIZE] variable_type
- 所有数据的数据类型相同且唯一
- 数据长度固定且不可更改
- 通过位置获取元素
我们可以看看一小段代码:
//定义名称为balance长度为10的float32数组
var balance [10] float32
//初始化
balance = {1000.0, 2.0, 3.4, 7.0, 50.0}
//当然下面这样直接申明和初始化
var balance = [10]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
//如果忽略 [] 中的数字不设置数组大小,Go 语言会根据元素的个数来设置数组的大小:
var balance = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
//多维数组格式: var variable_name [SIZE1][SIZE2]...[SIZEN] variable_type
var a = [3][4]int{
{0, 1, 2, 3} , /* 第一行索引为 0 */
{4, 5, 6, 7} , /* 第二行索引为 1 */
{8, 9, 10, 11} /* 第三行索引为 2 */
}
变量作用域
正如我们了解的其他语言一样,go一样存在了变量以及他的作用域。同样的,跟我们以往的了解一样,go的变量作用域有以下几点:
- 局部变量(在函数中申明的变量。作用域只在函数体内,参数和返回值变量也是局部变量)
- 形式参数(函数参数)
- 全局变量(在函数外申明的变量)
package main
import "fmt"
/* 声明全局变量 */
var g int
func main() {
/* 声明局部变量 */
var a, b int
/* 初始化参数 */
a = 10
b = 20
g = a + b
fmt.Printf("结果: a = %d, b = %d and g = %d\n", a, b, g)
}
注意:go语言中局部变量和全局变量可以同名,但是函数中会悠闲考虑同名的局部变量。
函数
和其他任何语言一样,go语言一样存在函数,函数固定格式如下:
func function_name( [parameter list] ) [return_types] {
函数体
}
func是函数申明标志,function_name是函数名称,当然函数参数和函数返回值都是可以没有的。
需要注意的是,go语言可以有多个返回值:
package main
import "fmt"
func swap(x, y string) (string, string) {
return y, x
}
func main() {
a, b := swap("Mahesh", "Kumar")
fmt.Println(a, b)
}
函数参数传递方式(和C语言类似):
- 值传递
- 将需要传递的数据拷贝一份并赋值给被调用函数的参数
- 引用传递
- 在调用函数的时候把数据的内存地址传递过去,在函数中依据地址对数据进行修改将会影响实际值。(和c语言中的指针操作一样)
函数的用法:
- 作为数据值使用(不推荐,一定层面上降低了可读性)
- 闭包:匿名函数,可在动态编程中使用
- 方法:包含了接受者的函数,接受者可以是命名类型或者结构体类型的一个值或者是一个指针。所有给定类型的方法属于该类型的方法集。
- 语法:func (variable_name variable_data_type) function_name() [return_type]{···}
关于方法的demo我们参考下菜鸟教程:
package main
import (
"fmt"
)
/* 定义函数 */
type Circle struct {
radius float64
}
func main() {
var c1 Circle
c1.radius = 10.00
fmt.Println("Area of Circle(c1) = ", c1.getArea())
}
//该 method 属于 Circle 类型对象中的方法
func (c Circle) getArea() float64 {
//c.radius 即为 Circle 类型对象中的属性
return 3.14 * c.radius * c.radius
}
总结
go语言有着和其他语言的共性,均有数组、变量作用域、函数等基本概念。
其中数组和其他语言的操作方式基本相同,变量作用域也是一样的效果,唯一值得注意的是局部变量和全局变量同名时,在方法中优先考虑局部变量。
函数,其实也是我们java中说的方法,但是go语言中的方法则是有指明 接受者 的函数。
如果你认可我所做的事情,并且认为我做的事对你有一定的帮助,希望你也能打赏我一杯咖啡,谢谢。