2 回答
TA贡献1815条经验 获得超12个赞
我不明白您对嵌入的评论。这是我的方法(使用嵌入):
package test
import "time"
type Utmp struct {
// Common fields
}
func (u Utmp) User() {
return string(l.ut_user[:])
}
type LinuxUtmp struct {
Utmp
// Linux specific fields
}
func (l LinuxUtmp) Time() time.Time {
return time.Unix(int64(l.tv_sec), int64(l.tv_usec))
}
type BsdUtmp struct {
Utmp
// BSD specific fields
}
func (b BsdUtmp) Time() time.Time {
return time.Unix(int64(b.ut_time), 0)
}
任何导入库的代码都可以User()直接调用方法LinuxUtmp和BsdUtmp对象,l.User()无论b.User()是否提及Utmp。如果您愿意,您甚至可以保留Utmp出乎意料的 (as utmp)。
查看Effective Go了解详情。
如果您愿意,您甚至可以确保只有适用于相关平台的代码才能在二进制文件中编译。这个博客有一些例子。为了保持简单,如果特定于平台的代码不是很大或涉及其他因素,我不会费心走这条路。
为了完整起见,这里是官方的go build文档。
TA贡献1829条经验 获得超13个赞
如果遇到某些东西类型不一样的问题,可以让Time
和User
函数运行在一个封装了linux和bsd功能的接口上。
如果您不喜欢那样,您可以生成代码以避免重复。
- 2 回答
- 0 关注
- 196 浏览
添加回答
举报