学习是一个趁热打铁的过程,高效的学习能提高大脑反应。所以我们接着了解go语言的数组、变量作用域、函数。
数组
和其他语言申明类似:var variable_name [SIZE] variable_type
所有数据的数据类型相同且唯一
数据长度固定且不可更改
通过位置获取元素
我们可以看看一小段代码:
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 }
var balance = [...]float32 {1000.0 , 2.0 , 3.4 , 7.0 , 50.0 }
var a = [3 ][4 ]int {
{0 , 1 , 2 , 3 } ,
{4 , 5 , 6 , 7 } ,
{8 , 9 , 10 , 11 }
}
变量作用域
正如我们了解的其他语言一样,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())
}
func (c Circle) getArea () float64 {
return 3.14 * c.radius * c.radius
}
总结
go语言有着和其他语言的共性,均有数组、变量作用域、函数等基本概念。
其中数组和其他语言的操作方式基本相同,变量作用域也是一样的效果,唯一值得注意的是局部变量和全局变量同名时,在方法中优先考虑局部变量。
函数,其实也是我们java中说的方法,但是go语言中的方法则是有指明 接受者 的函数。
如果你认可我所做的事情,并且认为我做的事对你有一定的帮助,希望你也能打赏我一杯咖啡,谢谢。