Go內部培訓 節點解析11 20

2021-09-04 10:53:58 字數 4215 閱讀 5301

11. go line filters

package main

import

("bufio"

"fmt"

"os"

"strings"

)func

main()

// 在`scan`過程中,檢查錯誤。檔案結束不會被當作乙個錯誤

if err := scanner.

err(

); err !=

nil}

12. go panic
package main

import

"os"

func

main()

}

13. go range函式
package main

import

"fmt"

func

main()

sum :=

0for

_, num :=

range nums

fmt.

println

("sum:"

, sum)

// range 用來遍歷陣列和切片的時候返回索引和元素值

// 如果我們不要關心索引可以使用乙個下劃線(_)來忽略這個返回值

// 當然我們有的時候也需要這個索引

for i, num :=

range nums

}// 使用range來遍歷字典的時候,返回鍵值對。

kvs :=

map[

string

]string

for k, v :=

range kvs

// range函式用來遍歷字串時,返回unicode**點。

// 第乙個返回值是每個字元的起始位元組的索引,第二個是字元**點,

// 因為go的字串是由位元組組成的,多個位元組組成乙個rune型別字元。

for i, c :=

range

"go"

}

14. go sha1 雜湊
package main

import

"crypto/sha1"

import

"fmt"

func

main()

)`,下面我們開始乙個新的hash

// 示例

h := sha1.

new(

)// 寫入要hash的位元組,如果你的引數是字串,使用`byte(s)`

// 把它強制轉換為位元組陣列

h.write([

]byte

(s))

// 這裡計算最終的hash值,sum的引數是用來追加而外的位元組到要

// 計算的hash位元組裡面,一般來講,如果上面已經把需要hash的

// 位元組都寫入了,這裡就設為nil就可以了

bs := h.

sum(

nil)

// sha1雜湊值經常以16進製制的方式輸出,例如git commit就是

// 這樣,所以可以使用`%x`來將雜湊結果格式化為16進製制的字串

fmt.

println

(s)fmt.

printf

("%x\n"

, bs)

}

15. go string與byte切片之間的轉換
package main

import

"fmt"

func

main()

16. go switch語句
package main

import

"fmt"

import

"time"

func

main()

// 你可以使用逗號來在case中分開多個條件。還可以使用default語句,

// 當上面的case都沒有滿足的時候執行default所指定的邏輯塊。

switch time.

now().

weekday()

// 當switch沒有跟表示式的時候,功能和if/else相同,這裡我們

// 還可以看到case後面的表示式不一定是常量。

t := time.

now(

)switch

}

17. go url解析
package main

import

"fmt"

import

"net/url"

import

"strings"

func

main()

// 可以直接訪問解析後的模式

fmt.

println

(u.scheme)

// user包含了所有的驗證資訊,使用

// username和password來獲取單獨的資訊

fmt.

println

(u.user)

fmt.

println

(u.user.

username()

)p,_:= u.user.

password()

fmt.

println

(p)// host包含了主機名和埠,如果需要可以

// 手動分解主機名和埠

fmt.

println

(u.host)

h := strings.

split

(u.host,

":")

fmt.

println

(h[0])

fmt.

println

(h[1])

// 這裡我們解析出路徑和`#`後面的片段

fmt.

println

(u.path)

fmt.

println

(u.fragment)

// 為了得到`k=v`格式的查詢引數,使用rawquery。你可以將

// 查詢引數解析到乙個map裡面。這個map為字串作為key,

// 字串切片作為value。

fmt.

println

(u.rawquery)m,_

:= url.

parsequery

(u.rawquery)

fmt.

println

(m)fmt.

println

(m["k"][

0])}

18. go 閉包函式
package main

import

"fmt"

// 這個"intseq"函式返回另外乙個在intseq內部定義的匿名函式,

// 這個返回的匿名函式包住了變數i,從而形成了乙個閉包

func

intseq()

func()

int}

func

main()

package main

import

"fmt"

func

main()

func

closure

(x int

)func

(y int

)int

}package main

import

"fmt"

func

main()

)}for_

, f :=

range fs

}package main

import

"fmt"

func

adder()

func

(int

)int

}func

main()

}

19. go變數
package main

import

"fmt"

func

main()

20. go 遍歷通道
package main

import

"fmt"

func

main()

}

Go內部培訓 節點解析21 30

21.go 並行通道channelpackage main import fmt func main 使用 channel 語法來從channel讀取資料 這裡我們從main函式所在的協程來讀取剛剛寫入 messages通道的資料 msg messages fmt.println msg 22.go...

Go內部培訓 節點解析41 50

41.go 程序執行package main import syscall import os import os exec func main exec 函式需要乙個切片引數,我們給ls命令一些 常見的引數。注意,第乙個引數必須是程式名稱 args string exec 還需要一些環境變數,這裡...

Go內部培訓 節點解析61 63

61.go 訊號處理package main import fmt import os import os signal import syscall func main 程式將等待接受訊號,然後退出 fmt.println awaiting signal done fmt.println exit...