本文目錄一覽:
怎麼設置golang的環境變量 linux
Linux下安裝Go開發環境操作步驟 第一步:登陸linux 第二步:用命令yum install mercurial安裝 mercurial包 第三步:用命令yum install git安裝git包 第四步:用命令yum install gcc安裝gcc
golang變量(二)——map和slice詳解
衍生類型,interface{} , map, [] ,struct等
map類似於java的hashmap,python的dict,php的hash array。
常規的for循環,可以用for k,v :=range m {}. 但在下面清空有一個坑注意:
著名的map[string]*struct 副本問題
結果:
Go 中不存在引用傳遞,所有的參數傳遞都是值傳遞,而map是等同於指針類型的,所以在把map變量傳遞給函數時,函數對map的修改,也會實質改變map的值。
slice類似於其他語言的數組(list,array),slice初始化和map一樣,這裡不在重複
除了Pointer數組外,len表示使用長度,cap是總容量,make([]int, len, cap)可以預申請 比較大的容量,這樣可以減少容量拓展的消耗,前提是要用到。
cap是計算切片容量,len是計算變量長度的,兩者不一樣。具體例子如下:
結果:
分析:cap是計算當前slice已分配的容量大小,採用的是預分配的夥伴算法(當容量滿時,拓展分配一倍的容量)。
append是slice非常常用的函數,用於添加數據到slice中,但如果使用不好,會有下面的問題:
預期是[1 2 3 4 5 6 7 8 9 10], [1 2 3 4 5 6 7 8 9 10 11 12],但實際結果是:
注意slice是值傳遞,修改一下:
輸出如下:
== 只能用於判斷常規數據類型,無法使用用於slice和map判斷,用於判斷map和slice可以使用reflect.DeepEqual,這個函數用了遞歸來判斷每層的k,v是否一致。
當然還有其他方式,比如轉換成json,但小心有一些異常的bug,比如html編碼,具體這個json問題,待後面在分析。
Golang 公共變量包——expvar
expvar 包是 Golang 官方提供的公共變量包,它可以輔助調試全局變量。支持一些常見的類型: float64 、 int64 、 Map 、 String 。如果我們的程序要用到上面提的四種類型(其中,Map 類型要求 Key 是字符串)。可以考慮使用這個包。
這些基礎的功能就不多說了,大家可以直接看官方的 文檔 。
看源碼的時候發現一個非常有意思的調試接口, /debug/vars 會把所有註冊的變量打印到接口裏面。這個接口很有情懷。
感覺這個包還是針對簡單變量,比如整形、字符串這種比較好用。
看到就寫了,並沒有什麼沉澱,寫得挺亂的。這個包很簡單,但是裏面還是有些可以借鑒的編碼和設計。新版本的 Golang 已經能解析整形為 Key 的哈希表了,這個包啥時候能跟上支持一下?
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/297598.html