のコンマ区切りcpu_ids:"0,2,24"
に変換するcpu_ids(3 CPUの場合は0xA00000800000
)のバイナリカウントを含むマスクがあります。GoでCPU IDのビットマスク変換
次のGo実装を行った(私はGoスターターである)。それを行うのが最善の方法ですか?特に、バイトバッファーの処理は非効率的です!
package main
import (
"fmt"
"os"
"os/exec"
)
func main(){
cpuMap := "0xA00000800000"
cpuIds = getCpuIds(cpuMap)
fmt.Println(cpuIds)
}
func getCpuIds(cpuMap string) string {
// getting the cpu ids
cpu_ids_i, _ := strconv.ParseInt(cpuMap, 0, 64) // int from string
cpu_ids_b := strconv.FormatInt(cpu_ids_i, 2) // binary as string
var buff bytes.Buffer
for i, runeValue := range cpu_ids_b {
// take care! go returns code points and not the string
if runeValue == '1' {
//fmt.Println(bitString, i)
buff.WriteString(fmt.Sprintf("%d", i))
}
if (i+1 < len(cpu_ids_b)) && (runeValue == '1') {
//fmt.Println(bitString)
buff.WriteString(string(","))
}
}
cpuIds := buff.String()
// remove last comma
cpuIds = cpuIds[:len(cpuIds)-1]
//fmt.Println(cpuIds)
return cpuIds
}
戻り値:
"0,2,24"
サンプルにインポートを追加できますか? 'go doc'を使用しようとすると多くの役に立ちます:) –