Go語言基礎語法筆記

Go語言基礎語法筆記

最近在學習Go語言的基礎語法,學習教程爲 A tour of go ,本文記錄了Go語言的最基礎知識,包括基礎的程序代碼結構,變量以及函數的定義,和基礎常量的定義等。golang

一段最簡單的Go語言程序示例以下:算法

package main

import (
	"fmt"
)

func sayhellowtoOne(name string) bool {
	fmt.Printf("Hellow %v\n", name)
	return true
}

func main() {

	var name string = "dlk"
	ok := sayhellowtoOne(name)
	if ok {
		fmt.Println("OK")
	}
}

觀察這段代碼咱們能夠發現,Go語言的代碼和從前我所熟悉的C++、Java有許多相似的地方,但也有一些差異,其中最明顯的應該就是Go語言的變量定義方式和其餘語言有很大的不一樣。下面以這段代碼爲引,總結記錄一下Golang語言的一些最基礎的語法知識。框架

1.總體框架

Go語言與其餘語言相似,也是由包名的定義與引入、函數的定義、變量的定義以及控制語句等部分組成。在本段代碼中,引入了fmt包,以main包裏面的main函數做爲程序的入口函數,同時定義了一個sayhellowtoOne()的函數。本段程序運行的結果就是簡單的調用一個打印函數,根據傳入函數的變量值的不一樣,輸出不一樣的內容。函數

2.包

Go語言與Java等語言相似,利用包結構來管理組織代碼文件。學習

定義當前包

Go語言與其餘語言同樣,使用package來定義一個包,一般程序由main包做爲程序的入口。指針

示例:code

package main

引用其餘包

與不少語言相似,Go語言一樣是利用import來引入其餘包,就好比import "fmt" 這種形勢,可是GO語言同時還支持利用一個import關鍵詞同時引入多個包,就像下面這段代碼同樣。blog

import (
	"fmt"
	"runtime"
)

如代碼所示,一個import關鍵詞後面跟一個圓括號,裏面就能夠同時引用多個包。教程

3.如何進行定義

變量的定義作用域

與其餘語言不一樣,Go語言採用了先指出變量名,再指出變量類型的方式來定義變量。例如:var x,y,z int
這樣咱們就定義了三個整數類型的變量(注意在Go中聲明瞭變量而不使用的話會提示錯誤)。據官方文檔中的解視,這種定義方法比傳統方法更可讀,能夠按天然邏輯從左相右閱讀。例子中的代碼的意思就是首先聲明瞭要定義變量,而後定義了三個變量,他們的類型爲整數類型,聽說這樣理解比較天然。另外在函數的一些複雜狀況的聲明中,這樣也比較有優點,具體能夠看官方文檔 declaration-syntax

Notes:

  • 變量的默認值
       若是沒有對變量設置初始值的話,數值類變量的默認值將爲零,字符串默認爲一個空串,指針類型默認爲nli
  • 快速定義變量
       在Go語言中能夠利用:=運算符快速定義一個變量,且這種變量會自動根據右邊的類型推導左邊變量的類型,實現快速定義的目的。例如:i:=1,這種方法便快速定義了一個整數變量並賦予了值。

函數的定義

定義函數使用關鍵詞func,例如例子中的代碼func sayhellowtoOne(name string) bool 該段代碼簡單定義了一個sayhellowtoOne函數,而且如Go語言中所規定的那樣,名在前類型在後,從左往右讀。首先是變量名,而後圓括號裏面定義函數參數,函數參數也是使用通常變量的定義方式,而後圓括號後面定義返回值的類型(注意這裏能夠同時定義多個返回值),最好尖括號裏面是函數的主體部分。

4.函數的編寫

在上一節的例子中已經知道了如何定義一個函數,可是在函數的具體編寫過程當中,還有一些特殊的值得注意的地方。

多個返回值

Go語言支持同時返回多個返回值,只須要在返回值定義的地方進行定義,而後利用return關鍵詞進行返回便可。

func swap(a,b string)(string,string){

}

預約義的返回值

Go語言能夠不使用return語句顯式的進行返回值,而是在定義返回值類型的時候,同時給出返回值的變量名(即定義了用於返回值的變量),這樣,在函數結束後,將自動的返回定義的變量的值。可是這樣作會犧牲代碼的可讀性,所以通常用在較爲簡單的函數中。

func returnAvalue() (a int) {
	var x, y int
	x = 0
	y = 1
	a = x + y
	return
}

5.控制語句的使用

5.1 if...else...語句

if語句是最多見的條件判斷語句,在Go中,基本上全部的控制語句的判斷部分都不須要加圓括號括上,可是後面的執行部分必需要尖括號括起來。同時,Go語言支持在if後面臨時定義變量,但必須用:=符號進行定義,不支持使用var的方式,同時該變量的做用域直到該條件判斷語句結束爲止。

例如:

if ok := sayhellowtoOne(name); ok {
		fmt.Println("OK")
	} else {
		fmt.Println("error")
	}

5.2 for 控制語句

for循環的書寫使用方式與if...else...語句相似。舉例以下:

//實現求開根值的算法
func sqrt(x float64) float64 {
	var z float64 = 1
	for i := 0; i < 10; i++ {
		z -= (z*z - x) / (z * 2)
		fmt.Printf("%v\n", z)
	}
	return z
}

同時。利用for循環語句,咱們能夠實現相似while語句的效果

var i int = 0
for i<20 {
	i++
}

5.3 defer語句

被defer關鍵詞標記的語句會在他所在的函數執行完return語句後開始執行
例如咱們在執行文件的讀取操做時,利用該語句來保證文件被正確關閉

func CopyFile(dstName, srcName string) (written int64, err error) {
    src, err := os.Open(srcName)
    if err != nil {
        return
    }
    defer src.Close()

    dst, err := os.Create(dstName)
    if err != nil {
        return
    }
    defer dst.Close()

    return io.Copy(dst, src)
}

以官方提供的這段代碼爲例,利用defer語句實現了若是文件被正確打開,那麼他將在函數整個執行完成以後被正確的關閉,而不用擔憂由於出現erro致使函數提早返回而有的文件沒法關閉的問題。有點相似JAVA裏面的try...catch...finally語句裏面的finally部分。

相關文章
相關標籤/搜索