相关疑难解决方法(0)

永远去项目的主要goroutine睡眠?

是否有任何API让maingoroutine永远睡觉?

换句话说,我希望我的项目总是运行,除非我停止它.

go blocking goroutine

18
推荐指数
2
解决办法
5214
查看次数

Go有"无限调用堆栈"等价吗?

我是Go的新手,来自Node.JS.

在Node中,如果我运行它:

function run(tick = 0) {
  if (tick < 1000000) {
    return run(tick + 1);
  }

  return 0;
}

console.log(run());
Run Code Online (Sandbox Code Playgroud)

程序将崩溃,因为超出了最大调用堆栈大小.

如果我在Go中这样做:

package main

import "fmt"

func run(tick int) (int) {
    if (tick < 1000000) {
        return run(tick + 1)
    }

    return 0
}

func main() {
    fmt.Println(run(0))
}
Run Code Online (Sandbox Code Playgroud)

这将运行并打印0到stdout.

我的问题是:

  • 是否存在最大数量的调用,我所提供的Go示例将失败?
  • 这样的代码是Go中的反模式吗?

recursion callstack go node.js

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

如何从并发映射写入中恢复?

你如何从"并发地图读取和地图写入"的运行时恐慌中恢复?恢复的通常延迟似乎不起作用.这是为什么?

我知道你不应该在并发环境中使用地图,但仍然:如何在这里恢复?

例:

package main

import "time"

var m = make(map[string]string)

func main() {
    go func() {
        for {
            m["x"] = "foo"
        }
    }()
    go func() {
        for {
            m["x"] = "foo"
        }
    }()

    time.Sleep(1 * time.Second)
}
Run Code Online (Sandbox Code Playgroud)

请添加恢复代码.:)

concurrency dictionary go panic goroutine

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

可以将map [string]字符串编组为json会返回错误吗?

说我有以下代码:

m := map[string]string{}
//... do stuff to the map
b, err := json.Marshal(m)
Run Code Online (Sandbox Code Playgroud)

在这种情况下有没有办法json.Marshal调用会返回错误?

我想知道是出于好奇,部分是考虑我是否需要担心错误检查.

json dictionary marshalling go

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