gpt4 book ai didi

golang 从文件中填充结构字段

转载 作者:IT王子 更新时间:2023-10-29 00:44:15 26 4
gpt4 key购买 nike

我对使用 golang 进行开发还很陌生,所以如果这是一个基本问题,我深表歉意。我没有看到已经问过的类似问题;如果有,请指给我看(谢谢)。

完整代码(在我问这个问题时,因为它不是不可变的)在 http://play.golang.org/p/idDp1E-vZo

我已经声明了一个包含四个基本字段的结构,并且正在从本地文件系统上的文件中读取发往 Node.ipaddr 的值(我正在获取 fileName 作为运行时的标志;该代码在此处被删除但在上面提供的链接中。)

type Node struct {
hostname string
ipaddr string
pstatus string
ppid int
}

file, err := os.Open(fileName)
if err != nil {
panic(fmt.Sprintf("error opening %s: %v", fileName, err))
}

因为文件是用行分隔的,所以我认为 bufio.Scanner 是从文件中读取数据的理想选择。我苦苦挣扎的地方是找到一种优雅的方式将数据实际传递到结构元素中。

我创建了一个 Node 元素数组,并考虑了一个 map,但我不确定我将如何实际使用它(目前)。

var nodes []*Node
var nodemap = make(map[string]*Node) //do I even need this?

scanner := bufio.NewScanner(file)
for scanner.Scan() {
if err := scanner.Err(); err != nil {
fmt.Fprintln(os.Stderr, "error reading from file:", err)
os.Exit(3)
}

//pass scanner.Text() into Node.ipaddr

}

如果没有将 scanner.Scan() 包装在索引 for 循环中,我完全不确定如何进行。如果我确实将 scanner.Scan() 包装在索引 for 循环中,for 循环是否能够优雅地处理 EOF - 我猜我不确定在那种情况下索引限制/最大比较值应该是多少。

一如既往,感谢您愿意提供的任何建议。

编辑:输入文件的格式是这样的:

10.1.1.1
10.1.1.2
10.1.1.3

我预计文件中大约有 150 个条目,每行一个 IPv4 地址。

最佳答案

您唯一缺少的是用于将新节点添加到 slice 的 append 函数。

nodes = append(nodes, &Node{ipaddr: scanner.Text()})

此外,您还可以在 for 循环中使用索引,同时仍将 scanner.Scan() 作为条件。这让 EOF 得到了优雅的处理,同时仍然允许您在需要时访问新的 Node

for i := 0; scanner.Scan(); i++ {
if err := scanner.Err(); err != nil {
fmt.Fprintln(os.Stderr, "error reading from file:", err)
os.Exit(3)
}

nodes = append(nodes, &Node{ipaddr: scanner.Text()})
fmt.Println(nodes[i])
}

完整代码:http://play.golang.org/p/RvMQp-jgWF

关于golang 从文件中填充结构字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23666085/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com