小编Ian*_*son的帖子

GO 工作区 - 签入 git 以及使用 git 子模块的内容是什么?

我一直在使用 go 工作区,一切都按预期工作。

尽管我很困惑是否应该提交 go.work 所在的 ROOT 目录,以及实际上是否应该提交 go.work。

如果是这种情况,那么我添加了 git 子模块。

虽然我不确定我是否喜欢这个工作流程 :-) 我的意思是,使用 git 子模块。

所以我有(目录结构)

root(go.work 所在的位置)

  • proj1(也添加到 go.work)
  • proj2(也添加到 go.work 中)

这是我的 go.work 根目录

go 1.18

use (
    ./test-work1
    ./test-work2
)
Run Code Online (Sandbox Code Playgroud)

我找不到任何有关此的信息。如果我们应该管理“根”,那么我认为这需要在 GIT 中结束 - 但如果我不想将其作为一些大型 MONOREPO 进行管理,那么我需要使用 git 子模块。

在此输入图像描述

或者也许“root”永远不应该添加到 git 中而我们在本地使用它?

有谁有良好的工作流程的经验吗?

尽管工作区是一个相当新的补充,但地面上的信息似乎很薄弱。

提前致谢。

go git-submodules

5
推荐指数
0
解决办法
129
查看次数

从 exec.Command 逐行捕获 stdout 并通过管道传输到 os.Stdout

有人可以帮忙吗?

我有一个通过 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)

channel go

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

标签 统计

go ×2

channel ×1

git-submodules ×1