go - slice 自动排序?

标签 go

尽管我想创建自己的使用goroutine进行练习的管道,但有些特别奇怪。
我使用随机烫发函数生成一些int数,显然是随机的,我将它们写到IO writer,然后从IO reader读取它们,因为它的二进制源,所以我将它们打印出来并进行排序!

这是代码:

func RandomSource(tally int) chan int {
    out := make(chan int)
    sli := rand.Perm(tally)
    fmt.Println(sli)
    go func() {
        for num := range sli {
            out <- num
        }
        close(out)
    }()
    return out
}
func ReaderSource(reader io.Reader) chan int {
    out := make(chan int)
    go func() {
        buffer := make([]byte, 8)
        for ; ; {
            n, err := reader.Read(buffer)
            if n > 0 {
                v := int(binary.BigEndian.Uint64(buffer))
                out <- v
            }
            if err != nil {
                break
            }
        }
        close(out)
    }()
    return out
}
func WriterSink(writer io.Writer, in chan int) {
    for v := range in {
        buffer := make([]byte, 8)
        binary.BigEndian.PutUint64(
            buffer, uint64(v))
        writer.Write(buffer)
    }
}
func main() {
    fileName := "small.in"
    file, err := os.Create(fileName)
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()

    p := RandomSource(500)
    WriterSink(file, p)

    file, err = os.Open(fileName)
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()

    p = ReaderSource(file)
    for v := range p {
        fmt.Println(v)
    }
}

最佳答案

range返回索引作为数组或 slice 的第一个值,该值始终从0到len - 1。如果要遍历值本身而不是索引集,请使用for _, num := range sli {

关于go - slice 自动排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59502588/

相关文章:

function - Golang 闭包不存储捕获的变量?

multithreading - 在 Go 中关闭自馈 channel

docker - 容器中的 Go API 不返回任何响应

pointers - 在 Go-lang 中返回对结构的引用

regex - 将字符串按空格分割成数组,除非部分被引用,golang 中异常(exception)

python - 客户端脱机时VerneMQ单个发布消息丢失

unit-testing - 测试 assert.Equal 除了一个字段

firebase - 在 Golang 中仅使用环境变量初始化 Firebase Admin SDK

mysql - MySQL release_lock()是否阻塞?

go - 无法让接口(interface)片段工作