生活随笔
收集整理的這篇文章主要介紹了
《Go程序设计语言》- 第1章:入门
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
- 前言
- hello world
- 命令行參數
- 找出重復行
- GIF動畫
- 獲取一個URL
- 并發獲取多個URL
- 一個Web服務器
- 其他內容
前言
本專欄是筆者在學習《Go程序設計語言》這本書時,對每個章節認為較為重要(容易忘記👻)的知識點記錄的筆記,其中也會有少量的思考👀, 現整理成博客分享出來。
??注意??:本專欄不是詳細的知識講解,只是碎片的知識條目,或可作為Go知識點查漏補缺的小工具~
hello world
go run xxx.go:將一個或多個go后綴的源文件進行編譯、鏈接,然后運行生成的可執行文件;Go原生地支持unicode,它可以處理所有國家的語言;go build xxx.go:生成二進制程序;Go代碼是使用包來組織的,類似于其他語言的庫和模塊;一個包由一個或多個.go文件組成,放在一個文件夾中;每個源文件的開始都用package聲明,指明這個文件屬于哪個包;后面跟著它導入的其它包列表,通過import指定,且必須跟在package之后;main包用來定義一個獨立的可執行程序,而不是庫;其中的main函數是程序執行的入口;大部分情況,函數、變量、常量、類型的聲明順序是沒有關系的;Go語句不需要分號結尾,除非多個語句在同一行;gofmt工具可將代碼以標準格式重寫;goimports工具可以按需管理import的其它包;
命令行參數
os.Args變量獲取命令行參數,它是一個字符串的切片(slice),可以通過len()函數獲取長度;
對于slice可以使用s[m:n]語法再取切片,其中0<=m<=n<=len(s),左閉右開取值;
Go只有后自增,且不是一個表達式,意味著這些都是不允許的:j = i++; --i;
for是Go里面唯一的循環語句,形式很多,其中之一是:
for initialization; condition; post {
}
for可以省略init和post部分,只采用condition,這類似于while循環:
for condition {
}
for range循環,range每次迭代產生一對值:索引和索引處元素的值:
for _, val := range os.Args[1:]
空標識符:_,用于語法上需要變量,而邏輯上不需要變量的情況;
strings.Join(s, " ")可將s中的字符串使用空格 拼接起來,效率很高;
time包提供了時間處理相關接口,當前可以記住time.Now()獲取當前時間,time.Time.Sub()計算時間差;
找出重復行
if的條件部分不放在圓括號中;map存儲鍵值對,鍵是能進行==比較的任意類型,值可以是任意類型;使用make()函數創建map:make(map[string]int);bufio包可以簡便高效地處理輸入輸出;bufio.Scanner可以讀取輸入,以行或者單詞斷開輸入;通過bufio.NewScanner()創建一個掃描器;bufio.Scanner.Scan()讀取下一行(讀取失敗時返回false),bufio.Scanner.Text()獲取讀取到的內容;fmt.Printf()支持的轉義字符:%d %x %o %b進制整數,%T %v值類型和內置值, %s %q不帶引號和帶引號的字符串,%t布爾值;fmt.Printf()等以f結尾的函數可以使用%字符格式化輸出;ln結尾的函數使用%v方式格式化參數,并最后換行;map是一種引用類型,子函數中修改map后會在函數外生效;讀取文件采用os.Open()函數,返回os.File, error;os.Open()是流式讀取文件內容;ioutil.ReadFile()可以讀取整個文件的內容;類似還有ioutil.WriteFile()寫入文件;os.Write()寫入文件;strings.Split()是strings.Join()的反操作;
GIF動畫
const聲明常量,在編譯期間就固定了值;常量必須是數字、字符串或布爾值;handler := func(){}聲明函數變量;
獲取一個URL
net/http包用于提供了 http.Get()方法,以請求個給定的url;返回http.Response, errorioutil.ReadAll()可以讀取一個io.Reader中的所有內容,典型為http.Response.Body;
并發獲取多個URL
Body讀取完后記得調用Close()方法,避免資源泄露;io.Copy(ioutil.Discard, resp.Body)可以丟棄Body;time.Since(start).Seconds(),快速計算消耗時間;通過go function()啟動一個goroutine;chan類型用于并發通訊,使用make(chan string)創建儲存string類型的通道;chan使用<-運算符來存/取通道中的數據,箭頭指向chan存儲,否則取出;可以指定只存儲的通道:chan<-,在函數傳參時十分好用;
一個Web服務器
fmt.Fprintf(w, "format", value)向指定位置w輸出;http.HandleFunc(path, handler)指定請求路徑path時調用handler來響應;通過http.Request.URL.Path獲取訪問路徑,路徑值為監聽地址后包括/的部分;同步鎖sync.Mutex,通過mu.Lock()、mu.Unlock()來加鎖/解鎖;獲取請求中的表單數據:先r.ParseForm(),隨后通過r.Form獲取;r.Form是一個map[string][]string;r.Header也類似;在瀏覽器中輸入ip:port?key1=val1&key2=val21,val22即提交Form數據:使用?表示表單數據開始,數據之間采用&連接;Go允許一個簡單語句跟在if條件的前面,如err聲明,可以縮小err作用域;
其他內容
switch語句自動break,可以使用fallthrough改寫這個行為;switch語句可以不帶操作數,此時每條case語句都是一個布爾表達式;type聲明給已有的類型命名,如type Point struct {};Go中的指針:可以使用*獲取指針引用的變量值,使用&獲取變量地址;但指針不支持算術運算;一個關聯了命名類型的函數被稱為方法:func (d Point) ToString() string{};
如有錯誤 ? ,歡迎指正 ??~
如有收獲 🍗,可以考慮點贊👍/評論💬/收藏??/關注👀,大家共同進步~
總結
以上是生活随笔為你收集整理的《Go程序设计语言》- 第1章:入门的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。