gopython語言 go語言基本語法

2021-10-11 07:38:30 字數 3261 閱讀 8021

go語言

一、特點

1、函式式程式設計   閉包

2、工程化   資源管理,錯誤處理,測試文件,

3、併發程式設計   goroutine和channel  排程器。

4、介面程式設計, inte***ce

5、全新的靜態型別開發語言

6、更豐富的內建型別slice

7、錯誤處理:

defer, panic和recover

二、語法

package宣告:表示go**所屬的包。建立乙個名字為main的包,在該包中包含乙個叫做main()的函式。無參,也沒有定義返回值。

宣告以後是import語句,引入需要的模組。

需要使println()函式所以引入的是fmt

函式定義使用func開頭。

所有go函式(包括在物件程式設計中會提到的型別成員函式)以關鍵字func開頭。乙個常規的 函式定義包含以下部分: func 函式名(引數列表)(返回值列表) 對應的乙個例項如下: func

compute(value1 int, value2 float64)(result float64, err error) go支援多個返回值。以上的示例函式compute()返回了兩個值,乙個叫result,另乙個是 err。並不是所有返回值都必須賦值。在函式返回時沒有被明確賦值的返回值都會被設定為預設

值,比如result會被設為0.0,err會被設為nil。

三、定義變數

packagemain

import"fmt"var(

a=3b=4

c=2d=true)

funcvariablezerovalue()else else

returng

panic異常捕獲語句

switch不需要break,自動有的break

3、for迴圈

funcsums()

arr3 := [...]int

vargrid[4][5] int

fmt.println(arr1, arr2, arr3, grid)

fori, value := rangearr3

arr3 := [...]int

vargrid[4][5] int

fmt.println(arr1, arr2, arr3, grid)

//for i, value := range arr3printarray(arr3)

var arr[5] int 指定的是陣列的長度和值得型別

陣列作為函式的引數穿進去的時候就會拷貝陣列

一般不會直接使用陣列

十、切片slice

packagemain

import "fmt"

funcmain() 

s := arr[2:6]

s1 := s[3:5]

fmt.println(s)

fmt.println(s1)

s1 因為知道其索引腳標,所以能夠取出所在的值。因為其知道s的值,向後拓展只要不是超過s的長度即可

十一、map

map[k]v,map[k1]map[k2]v

建立make ,map    m2 := make(map[string]int)      m := map[string]string

遍歷查詢值

刪除map的key:map使用的是雜湊表,必須可以比較相等。

除了slice,map,function的內建型別都可以作為key,

struct型別不包括上述字段,也可以作為key

packagemain

import "fmt"

funcmain() 

packagemain

import "fmt"

typetreenode struct

funcmain() 

root.left = &treenode

root.right.left = new(treenode)

root.left.right = createnode(2)

nodes := treenode,

,fmt.println(nodes)

結構建立在堆上還是棧上呢。

利用指標接收

十四、封裝

名字一般使用camelcase

首字母大寫public

首字母小寫 private

十五、擴充套件已有型別

包:每個目錄裡面乙個包

main包包含可執行入口

為結構定義的方法必須放在同乙個包內

可以是不同的檔案。

go語言沒有繼承:

如何擴充已有型別和別人的型別。

(1)定義別名

packagequeue

import "fmt"

typequeue int

func(q *queue) push(v int)

q.push(2)

q.push(3)

fmt.println(q.pop())

fmt.println(q.pop())

fmt.println(q.isempty())

fmt.println(q.pop())

fmt.println(q.isempty())

(2)使用組合

十六、gopath環境

不用的包不能匯入,否則就會報錯的

十七、介面

1、duck typing

2、go語言中的duck typing

假的retriever

packagemock

typeretriever struct

fmt.println(download(r))

3、介面定義:

介面是隱士的,只是實現裡面的方法啊而已

inte***ce  裡面有兩個東西乙個是值,乙個是型別,真實的值copyde,也可以是指標的。

4、介面的組合:

typeretrieverposter inte***ceelse

deferfile.close()

writer := bufio.newwriter(file)

deferwriter.flush()

f := fib.fibonacci()

fori := 0; i<20; i ++else{

panic(r)

panic(errors.new("this is an error"))

盡量少用panic。

意料之內的使用error, 檔案打不開

意料之外的使用panic, 陣列超屆

錯誤綜合處理方法:

Go語言之GO 語言常量

相對於變數,常量是恆定不變的值,多用於定義程式執行期間不會改變的那些值。常量的宣告和變數宣告非常類似,只是把var換成了const,常量在定義的時候必須賦值。const pi 3.1415 const e 2.7182宣告了pi和e這兩個常量之後,在整個程式執行期間它們的值都不能再發生變化了。多個常...

五 go語言特性 go語言筆記

defer 呼叫乙個被 defer 的函式時在函式剛要返回之前延遲執行,當函式無論怎樣返回,某資源必須釋放時,可用這種與眾不同 但有效的處理方式。傳統的例子包括解鎖互斥或關閉檔案。package main import log func main mydefer func mydefer func ...

Go語言之Go語言網路程式設計

go語言的 net 包中有乙個 tcpconn 型別,可以用來建立 tcp 客戶端和 tcp 伺服器端間的通訊通道,tcpconn 型別裡有兩個主要的函式 func c tcpconn write b byte n int,err os.error func c tcpconn read b byt...