小编Bob*_*Bob的帖子

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

在下面这段代码中,我希望输出为0,1,2,3,...,9.但是,只产生输出10,10,...,10.

package main

import "fmt"

func adder() []func() {
    out := []func(){}
    for i := 0; i < 10; i++ {
        out = append(out, func() { fmt.Println(i) })
    }

    return out
}

func main() {
    out := adder()
    for i := 0; i < 10; i++ {
        out[i]()
    }
}
Run Code Online (Sandbox Code Playgroud)

我的心理模型表明,每次在for循环中都会生成并存储一个新函数,但似乎并非如此.有没有一个解决方案来生成新的功能而不修改签名(没有参数或全局变量),但仍保持i的当前值?

closures function return-value go

3
推荐指数
1
解决办法
61
查看次数

为什么 Node.js 中阻塞文件 I/O 的异步性能比同步差?

通过阅读 Stack Overflow 上有关同步与异步的一些帖子,看来异步应该具有较小的开销,或者比阻塞 I/O 操作的同步调用更快:

我研究过的一些地方: 非阻塞 I/O 真的比多线程阻塞 I/O 更快吗?如何? Javascript 异步函数的开销是多少

我写了一个小型基准测试,制作 4 个 256MB 到 1GB 的文件来查看fs.readFile().

const {performance} = require('perf_hooks');
const fs = require('fs');
const {execSync} = require("child_process");

const sizes = [512, 1024, 256, 512]; //file sizes in MiB
function makeFiles() {
    for (let i = 0; i < sizes.length; i++) {
        execSync(`dd if=/dev/urandom of=file-${i}.txt bs=1M count=${sizes[i]}`, (error, stdout, stderr) => {
            console.log(`stdout: ${stdout}`);
        });
    }
}

function syncTest() {
    const startTime = …
Run Code Online (Sandbox Code Playgroud)

asynchronous fs node.js

1
推荐指数
1
解决办法
1603
查看次数

标签 统计

asynchronous ×1

closures ×1

fs ×1

function ×1

go ×1

node.js ×1

return-value ×1