我試圖減少我的 API 的表面積,所以我使我的app結構不匯出(使用小寫名稱),并且只公開了New函式:
package mylib
type app struct {
}
func New() *app {
return &app{}
}
但是現在,我想為這個東西寫一個表驅動的測驗,我不能mylib.app在一個結構體中保持一個:
package mylib_test
import (
"testing"
"mylib"
)
func TestApp(t *testing.T) {
tests := []struct {
name string
app private_type_public_new.app // This part doesn't work
}{
// ...
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
})
}
}
我有哪些選擇?我應該將應用程式結構設為 public ( App) 并保留所有欄位未匯出嗎?我可以用高階函式做一些有趣的事情來存盤New函式的實體以在子測驗中實體化應用程式嗎?還有什么?
uj5u.com熱心網友回復:
我有哪些選擇?我應該將應用程式結構設為公開 (App) 并保留所有欄位未匯出嗎?
是的,將其匯出為App. golang/lint(現已棄用)特別警告參考未匯出型別的匯出函式,因為您的包的使用者很難使用它們。例如,如果您將x := mylib.New(),賦值x為 的一個實體*myapp.app,go-pls除了它的型別外,將不顯示有關此變數的任何內容,這意味著您附加到它的任何描述性注釋都不會出現。
見https://github.com/golang/lint/issues/210
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/334789.html
