我对golang的开发还比较新,所以如果这是一个初级问题,我很抱歉。我没有看到类似的问题; 如果有,请指向它(谢谢)。
完整代码(在我提问时的版本,因为它不是不变的)位于http://play.golang.org/p/idDp1E-vZo 我声明了一个具有四个基本字段的结构体,并且我正在从本地文件系统上的文件中读取用于Node.ipaddr的值(我在运行时获取fileName的值作为标志; 该代码已被削减,但在上面提供的链接中)。
因为这个文件是以行为单位的,所以我认为使用
我创建了一个
完整代码(在我提问时的版本,因为它不是不变的)位于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地址。