日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

《Go程序设计语言》- 第1章:入门

發布時間:2023/12/2 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《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, error
  • ioutil.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章:入门的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。