make loop

This commit is contained in:
chai2010
2015-12-26 20:05:30 +08:00
parent 82ec0c025d
commit e15e88dad7
74 changed files with 207 additions and 207 deletions

View File

@@ -2,7 +2,7 @@
一個對象的變量或者方法如果對調用方是不可見的話,一般就被定義爲“封裝”。封裝有時候也被叫做信息隱藏,同時也是面向對象編程最關鍵的一個方面。
Go語言隻有一種控製可見性的手段大寫首字母的標識符會從定義它們的包中被導小寫字母的則不會。這種限製包內成員的方式同樣適用於struct或者一個類型的方法。因而如果我們想要封裝一個對象我們必鬚將其定義爲一個struct。
Go語言隻有一種控製可見性的手段大寫首字母的標識符會從定義它們的包中被導小寫字母的則不會。這種限製包內成員的方式同樣適用於struct或者一個類型的方法。因而如果我們想要封裝一個對象我們必鬚將其定義爲一個struct。
這也就是前面的小節中IntSet被定義爲struct類型的原因盡管它隻有一個字段
```go
@@ -16,7 +16,7 @@ type IntSet struct {
type IntSet []uint64
```
盡管這個版本的IntSet在本質上是一樣的他也可以允許其它包中可以直接讀取併編輯這個slice。換句話説相對*s這個表達式會現在所有的包中s.words隻需要在定義IntSet的包中現(譯註:所以還是推薦後者吧的意思)。
盡管這個版本的IntSet在本質上是一樣的他也可以允許其它包中可以直接讀取併編輯這個slice。換句話説相對*s這個表達式會現在所有的包中s.words隻需要在定義IntSet的包中現(譯註:所以還是推薦後者吧的意思)。
這種基於名字的手段使得在語言中最小的封裝單元是package而不是像其它語言一樣的類型。一個struct類型的字段對同一個包的所有代碼都有可見性無論你的代碼是寫在一個函數還是一個方法里。
@@ -72,7 +72,7 @@ func (l *Logger) Prefix() string
func (l *Logger) SetPrefix(prefix string)
```
Go的編碼風格不禁止直接導字段。當然,一旦進行了導就沒有辦法在保證API兼容的情況下去除對其的導,所以在一開始的選擇一定要經過深思熟慮併且要考慮到包內部的一些不變量的保證,未來可能的變化,以及調用方的代碼質量是否會因爲包的一點脩改而變差。
Go的編碼風格不禁止直接導字段。當然,一旦進行了導就沒有辦法在保證API兼容的情況下去除對其的導,所以在一開始的選擇一定要經過深思熟慮併且要考慮到包內部的一些不變量的保證,未來可能的變化,以及調用方的代碼質量是否會因爲包的一點脩改而變差。
封裝併不總是理想的。
雖然封裝在有些情況是必要的但有時候我們也需要暴露一些內部內容比如time.Duration將其表現暴露爲一個int64數字的納秒使得我們可以用一般的數值操作來對時間進行對比甚至可以定義這種類型的常量