<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 7.3\. 數據結構 我們先定義一個結構類型,用于保存數據。wiki系統由一組互聯的wiki頁面組成,每個wiki頁面包含內容和標題。我們定義wiki頁面為結構page, 如下: ``` type page struct { title string body []byte } ``` 類型[]byte表示一個byte slice。(參考Effective Go了解slices的更多信息) 成員body之所以定義為[]byte而不是string類型,是因為[]byte可以直接使用io包的功能。 結構體page描述了一個頁面在內存中的存儲方式。但是,如果要將數據保存到磁盤的話,還需要給page類型增加save方法: ``` func (p *page) save() os.Error { filename := p.title + ".txt" return ioutil.WriteFile(filename, p.body, 0600) } ``` 類型方法的簽名可以這樣解讀:“save為page類型的方法,方法的調用者為page類型的指針變量p。該成員函數沒有參數,返回值為os.Error,表示錯誤信息。” 該方法會將page結構的body部分保存到文本文件中。為了簡單,我們用title作為文本文件的名字。 方法save的返回值類型為os.Error,對應WriteFile(標準庫函數,將byte slice寫到文件中)的返回值。通過返回os.Error值,可以判斷發生錯誤的類型。如果沒有錯誤,那么返回nil(指針、接口和其他一些類型的零值)。 WriteFile的第三個參數為八進制的0600,表示僅當前用戶擁有新創建文件的讀寫權限。(參考Unix手冊 open(2) ) 下面的函數加載一個頁面: ``` func loadPage(title string) *page { filename := title + ".txt" body, _ := ioutil.ReadFile(filename) return &page{title: title, body: body} } ``` 函數loadPage根據頁面標題從對應文件讀取頁面的內容,并且構造一個新的 page變量——對應一個頁面。 go中函數(以及成員方法)可以返回多個值。標準庫中的io.ReadFile在返回[]byte的同時還返回os.Error類型的錯誤信息。前面的代碼中我們用下劃線“_”丟棄了錯誤信息。 但是ReadFile可能會發生錯誤,例如請求的文件不存在。因此,我們給函數的返回值增加一個錯誤信息。 ``` func loadPage(title string) (*page, os.Error) { filename := title + ".txt" body, err := ioutil.ReadFile(filename) if err != nil { return nil, err } return &page{title: title, body: body}, nil } ``` 現在調用者可以檢測第二個返回值,如果為nil就表示成功裝載頁面。否則,調用者可以得到一個os.Error對象。(關于錯誤的更多信息可以參考os package documentation) 現在,我們有了一個簡單的數據結構,可以保存到文件中,或者從文件加載。我們創建一個main函數,測試相關功能。 ``` func main() { p1 := &page{title: "TestPage", body: []byte("This is a sample page.")} p1.save() p2, _ := loadPage("TestPage") fmt.Println(string(p2.body)) } ``` 編譯后運行以上程序的話,會創建一個TestPage.txt文件,用于保存p1對應的頁面內容。然后,從文件讀取頁面內容到p2,并且將p2的值打印到 屏幕。 可以用類似以下命令編譯運行程序: ``` $ 8g wiki.go $ 8l wiki.8 $ ./8.out This is a sample page. ``` (命令8g和8l對應GOARCH=386。如果是amd64系統,可以用6g和6l) 點擊這里查看我們當前的代碼。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看