私はランダムに多数のログメッセージを生成していますが、それらが生成された後、それらをログに書き込む前にタイムスタンプでソートする必要があります。私はsort
ライブラリのsort.Interface
を利用していますので、タイムスタンプに基づいてソートすることができます。私はファンイン並行性設計を使用しています。そのため、ソート機能はゴルーチンからのすべてのログメッセージを集計し、ソートします。ここでGolang - ファンの並べ替え
が私のコードです:
type CommonLogFormat struct {
HostIP string
UserIdent string
User string
Timestamp string
Request string
HttpStatusCode int
Size int
}
type Logs struct {
Messages []*CommonLogFormat
}
func sortByTimestamp(ch chan <- *CommonLogFormat) *Logs {
logs := &Logs{Messages: make([]*CommonLogFormat, 1)}
for i := range ch {
logs.Messages = append(logs.Messages, <- i)
}
sort.Sort(logs)
return logs
}
func (l Logs) Len() int {
return len(l.Messages)
}
func (l Logs) Less(i,j int) bool {
return l.Messages[i].Timestamp < l.Messages[j].Timestamp
}
func (l *Logs) Swap(i,j int) {
l.Messages[i], l.Messages[j] = l.Messages[j], l.Messages[i]
}
しかし、私は、チャネルからのログメッセージを受信するために行くとき、私はこのエラーを取得する:
invalid operation: <-i (receive from non-chan type *CommonLogFormat)
私は値を受け取ることができないのはなぜチャンネルから?
ああ、大丈夫です。それは実際には感謝します、ありがとう! – mxplusb