私は目的を追求するHTTPログのロードを解析して、各IPアドレスが生成された要求の数を示します。Golang:連想スライスを入力する最適な方法は?
私がした最初の事は次のとおりです。ただし
var hits = make(map[string]uint)
// so I could populate it with
hits[ipAddr]++
、hits[string]uint
は、文字列の識別子としてIPアドレスを使用していること、それはすぐに明らかになるように、私は、それは「型付け」したいと思います。私はよく、多分構造体は私を助けることができる、と思った:
type Hit struct {
IP string
Count uint
}
しかし、そのように(私が思う)今、私はどのように実際にそれが数だインクリメントする具体的なヒットを探すために、ので、私は、パフォーマンスを失いますよ。私はここでは妄想になることができると容認し、ループのために簡単に行くことができます:
var hits = make([]Hit)
// TrackHit just damn tracks it
func TrackHit(ip string) {
for hit, _ := range hits {
if hit.IP == ip {
hit.Count++
return
}
}
append(hits, Hit{
IP: ip,
Count: 0,
})
}
しかし、それはちょっと...次善のようです。私は1行で書くことができるすべてがプロとして輝きます、そして、1行が13に変わるとき、私は "whaaa?ここで間違ったことをしています、ママ?
ここに「Go」と入力してください。
おかげ
タイプIP文字列;タイプヒットマップ[IP] uint – Uvelichitel
そして 'ヒット[IP {ipAddr}] ++'?そしてもしそうなら、2倍のメモリを割り当てますか?ループする各文字列に新しいIPを作成するからです。 –
ヒット[IP( "127.0.0.1")] ++;それは多かれ少なかれ慣用的な方法です。 – Uvelichitel