考虑下面的小片段:
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
wg.Add(2)
go func() {
defer wg.Done()
for i := 1; i < 100; i++ {
fmt.Println("A:", i)
}
}()
go func() {
defer wg.Done()
for i := 1; i < 100; i++ {
fmt.Println("B:", i)
}
}()
wg.Wait()
}
Run Code Online (Sandbox Code Playgroud)
在 delve 中,我们可以使用以下命令轻松地在 goroutine 之间切换
goroutine
goroutine <id>
goroutine <id> <command>
Run Code Online (Sandbox Code Playgroud)
如果我想在 goroutine 1 中逐步运行,只需使用命令
goroutine 1 next
Run Code Online (Sandbox Code Playgroud)
在vscode中,似乎处理goroutines的唯一方法是调用堆栈,但是,这似乎是go runtime的内部线程,而不是goroutines,那么如何将运行过程集中在指定的goroutine中呢?
当泛型函数需要一个参数为时T,为什么它要使用参数为&mut T?
我试图使用serialize_into和serialize_from在bincode板条箱中将字符串序列化到文件。签名是
pub fn serialize_into<W, T: ?Sized>(writer: W, value: &T) -> Result<()>
where
W: std::io::Write,
T: serde::Serialize
Run Code Online (Sandbox Code Playgroud)
和
pub fn deserialize_from<R, T>(reader: R) -> Result<T>
where
R: std::io::Read,
T: serde::de::DeserializeOwned
Run Code Online (Sandbox Code Playgroud)
我尝试使用std::BufWriter和进行序列化,BufReader但似乎只能使用&mut BufWriter。
考虑一下:
use bincode;
use std::io::{BufWriter, BufReader};
use std::fs::File;
fn main() {
let x = String::from("hello");
let mut f1 = BufWriter::new(File::create("foo.txt").unwrap());
bincode::serialize_into( &mut f1, &x).unwrap();
let mut f2 = BufReader::new(File::open("foo.txt").unwrap());
let y: …Run Code Online (Sandbox Code Playgroud)