學習是一個趁熱打鐵的過程,高效的學習能提高大腦反應。所以我們接著瞭解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語言中的方法則是有指明 接受者 的函式。
如果你認可我所做的事情,並且認為我做的事對你有一定的幫助,希望你也能打賞我一杯咖啡,謝謝。