我一直在使用 go 工作区,一切都按预期工作。
尽管我很困惑是否应该提交 go.work 所在的 ROOT 目录,以及实际上是否应该提交 go.work。
如果是这种情况,那么我添加了 git 子模块。
虽然我不确定我是否喜欢这个工作流程 :-) 我的意思是,使用 git 子模块。
所以我有(目录结构)
root(go.work 所在的位置)
这是我的 go.work 根目录
go 1.18
use (
./test-work1
./test-work2
)
Run Code Online (Sandbox Code Playgroud)
我找不到任何有关此的信息。如果我们应该管理“根”,那么我认为这需要在 GIT 中结束 - 但如果我不想将其作为一些大型 MONOREPO 进行管理,那么我需要使用 git 子模块。
或者也许“root”永远不应该添加到 git 中而我们在本地使用它?
有谁有良好的工作流程的经验吗?
尽管工作区是一个相当新的补充,但地面上的信息似乎很薄弱。
提前致谢。
有人可以帮忙吗?
我有一个通过 exec.CommandContext 运行的应用程序(因此我可以通过 ctx 取消它)。除非出错,否则它通常不会停止。
我目前将其输出中继到 os.stdOut ,效果很好。但我也想通过通道获取每一行 - 这背后的想法是我将在该行上查找正则表达式,如果它为真,那么我将设置一个内部状态“ERROR”,例如。
虽然我无法让它工作,但我尝试了NewSscanner。这是我的代码。
正如我所说,它确实输出到 os.StdOut,这很棒,但我希望接收我设置的频道中发生的每一行。
有任何想法吗 ?
提前致谢。
func (d *Daemon) Start() {
ctx, cancel := context.WithCancel(context.Background())
d.cancel = cancel
go func() {
args := "-x f -a 1"
cmd := exec.CommandContext(ctx, "mydaemon", strings.Split(args, " ")...)
var stdoutBuf, stderrBuf bytes.Buffer
cmd.Stdout = io.MultiWriter(os.Stdout, &stdoutBuf)
cmd.Stderr = io.MultiWriter(os.Stderr, &stderrBuf)
lines := make(chan string)
go func() {
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
fmt.Println("I am reading a line!")
lines <- scanner.Text()
}
}() …Run Code Online (Sandbox Code Playgroud)