小编rak*_*aka的帖子

func main()上的频道发送和接收

我一直在学习频道,教科书的例子看起来简单易懂.但是,我无法理解以下行为.

func main() {
     message := make(chan string)

     message <- "ping"
     fmt.Println(<-message)
}
Run Code Online (Sandbox Code Playgroud)

为什么以上导致错误?我知道我可以通过引入一个例程来让发送者和接收者都准备就绪.但是,如果是这种情况,为什么以下工作呢.

func main() {
    message := make(chan string,1)

    message <- "ping"
    fmt.Println(<-message)

}
Run Code Online (Sandbox Code Playgroud)

*********感谢Joe McMahon的回答*********
*********下面记录我的参考*********
我假设了一个缓冲区1(与2不同)也会阻塞主程序,直到找到相应的接收器.看起来像1的缓冲区就像0和1一样工作,并且不会阻塞第0次写入/读取的代码.要使用缓冲区演示块,

func main() {
    message := make(chan string, 1)

    message <- "ping1"
    message <- "ping2"
    fmt.Println(<-message) //Unreachable code.
}
Run Code Online (Sandbox Code Playgroud)

go

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

如何使用指针修改切片

为什么不在以下代码中修改切片:

package pointers

import "fmt"

func modifyObject(v *Vertex) {
    v.x = v.x * v.x
    v.y = v.y * v.y
}

func modifyArray(vertices *[]Vertex) {
    for _, v := range *vertices {
        v.x = v.x * v.x
        v.y = v.y * v.y
    }
}

func DemoPointersArray() {
    v := Vertex{2, 3}
    modifyObject(&v)
    fmt.Println("Vertex modified successfully:", v)

    v1 := Vertex{2, 3}
    v2 := Vertex{20, 30}
    vertices := []Vertex{v1, v2}
    modifyArray(&vertices)
    fmt.Println("Vertices are NOT modified:", vertices)
}
Run Code Online (Sandbox Code Playgroud)

输出:
顶点修改成功:{4 9}
顶点未修改:[{2 3} {20 …

go

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

nodejs 承诺异步等待顺序执行

如何让 demo() 依次执行。

demo()

async function demo() {
        doAll()
        console.log("I DO NOT print sequentially");
}

async function doAll() {
  var number = await getNumber();
  var double = await doubleWithTimeout(number);
  console.log(number,double)
}

async function getNumber() {
    return new Promise(function(resolve, reject) {
        var a = 2;
        resolve(a);
    });
}

async function doubleWithTimeout(x) {
    return new Promise(function(resolve, reject) {
        setTimeout(() => {
            resolve(x * 2);
        }, 2  );
    });
}
Run Code Online (Sandbox Code Playgroud)

结果:
我不按顺序打印
2 4

预期结果:
2 4
我按顺序打印

我希望我可以摆脱下面的代码,但你不能在承诺中等待:

async function demo() { …
Run Code Online (Sandbox Code Playgroud)

node.js

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

标签 统计

go ×2

node.js ×1