web-dev-qa-db-ja.com

チャネルへのポインタの使用

チャネルへのポインタを使用することは良い習慣ですか?たとえば、データを同時に読み取り、チャネルを使用してそれらのデータを_map[string]sting_に渡し、このチャネルをgetSameValues()内で処理します。

_func getSameValues(results *chan map[string]string) []string {
    var datas = make([]map[string]string, len(*results))
    i := 0
    for values := range *results {
        datas[i] = values
        i++
    }
}
_

私がこれを行う理由は、_chan map[string]string_がマップ内に約数百万のデータを持ち、それが複数のマップになるためです。

したがって、メモリのリソースを節約するためにデータをコピーしないように、関数へのポインタを渡すことができれば、それは良いアプローチだと思います。

効果的なgo で良い習慣を見つけられませんでした。ですから、ここでの私のアプローチには少し疑問があります。

11
Gujarat Santana

ゴーランドのすべては価値によって渡されます。ポインタもタイプであり、メモリアドレスの値が割り当てられます。ですから、それらも価値観です。

(リックの答えを拡張する)実際には[〜#〜] six [〜#〜]型があり、ポインタ値とこれらへのポインタ(つまりポインタへのポインタ)はとにかく役に立ちません:

1. pointers
2. slices, 
3. maps, 
4. channels 
5. interfaces
6. function
0
human