这是我执行的命令
$ ps -e
PID PPID PGID WINPID TTY UID STIME COMMAND
4372 1 4372 4372 ? 197608 03:44:57 /usr/bin/mintty
6476 4372 6476 6208 pty0 197608 03:44:58 /usr/bin/bash
14484 6476 14484 12888 pty0 197608 13:23:48 /usr/bin/ps
我使用 bufio
scanner.scanLines 获得一维字符串数组。我需要将其转换为结构数组:
type ProcessInfo struct {
PID string `json:"PID"`
PPID string `json:"PPID"`
PGID string `json:"PGID"`
WINPID string `json:"WINPID"`
TTY string `json:"TTY"`
UID string `json:"UID"`
STIME string `json:"STIME"`
COMMAND string `json:"COMMAND"`
}
如有任何帮助,我们将不胜感激。
最佳答案
有一个方便的 strings.Fields在 strings 中发挥作用帮助解析这种输出的包。 Go 喜欢务实的方法,所以天真的实现是:
- 遍历您的数组并将每一行拆分为以空格作为分隔符的字段
- 从这些字段构造新的 ProcessInfo 对象
- 将这个对象添加到数组中
假设你的数组被命名为lines
,就做这样的事情:
var pinfos []ProcessInfo
for _, line := range lines {
fields := strings.Fields(line)
pi := ProcessInfo{
PID: fields[0],
PPID: fields[1],
PGID: fields[2],
WINPID: fields[3],
TTY: fields[4],
UID: fields[5],
STIME: fields[6],
COMMAND: fields[7],
}
pinfos = append(pinfos, pi)
}
关于arrays - 要构造的字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39669009/