问题答案

在测试一个程序的时候,遇到如下报错

user: LookupId not implemented on linux/386 golang
服务器环境

2.6.32-279.el6.x86_64
操作系统版本

CentOS 5.8
go 的环境

GOARCH="386"
GOBIN="/home/apps/go/bin"
GOCHAR="8"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/apps/go-project/GO"
GORACE=""
GOROOT="/home/apps/go"
GOTOOLDIR="/home/apps/go/pkg/tool/linux_amd64"
TERM="dumb"
CC="gcc"
GOGCCFLAGS="-g -O2 -fPIC -m32"
CXX="g++"
CGO_ENABLED="0"
go 的版本

go version go1.2.1 linux/amd64
代码如下:

package main
import (
"encoding/json"
"fmt"
"log"
"os/user"
)

func main(){
u, err := user.LookupId("500")
if err != nil {
log.Fatal(err)
}

data, err := json.MarshalIndent(u, "", "")
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", data)
}
提问,在我现有的环境下,我要如何解决这个问题,这个报错,是说 linux/386 没有 Lookupid 的实现,使用什么命令编译会不出现这个问题?
 

标签: go
答案

不同平台实现不一样的情况,我一般会针对不同的平台单独封装。

比如你的情况:
既然 linux/386 没有 Lookupid 的实现,我会把

u, err := user.LookupId("500")
单独搞到一个文件去实现,比如386平台

lookuppid_386.go

func LookupId(id string) (*User, error) {
// 实现
}
其它有实现的平台,可以直接调用api, 比如

lookuppid_unix.go

func LookupId(id string) (*User, error) {
return user.LookupId(id)
}
你业务逻辑调用自己实现的 LookupId 函数 

举一反三