I’d like to use
//go:build !ppc64
//go:build ppc64
to implement system_ppc64.go for pcc64 and system.go for the rest of the instruction set.
system_ppc64.go
//go:build ppc64
package utils
func getMemoryInfo() (*models.Memory, error) {
data, err := os.ReadFile("/proc/meminfo")
if err != nil {
return nil, err
}
lines := strings.Split(string(data), "n")
memInfo := make(map[string]int64)
for _, line := range lines {
fields := strings.Fields(line)
if len(fields) < 2 {
continue
}
value, err := strconv.ParseInt(fields[1], 10, 64)
if err != nil {
continue
}
memInfo[fields[0][:len(fields[0])-1]] = value
}
memTotal := memInfo["MemTotal"] / 1024 // KB to MB
memFree := memInfo["MemFree"] / 1024
memAvailable := memInfo["MemAvailable"] / 1024
memUsed := memTotal - memFree
return &models.Memory{
MemTotal: uint64(memTotal),
MemUsed: uint64(memUsed),
MemAva: uint64(memAvailable),
}, nil
}
system.go
//go:build !ppc64
package utils
func getMemoryInfo() (*models.Memory, error) {
memInfo, err := mem.VirtualMemory()
if err != nil {
return nil, err
}
// 单位为MB
memTotal := memInfo.Total / 1024 / 1024
memUsed := memInfo.Used / 1024 / 1024
memAva := memInfo.Available / 1024 / 1024
return &models.Memory{
MemTotal: memTotal,
MemUsed: memUsed,
MemAva: memAva,
}, nil
}
But there is an error under main.go
Miraculously, I compiled it.
Makefile
all: build run
build: clean
go mod tidy
go build -o icpagent main.go
ppc64: clean
go mod tidy
CXX=powerpc64-linux-gnu-g++ GOARCH=ppc64 GOOS=linux go build -o icpagent main.go
run:
./icpagent
clean:
rm -f icpagent
rm -f *.log
make build
make ppc64
I created another branch without using go:build ppc64
system.go
package utils
func getMemoryInfo() (*models.Memory, error) {
data, err := os.ReadFile("/proc/meminfo")
if err != nil {
return nil, err
}
lines := strings.Split(string(data), "n")
memInfo := make(map[string]int64)
for _, line := range lines {
fields := strings.Fields(line)
if len(fields) < 2 {
continue
}
value, err := strconv.ParseInt(fields[1], 10, 64)
if err != nil {
continue
}
memInfo[fields[0][:len(fields[0])-1]] = value
}
memTotal := memInfo["MemTotal"] / 1024 // KB to MB
memFree := memInfo["MemFree"] / 1024
memAvailable := memInfo["MemAvailable"] / 1024
memUsed := memTotal - memFree
return &models.Memory{
MemTotal: uint64(memTotal),
MemUsed: uint64(memUsed),
MemAva: uint64(memAvailable),
}, nil
}
No errors
Why this error occurs and how to fix it ?
New contributor
42_ is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.