我正在随机生成一堆日志消息,在它们生成后,我需要按时间戳对它们进行排序,然后再写入日志。我正在利用sort
库的sort.Interface
方面,以便根据我的时间戳进行排序。我正在使用一个扇入并发设计,因此我的排序函数聚合了所有goroutine的日志消息,然后对它们进行排序。
这是我的代码:
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)
为什么我无法从通道接收值?