flag 是Go 標(biāo)準(zhǔn)庫提供的解析命令行參數(shù)的包。
成都創(chuàng)新互聯(lián)公司是一家專注于成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)與策劃設(shè)計,大邑縣網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)10年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:大邑縣等地區(qū)。大邑縣做網(wǎng)站價格咨詢:18980820575
使用方式:
flag.Type(name, defValue, usage)
其中Type為String, Int, Bool等;并返回一個相應(yīng)類型的指針。
flag.TypeVar(flagvar, name, defValue, usage)
將flag綁定到一個變量上。
expvar 包是 Golang 官方提供的公共變量包,它可以輔助調(diào)試全局變量。支持一些常見的類型: float64 、 int64 、 Map 、 String 。如果我們的程序要用到上面提的四種類型(其中,Map 類型要求 Key 是字符串)??梢钥紤]使用這個包。
這些基礎(chǔ)的功能就不多說了,大家可以直接看官方的 文檔 。
看源碼的時候發(fā)現(xiàn)一個非常有意思的調(diào)試接口, /debug/vars 會把所有注冊的變量打印到接口里面。這個接口很有情懷。
感覺這個包還是針對簡單變量,比如整形、字符串這種比較好用。
看到就寫了,并沒有什么沉淀,寫得挺亂的。這個包很簡單,但是里面還是有些可以借鑒的編碼和設(shè)計。新版本的 Golang 已經(jīng)能解析整形為 Key 的哈希表了,這個包啥時候能跟上支持一下?
先看一下目錄結(jié)構(gòu),注意這里的src名稱是必須的,go在設(shè)置了GOPATH后,默認(rèn)會添加src去尋找package,暫未查詢是否有方法不按照src查詢
根據(jù)上面的描述,Go語言中通過包中函數(shù)的名稱來區(qū)分公共函數(shù)和私有函數(shù),我們在main函數(shù)中是無法調(diào)用myPrivateFunc的
此時如果執(zhí)行通過go run方式執(zhí)行,會看到如下的提示信息,這與大部分語言對于包管理方式相關(guān),所以我們通過兩種不同的方法來讓代碼執(zhí)行起來
返回如下,這里面對我們后續(xù)執(zhí)行有影響的兩個參數(shù)GO111MODULE和GOPATH
如果要使用gopath模式引用包,則需要關(guān)閉mod模式
設(shè)置GOPATH為當(dāng)前路徑,即main.go所在的路徑
此時再查看go env時,GOPATH已經(jīng)發(fā)生改變
我們再次嘗試執(zhí)行代碼
可以看到public函數(shù)被調(diào)用
你需要設(shè)置 GOPATH 環(huán)境變量
你 main.go 中需要 import 相應(yīng)包
你 調(diào)用處需要帶上包前綴,比如 tempconv.FToC
json格式可以算我們?nèi)粘W畛S玫男蛄谢袷街涣?,Go語言作為一個由Google開發(fā),號稱互聯(lián)網(wǎng)的C語言的語言,自然也對JSON格式支持很好。官方提供的Json解析包已經(jīng)非常強大,我們接下來講解Json的序列化與反序列化操作。另外還有一些第三方的Json解析庫,也能夠高效的操作Json對象,比如simplejson,ffjson等。下面是兩個比較重要的函數(shù):
? Json Marshal:將數(shù)據(jù)編碼成json字符串
Marshal 用于將struct對象序列化到j(luò)son對象中。v是interface{}類型,任何類型都實現(xiàn)了空接口。
1:tag中的第一個參數(shù)是用來指定別名,比如Name 指定別名為 username `json:"username"`
2:如果不想指定別名但是想指定其他參數(shù)用逗號來分隔,omitempty 指定到一個field時,如果在賦值時對該屬性未賦值或者對該屬性賦值為 zero value,那么將Person序列化成json時會忽略該字段
3:- 指定到一個field時,無論有沒有值,將Person序列化成json時都會忽略該字段
4:string 指定到一個field時,比如Person中的Count為int類型 如果沒有任何指定在序列化到j(luò)son之后也是int 比如這個樣子 “Count”:0,但是如果指定了string之后序列化之后也是string類型的,那么就是這個樣子"Count":"0"
? struct序列化為Json
? slice序列化為Json
? map 序列化為Json
? Json Unmarshal:將json字符串解碼到相應(yīng)的數(shù)據(jù)結(jié)構(gòu),Unmarshal的第一個參數(shù)是[]byte,第二個參數(shù)是接受json解析的數(shù)據(jù)結(jié)構(gòu)。
下面我們依次講解Json的操作。
1:將Json序列化進入結(jié)構(gòu)體
2::將Json序列化到結(jié)構(gòu)體slice
3:將Json序列化進Map
4:將Json序列化進Slice