golang常用手冊:陣列、變數作用域、函式

pc859107393發表於2017-12-22

學習是一個趁熱打鐵的過程,高效的學習能提高大腦反應。所以我們接著瞭解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語言中的方法則是有指明 接受者 的函式。


如果你認可我所做的事情,並且認為我做的事對你有一定的幫助,希望你也能打賞我一杯咖啡,謝謝。

支付寶捐贈

相關文章