我試圖減少我的 API 的表面積,所以我使我的app結構不導出(使用小寫名稱),并且只公開了New函數:package mylibtype app struct {}func New() *app { return &app{}}但是現在,我想為這個東西寫一個表驅動的測試,我不能mylib.app在一個結構中保存一個:package mylib_testimport ( "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) { }) }}我有什么選擇?我應該將應用程序結構公開(App)并保留所有未導出的字段嗎?我可以用高階函數做一些有趣的事情來存儲New函數實例以在子測試中實例化應用程序嗎?還有什么?
1 回答

慕勒3428872
TA貢獻1848條經驗 獲得超6個贊
我有什么選擇?我應該將應用程序結構公開(App)并保留所有未導出的字段嗎?
是的,將其導出為App
. golang/lint
(現已棄用)特別警告引用未導出類型的導出函數,因為它們很難讓您的包的消費者使用。例如,如果你指定x := mylib.New()
了一個 ,x
的實例,除了它的類型之外*myapp.app
,go-pls
不會顯示任何關于這個變量的信息,這意味著你附加到它的任何描述性注釋都不會出現。
見https://github.com/golang/lint/issues/210
- 1 回答
- 0 關注
- 76 瀏覽
添加回答
舉報
0/150
提交
取消