Go语言 将对象树的访问权限授予外部文件

3b6akqbq  于 2023-04-09  发布在  Go
关注(0)|答案(1)|浏览(107)

假设我在模块中有以下.go文件结构:

  • tree_definition.go
  • tree_creation.go

tree_creation解析某个文件,并使用tree_definition中定义的数据结构和方法(以及函数)从该文件创建对象树(简称为otree)。
在解析过程中,我看到了外部的.go文件,其中包含一些代码,旨在访问和修改otree。
解析完成后,external.go中的代码应该能够通过我在tree_definition中定义的API使用otree并修改它。这一切都发生在运行时。
澄清:

  • 是的,我正在尝试复制DOM的行为
  • external.go来自另一个目录,而不是来自模块内部
  • external.go只有在运行时tree_creation向otree的数据结构添加external.go时才可见

我已经完成了复制它的几乎所有步骤。这是最后一部分。遗憾的是,我现在不能提供Git的链接,所以你可以自己看到它,但我会感谢每一个可以帮助我澄清情况的评论。
最好的问候!
我想我有主意了。我稍后会贴出来。

ru9i0ody

ru9i0ody1#

好了开始吧

最后,与我的朋友的帮助下,Bing聊天,我能够找到简单的解决方案,而不使用内存文件或HTTP请求通过localhost.提出的解决方案是优雅的,对我来说是完美的作品!
我仍然认为我会使用内存文件,但我们会看到。这取决于可伸缩性。
另外,特别感谢
@BurakSerdar
他的回答。

package main

// This will be in the runtime file
import (
    "bufio"
    "fmt"
    "os/exec"
)

func main() {
    cmd := exec.Command("go", "run", "user_defined.go")
    stdout, err := cmd.StdoutPipe()
    if err != nil {
        panic(err)
    }
    err = cmd.Start()
    if err != nil {
        panic(err)
    }
    scanner := bufio.NewScanner(stdout)
    for scanner.Scan() {
        fmt.Println(scanner.Text())
        if scanner.Text() == "some_command" {
            fmt.Println("found some_command")
        }
        if scanner.Text() == "another_command" {
            fmt.Println("found another_command")
        }
    }
    err = cmd.Wait()
    if err != nil {
        panic(err)
    }
}

相关问题