1 回答
TA贡献1809条经验 获得超8个赞
如果我正确理解你的问题,我认为这段代码更好。它也确实保证了订单。
package main
import (
"fmt"
)
// sendFloat64 simulates another that sends an
// undetermined amount of float64.
func sendFloat64(ch chan<- float64) {
originalSlice := []float64{90, 180, 270, 300, 330, 358, 359}
for _, v := range originalSlice {
// send the data in order as soon as possible to the reciver
ch <- v
fmt.Println("SendFloat64: send data to channel", v)
}
close(ch)
}
// RecreateSlice receives the values and then it will be
// incorporated in a slice respecting the order in which they were sent.
func RecreateSlice() []float64 {
var stream []float64
// Create a float64 channel with a buffer of 1
channel := make(chan float64, 1)
go sendFloat64(channel)
// Append data until the channel is closed
for data := range channel {
fmt.Println("RecreateSlice: Data received from channel", data)
stream = append(stream, data)
}
return stream
}
func main() {
result := RecreateSlice()
fmt.Println("MainSlice: ", result)
}
输出:
RecreateSlice: Data received from channel 90
SendFloat64: send data to channel 90
SendFloat64: send data to channel 180
SendFloat64: send data to channel 270
RecreateSlice: Data received from channel 180
RecreateSlice: Data received from channel 270
RecreateSlice: Data received from channel 300
SendFloat64: send data to channel 300
SendFloat64: send data to channel 330
SendFloat64: send data to channel 358
RecreateSlice: Data received from channel 330
RecreateSlice: Data received from channel 358
RecreateSlice: Data received from channel 359
SendFloat64: send data to channel 359
MainSlice: [90 180 270 300 330 358 359]
注意 SendFloat64 的顺序:
90, 180, 270, 300, 330, 358, 359
注意 RecreateSlice 的顺序:
90, 180, 270, 300, 330, 358, 359
并且 RecreateSlice 返回的切片是有序的(验证)
您可以根据此代码的想法扩展您的解决方案。我试图对部分代码进行注释,以便您理解。
- 1 回答
- 0 关注
- 127 浏览
添加回答
举报
