2 回答

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超13個贊
我不明白您對嵌入的評論。這是我的方法(使用嵌入):
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)
}
任何導(dǎo)入庫的代碼都可以User()直接調(diào)用方法LinuxUtmp和BsdUtmp對象,l.User()無論b.User()是否提及Utmp。如果您愿意,您甚至可以保留Utmp出乎意料的 (as utmp)。
查看Effective Go了解詳情。
如果您愿意,您甚至可以確保只有適用于相關(guān)平臺的代碼才能在二進(jìn)制文件中編譯。這個博客有一些例子。為了保持簡單,如果特定于平臺的代碼不是很大或涉及其他因素,我不會費(fèi)心走這條路。
為了完整起見,這里是官方的go build文檔。

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超13個贊
如果遇到某些東西類型不一樣的問題,可以讓Time
和User
函數(shù)運(yùn)行在一個封裝了linux和bsd功能的接口上。
如果您不喜歡那樣,您可以生成代碼以避免重復(fù)。
- 2 回答
- 0 關(guān)注
- 227 瀏覽
添加回答
舉報