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...