我對於在golang中開發很新,所以如果這是一個基本問題,我很抱歉。我沒有看到已經提出的可比較的問題;如果有的話,請點我(謝謝)。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
將是理想的從fil讀取數據即我在掙扎的地方是找到一種將數據真正傳遞給結構元素的優雅方法。
我創建了一個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
}
短的索引for
循環包裝scanner.Scan()
的,我並不知道如何着手。如果我在索引for
循環中換行scanner.Scan()
,那麼for
循環能夠優雅地處理EOF - 我想我不確定在這種情況下索引限制/最大比較值應該是多少。
一如既往,感謝您願意提供的任何建議。
編輯:輸入文件的格式是這樣的:
10.1.1.1
10.1.1.2
10.1.1.3
我預計大約在文件中的條目150,每行一個IPv4地址。
你有過的文件的格式控制?如果沒有,也會顯示文件的例子。 – OneOfOne
是的,我可以控制格式。將編輯OP來放置當前的格式,但它們是IPv4地址,每行一個。 – Patrick
考慮到目前的情況,最簡單的事情就是像你一樣掃描每行,並使用以下網址解析ip:http://golang.org/pkg/net/#ParseIP,然後你可以簡單地分配根據需要爲您的節點值解析值。 –