【发布时间】:2017-04-19 04:25:22
【问题描述】:
我正在随机生成一堆日志消息,在它们生成之后,我需要在将它们写入日志之前按时间戳对它们进行排序。我正在使用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)
为什么我无法从频道接收到值?
【问题讨论】:
标签: sorting for-loop go concurrency channel