로그 메시지를 무작위로 생성하고 생성 된 후 로그에 기록하기 전에 시간 소인별로 정렬해야합니다. 나는 내 타임 스탬프에 따라 정렬 할 수 있도록 sort
라이브러리의 sort.Interface
부분을 활용하고 있습니다. 팬 - 인 동시성 (fan-in concurrency) 디자인을 사용하고 있으므로 정렬 기능은 goroutines의 모든 로그 메시지를 집계 한 다음 정렬합니다.Golang - 팬으로 정렬
invalid operation: <-i (receive from non-chan type *CommonLogFormat)
이 왜 값을받을 수 없습니다 : I 채널에서 로그 메시지를받을 갈 때, 나는이 오류가, 그러나
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]
}
: 여기
내 코드입니다 채널에서?
아, 그래. 실제로 많은 의미가 있습니다. 감사합니다! – mxplusb