我有一個Direction字符串value類型的結(jié)構(gòu)。Direction應(yīng)該是N、S或。WEtype Direction struct { value string}受到這個問題的回答的啟發(fā):Does Go have "if x in" construct similar to Python? 我想以有效方式創(chuàng)建 Direction 的一種好方法可以是這個:func NewDirection(direction string) Direction { switch direction { case "N","S","W","E": return Direction{direction} } panic("invalid direction")}但這對我來說還不夠,因為我仍然可以創(chuàng)建無效的方向:d := Direction{"X"}我還發(fā)現(xiàn)了這篇關(guān)于在 go 中強制使用構(gòu)造函數(shù)的有趣文章。閱讀這篇文章,我可以看出使用另一個包是必要的。我可以在 main 包中有一個“受保護”的結(jié)構(gòu)嗎?
1 回答

神不在的星期二
TA貢獻1963條經(jīng)驗 獲得超6個贊
按照慣例,您幾乎已經(jīng)完成了所有應(yīng)該做的事情:
使字段未導(dǎo)出
提供構(gòu)造函數(shù)
對應(yīng)該使用構(gòu)造函數(shù)的類型發(fā)表評論,并解釋如何處理零值(如果這很重要)
現(xiàn)在包的用戶不能修改該字段,并且 constrictor 的存在清楚地表明應(yīng)該調(diào)用它來創(chuàng)建有效實例。這是標(biāo)準(zhǔn)庫設(shè)定的約定。
當(dāng)然,還有其他方法可以使值無效變得更加困難,但這本質(zhì)上只是在浪費時間,并且為了與想象中的對手進行無法取勝的軍備競賽而使代碼過于復(fù)雜。
如果有人不懂該語言并且不閱讀文檔,那么他們總是會找到一種濫用它的方法。如果他們積極地試圖破壞自己,那么您無法阻止他們,也沒有理由阻止他們。
包是 Go 中代碼組織的最小功能單元。例如,無法在文件級別保護字段。即使是同一個包中的文件也能有效地運行,就好像它們的所有代碼都在同一個文件中一樣。因此,與構(gòu)造函數(shù)在同一個包中的任何代碼都將具有與構(gòu)造函數(shù)相同的特權(quán)。
- 1 回答
- 0 關(guān)注
- 87 瀏覽
添加回答
舉報
0/150
提交
取消