首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >未定义: syscall.Stat_t for plan9

未定义: syscall.Stat_t for plan9
EN

Stack Overflow用户
提问于 2020-12-06 07:45:09
回答 1查看 1.6K关注 0票数 0

我正在为9前台/ Plan9开发一个文件管理器;开发工作是在64位Ubuntu下的Go v1.15中完成的,通过交叉编译来构建Plan9二进制文件。

让我们假设一个函数来检索用户/组信息:

代码语言:javascript
运行
复制
import "syscall"
func GetXid(info os.FileInfo) (string, string) {
    UID := "N/A"
    GID := "N/A"
    if stat, ok := info.Sys().(*syscall.Stat_t); ok {
        UID = strconv.Itoa(int(stat.Uid))
        GID = strconv.Itoa(int(stat.Gid))
    }
    return UID, GID
}

它在用Plan9编译undefined: syscall.Stat_t时失败。

syscall 包页表示,从Go v1.4开始,就不再推荐它了,并在golang.org/x/sys/下用操作系统特定的repos替换了它。

  • 如何在Linux和Plan9中实现操作系统特定的Plan9转换
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-08 06:30:35

这个答案极大地帮助了我的研究。简单地说,虽然syscall代码库被破坏并移动到golang.org/x/sys/下的操作系统特定的包中,但我们仍然使用syscall.xxx语义从golang.org/x/sys/访问结构。

代码语言:javascript
运行
复制
var info os.FileInfo = ...
info.Sys().(*syscall.Dir)
  • 对于Linux来说,它是T
代码语言:javascript
运行
复制
var info os.FileInfo = ...
info.Sys().(*syscall.Stat_t)

为了将上述发现应用到解决方案中,我遵循@torek建议并创建了两个文件,每个文件顶部都有func GetXid(info os.FileInfo) (string, string)函数和// +build <os>指令:

  • file_details_plan9.go
代码语言:javascript
运行
复制
// +build plan9

package model
import (
    "syscall"
    "os"
)

func GetXid(info os.FileInfo) (string, string) {
    UID := "N/A"
    GID := "N/A"
    if stat, ok := info.Sys().(*syscall.Dir); ok {
        UID = stat.Uid
        GID = stat.Gid
    }
    return UID, GID
}
  • file_details_unix.go
代码语言:javascript
运行
复制
// +build linux

package model
import (
    "os"
    "strconv"
    "syscall"
)

func GetXid(info os.FileInfo) (string, string) {
    UID := "N/A"
    GID := "N/A"
    if stat, ok := info.Sys().(*syscall.Stat_t); ok {
        UID = strconv.Itoa(int(stat.Uid))
        GID = strconv.Itoa(int(stat.Gid))
    }
    return UID, GID
}

注意:还显示标准Go安装中缺少包golang.org/x/sys/plan9,需要显式安装:

代码语言:javascript
运行
复制
go get golang.org/x/sys/plan9
go mod vendor
go mod tidy
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65165823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档