我终于弄明白了,见下文:
package main
import (
"encoding/json"
"fmt"
"os/exec"
"strconv"
"strings"
)
type CPUInfo struct {
Sockets int32 `json:"sockets"`
CoresPerSocket int32 `json:"cores_per_socket"`
ThreadsPerCore int32 `json:"threads_per_core"`
}
func main() {
out, _ := exec.Command("lscpu").Output()
outstring := strings.TrimSpace(string(out))
lines := strings.Split(outstring, "\n")
c := CPUInfo{}
for _, line := range lines {
fields := strings.Split(line, ":")
if len(fields) < 2 {
continue
}
key := strings.TrimSpace(fields[0])
value := strings.TrimSpace(fields[1])
switch key {
case "Socket(s)":
t, _ := strconv.Atoi(value)
c.Sockets = int32(t)
case "Core(s) per socket":
t, _ := strconv.Atoi(value)
c.CoresPerSocket = int32(t)
case "Thread(s) per core":
t, _ := strconv.Atoi(value)
c.ThreadsPerCore = int32(t)
}
}
CPUInfoJSON, _ := json.MarshalIndent(c, "", " ")
fmt.Println(string(CPUInfoJSON))
}
输出:
tbenz9@ubuntu-dev: go run socket.go
{
"sockets": 1,
"cores_per_socket": 2,
"threads_per_core": 2
}