<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>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                上一節, 我們鏈接了數據庫, 并獲取到了鏈接實例 `*Connection`, 這一節, 我們配置表結構, 以便后續使用 我們可以使用struct結構體來指定表名和字段, 同時, 我們也可以string字符串來指定表名 ## 表結構struct定義 以users表為例, 定義struct ```go type Users struct { Name string `orm:"name"` Age int } func (u Users) TableName() string { return "users" } ``` 這里我們定義了一個結構體`Users` 以及對應的一個方法`TableName()` , 這里的struct解析后, 會獲取到字段 `name, Age`. 不難看出, 指定了tag的字段會解析對應的`orm key` 的值, 如果沒有指定tag, 則獲取字段本身的值 這里的`TableName()` 則是指定表名(`users`)用的, 如果沒有該方法, 則或獲取struct本身的名字`Users` 用法示例: ```go var user Users var users []Users db.Table(&user).Select() // 獲取一條 db.Table(&users).Limit(10).Select() // 獲取10條 ``` ## string類型的表名 示例: ```go db.Table("users").First() // 獲取一條 db.Table("users").Limit(10).Get() // 獲取10條 ``` ## 關于struct字段類型的特殊說明 ### 一. 時間字段類型的處理 關于時間字段, 官方文檔中給出了說明和解決方案, 有`string`類型和`time.Time`類型 在新版本的go中, 都默認使用了 time.Time 作為默認的類型, 我們可以采用如下的方法正確使用他 1. 在鏈接數據庫的時候, 我們需要設置dsn的parseTime參數值為true, 則默認查詢數據類型為`time.Time` ``` root:root@tcp(localhost:3306)/test?charset=utf8&parseTime=true ``` 2. 如果不設置 parseTime參數值為true, 則使用 string 類型 ### 二. 其他字段類型的處理 當我們設計表的時候, 最好設置字段為 `not null`, 比如varchar可以設置為 `default ''`來代替. 這里不僅僅是數據庫優化問題, 同時, 在這里, 當一個字段的值為null時, struct會導致查詢為空的情況. 如果確實已經設置為null了, 那我們就需要特別注意了, 對字段類型要做一些特殊的處理.根據官方文檔給出的方案,我們可以做如下處理: 1. 使用對應類型的指針, 即 *string, *int64 等 2. 使用`database/sql`給出的類型 sql.NullString, sql.NullInt64 等 以上兩種方式都可以避免查詢為空的情況, 第二種用法的結果是一個struct, 返回的時候需要做一下處理, 第一種情況則可以直接返回給前端使用,根據自己的實際情況做出合理的選擇即可 ## 表名選擇的區別 - 是否預設struct (string類型不需要預設struct) - 解析時, 是否會用到reflect(反射) (string類型不會用到反射, struct會用到反射) - 獲取結果是否是確定類型 (string表名, 返回值類型為interface, struct返回定義類型)
                  <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>

                              哎呀哎呀视频在线观看