是否有任何API让maingoroutine永远睡觉?
换句话说,我希望我的项目总是运行,除非我停止它.
我是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.
我的问题是:
你如何从"并发地图读取和地图写入"的运行时恐慌中恢复?恢复的通常延迟似乎不起作用.这是为什么?
我知道你不应该在并发环境中使用地图,但仍然:如何在这里恢复?
例:
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)
请添加恢复代码.:)
说我有以下代码:
m := map[string]string{}
//... do stuff to the map
b, err := json.Marshal(m)
Run Code Online (Sandbox Code Playgroud)
在这种情况下有没有办法json.Marshal调用会返回错误?
我想知道是出于好奇,部分是考虑我是否需要担心错误检查.
go ×4
dictionary ×2
goroutine ×2
blocking ×1
callstack ×1
concurrency ×1
json ×1
marshalling ×1
node.js ×1
panic ×1
recursion ×1