本文目錄一覽:
- 1、golang如何創建目錄
- 2、求助,安裝golang環境後運行報錯
- 3、golang怎麼逐個讀取目錄下的所有文件
- 4、golang net/http包 http請求的位元組碼讀取與解析。
- 5、golang生成JSON及解析JSON
golang如何創建目錄
golang中關於目錄與文件名等操作都在os這個包中,具體的創建目錄都是通過Mkdir和MkdirAll這2個函數來實現的,這兩個函數用法一致
os.Mkdir(dirName string, perm FileMode)
dirName即要創建的目錄(文件夾路徑),可以是絕對路徑,也可以是相對路徑(相對於GOPATH)
perm表示創建的目錄的權限,如0777(讀r權限值為4,寫權限w值為2,執行權限x值為1)
如:我要在/data/program/goapp這個目錄下創建一個golang這個子目錄,示例如下:
package main
import (
“os”
“fmt”
)
func main() {
err := os.Mkdir(“/data/program/goapp/golang”, 0666)
if err != nil {
fmt.Println(err)
}
}
註:Mkdir和MkdirAll的區別
Mkdir創建目錄,它的父級目錄必須是存在的,不然創建會失敗
MkdirAll可以遞歸創建目錄,即只要根目錄存在即可,如下:
err := os.MkdirAll(“/data/program/goapp/golang/test/hello”, 0766)
if err != nil {
fmt.Println(err)
}
本例中:/data/program/goapp是已經存在的目錄,而子目錄golang/test/hello是不存在,此時要使用MkdirAll來創建
求助,安裝golang環境後運行報錯
下載WebStorm 10
安裝WebStorm
Windows請參考Win版的安裝方式
下載Golang Plugin(最新版本是201)
為WebStorm安裝Go Plugin
啟動WebStorm(如果你更改了一些默認配置會提示重啟)
安裝下載好的Golang Plugin
Configure – Plugins
從本地磁盤選擇下載好的Go Plugin,安裝後重啟WebStorm
創建一個Golang項目
選擇Empty Project,選擇好Golang項目的文件目錄,點擊Create
創建一個Go文件main.go
設置Golang SDK,並在main.go里編寫你的Golang代碼
配置Golang運行環境
點擊右上角的向下三角形按鈕,在彈出窗口點擊加號新增一個Go Application
在File項選擇我們剛才的main.go文件(請注意提示,記得把文件的包名改為main才可以運行)
點擊右上角的綠色三角形運行
到此配置完畢,enjoy coding!
golang怎麼逐個讀取目錄下的所有文件
CFileFindff;CStringszName=dir;if(szName.Right(1)!=”\\”){szName+=”\\”;}szName+=”*.*”;BOOLres=ff.FindFile(szName);while(res){res=ff.FindNextFile();if(!ff.IsDots())//目錄是文件夾{//如果是一個子目錄,用遞歸繼續往深一層找TravelDir(dir+”\\”+ff.GetFileTitle());}elseif(!ff.IsDirectory()!ff.IsDots())//到達最低層的文件{CStringfileName=ff.GetFileName();}}}ff.Close();//關閉MessageBox(fileName);
golang net/http包 http請求的位元組碼讀取與解析。
先配置Header最長讀取時間、req最長讀取時間、req最大讀取長度默認6M。
RFC7230禁止\r\n參數,Url中只允許包含英文字母(a-zA-Z)、數字(0-9)、-_.~4個特殊字符以及所有保留字符。但go net/http包放寬了這個要求。
先構建newTextprotoReader,由於緩衝區是對象復用的,用完後要defer put。共完以以下解析任務:
TextprotoReader數據結構,將位元組碼Reader轉成文本Reader。
第一步,從第一行解析出method uri prototype。
第二步解析URL。url.URL數據結構:
解析Scheme,協議前綴(小寫)。有查詢參數?,則配置url.ForceQuery url.RawQuery。有認證信息///…//,則解析url.User url.Host。最後配置url.Path和url.RawPath,如果Path==RawPath,則RawPath=””。
第三步解析MIMEHeader。
第四步readTransfer。重新配置如下參數:RequestMethod ProtoMajor ProtoMinor Header Trailer ContentLength Close。對於Body,如果encodings支持chunked,讀取流用chunkedReader包裹。默認情況用LimitedReader,無body賦空的struct{}。
以下情況返回非空err,示得到正確的請求:
最後配置req.ctx req.RemoteAddr req.TLS body.doEarlyClose = true。
構建Response:
其中closeNotifyCh必須在構建時初始化,沒有content所以先置contentLength為-1。
配置w.cw並被w.w包裹。w.cw緩衝默認大小2M。
獲取Request可能出現如下錯誤:
先上響應數據結構:
response字段可以分類為:大對象、緩衝、KV對或bool型的狀態參數。
大對象有:
狀態字段:
chunkWriter數據結構:
chunkWriter包裹了Response,功能之一是完成Header設置,包括Content-Type Content-Length chunk-header。bufio.Writer是chunkWriter是緩衝包裹。
handler將響應寫入到response.w。
調用w.w.Flush()將w寫入到cw,注意到Flush()操作,如果未刷空緩存並報錯,觸發拷貝操作。報錯不會退回已寫出的數據。
進而調用cw.Write(),根據cw.chunking參數。
putBufioWriter(w.w)清空resp.w緩衝,如果池化放回sync.pool。
根據chunkWriter的定義,w.cw.close()負責cw的結束工作:寫入換行符和resp.trailers數據。
最後刷新TCP緩衝w.conn.bufw.Flush(),完成響應包發送。並正確關閉request。
golang生成JSON及解析JSON
一、JSON解析到結構體
在介紹這部分之前先簡要介紹一下Json語法
JSON 語法是 JavaScript 語法的子集。JSON 語法是 JavaScript 對象表示法語法的子集。
數據在名稱/值對中
數據由逗號分隔
大括號保存對象
中括號保存數組
1.JSON名稱/值對
2.JSON值
可以是:
JSON數據
JSON 數字可以是整型或者浮點型
JSON對象
JSON 對象在大括號({})中書寫:
對象可以包含多個名稱/值對:
JSON數組
JSON 數組在中括號中書寫:
數組可包含多個對象:
JSON布爾值
二、JSON轉map
輸出結果:
三、生成JSON
本文來自php中文網的 golang教程 欄目:
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/232375.html