1. 程式人生 > >go語言之beego框架orm的使用

go語言之beego框架orm的使用

models.go

============================

package main


import (
    "github.com/astaxie/beego/orm"
)

type User struct {
    Id      int
    Name    string
    Profile *Profile `orm:"rel(one)"` // OneToOne relation
}

type Profile struct {
    Id   int
    Age  int16
    User *User `orm:"reverse(one)"` // 設定反向關係(可選)
}

func init() {
    // 需要在init中註冊定義的model

    orm.RegisterModel(new(User), new(Profile))

}

main.go

==============

package main

import (
    "fmt"
    "github.com/astaxie/beego/orm"
    _ "github.com/go-sql-driver/mysql"
)

func init() {
    //orm.RegisterModel(new(User))

    orm.RegisterDataBase("default", "mysql", "ta3:[email protected]/ta3?charset=utf8")
    orm.RunSyncdb("default", false, true)  // true 改成false,如果表存在則會給出提示,如果改成false則不會提示 , 這句話沒有會報主鍵不存在的錯誤


}

func main() {
    o := orm.NewOrm()
    o.Using("default") // 預設使用 default,你可以指定為其他資料庫

    user := User{Id: 1}

    err := o.Read(&user)

    if err == orm.ErrNoRows {
        fmt.Println("查詢不到")
    } else if err == orm.ErrMissPK {
        fmt.Println("找不到主鍵")
    } else {
        fmt.Println(user.Id, user.Name)
    }
}

執行結果:

create table `user`
    -- --------------------------------------------------
    --  Table Structure for `main.User`
    -- --------------------------------------------------
    CREATE TABLE IF NOT EXISTS `user` (
        `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
        `name` varchar(255) NOT NULL,
        `profile_id` integer NOT NULL UNIQUE
    ) ENGINE=InnoDB;

create table `profile`
    -- --------------------------------------------------
    --  Table Structure for `main.Profile`
    -- --------------------------------------------------
    CREATE TABLE IF NOT EXISTS `profile` (
        `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
        `age` smallint NOT NULL
    ) ENGINE=InnoDB;

查詢不到

 第二次再執行:

table `user` already exists, skip
table `profile` already exists, skip
查詢不到

如果  orm.RunSyncdb("default", false, true)改成  orm.RunSyncdb("default", false, false)

則執行結果不會提示。

相關推薦

go語言beego框架orm的使用

models.go ============================ package main import (     "github.com/astaxie/beego/orm" ) type User struct {     Id      int   

go 語言系列 Beego 框架

Beego官網本身已經整理的非常詳細了,但是作為一個學習者,我還是決定自己好好整理一下,這樣在後面使用的時候自己對每部分才能非常熟悉,即使忘記了,也可以迅速定位自己要用的知識在哪裡。當然也是對官網的一個精簡整理,同時結合一些例子,更好的理解和學習Beego Beego官網地址:https:/

Golang語言快速上手到綜合實戰(Go語言Beego框架、高併發聊天室、豆瓣電影爬蟲) 下載

  Go是Google開發的一種編譯型,可並行化,並具有垃圾回收功能的程式語言。2015,Go迎來了全迸發的一年。時隔一年,回頭再看,Go已躋身主流程式語言行列。在國內,Go的熱度更是不凡。七牛雲、百度、滴滴等一線網際網路公司正在逐步將Go應用到自身的專案之中。 講師本人之前在滴滴從事後臺開發時,

go語言學習-beego框架學習bee在windows和linux下的安裝

windows下的安裝 windows下的安裝和linux下其實是相同的命令 go get github.com/beego/bee //或者使用 go install github.com/beego/bee 在windows下安裝完成之後需要在 環

Go語言高級篇beego框架

eat web app 生效 ces flask 步驟 doc 結構 語言 一、beego框架 1、beego框架簡介 beego 是一個快速開發 Go 應用的 HTTP 框架,他可以用來快速開發 API、Web 及後端服務等各種應用,是一個 RESTful 的框

Go語言高級篇beego框架參數配置與路由配置

路由配置 解析 sql false 展示 func control prot hello 一、參數配置 beego默認會解析當前應用下的conf/app.conf文件 1.1、beego的參數配置 appname = WEB httpport = 8080 r

Go語言高級篇beego框架Controller

ring 默認 目錄 interface patch 渲染 key 初始 finish 一、Controller 控制器 Controller等同於Django裏的view,處理邏輯都是在Controller裏面完成的,下面就寫一個最簡單的Controller。寫con

Go語言嵌入類型

go 類型 嵌入類型,或者嵌套類型,這是一種可以把已有的類型聲明在新的類型裏的一種方式,這種功能對代碼復用非常重要。在其他語言中,有繼承可以做同樣的事情,但是在Go語言中,沒有繼承的概念。Go提倡的代碼復用的方式是組合,所以這也是嵌入類型的意義所在。組合而不是繼承,所以Go才會更靈活。type Rea

Go語言標誌符可見性

goGo的標誌符,這個翻譯覺得怪怪的,不過還是按這個起了標題,可以理解為Go的變量、類型、字段等。這裏的可見性,也就是說那些方法、函數、類型或者變量字段的可見性。比如哪些方法不想讓另外一個包訪問,我們就可以把它們聲明為非公開的;如果需要被另外一個包訪問,就可以聲明為公開的,和Java語言裏的作用域類似。在Go

Go語言Doc 文檔

go doc 對於協作開發或者代碼共享來說,文檔是一個可以幫助開發者快速了解以及使用這些代碼的一個教程,文檔越全面、越詳細,入門越快,效率也會更高。在Go語言中,Go為我們提供了快速生成文檔以及查看文檔的工具,讓我們可以很容易地編寫查看文檔。Go提供了兩種查看文檔的方式:一種是使用go doc命令在終

Go語言並發資源競爭

go 並發 並發本身並不復雜,但是因為有了資源競爭的問題,就使得我們開發出好的並發程序變得復雜起來,因為會引起很多莫名其妙的問題。package main import ( "fmt" "runtime" "sync" ) var ( count int32

Go語言並發示例-Pool(一)

go pool 並發 這篇文章演示使用有緩沖的通道實現一個資源池,這個資源池可以管理在任意多個goroutine之間共享的資源,比如網絡連接、數據庫連接等,我們在數據庫操作的時候,比較常見的就是數據連接池,也可以基於我們實現的資源池來實現。可以看出,資源池也是一種非常流暢性的模式,這種模式一般適用

Go語言log日誌

log go 在我們開發程序後,如果有一些問題需要對程序進行調試的時候,日誌是必不可少的,這是我們分析程序問題常用的手段。 日誌使用 日誌分析,就是根據輸出的日誌信息,分析挖掘可能的問題,我們使用fmt.Println系列函數也可以達到目的,因為它們也可以把我們需要的信息輸出到終端或者其他文件中。不過

go語言指針

ptr數組 Arrays數組是內置(build-in)類型,是一組同類型數據的集合,它是值類型,通過從0開始的下標索引訪問元素值。在初始化後長度是固定的,無法修改其長度。當作為方法的入參傳入時將復制一份數組而不是引用同一指針。數組的長度也是其類型的一部分,通過內置函數len(array)獲取其長度。在開始前先

Go語言調試

調試 go 調試是一種技能,不限於我們說的debug,這只是其中的一種,這是可以打斷點的調試,除此之外,還有打印輸出、日誌記錄、單元測試,這都可以稱之為調試程序的手段。打印輸出打印輸出是一種比較傳統的調試手段,我們可以把我們需要了解的變量值,執行的步驟等打印出來,來證明我們的猜測,以便解決問題。fun

Go語言數據類型總結

go語言 數據 數據類型字符串:字符串是不可變的字節序列,本身就是一個復合結構。頭部指針指向字節數組,但是沒有NULL結尾。默認以UTF-8編碼存儲Unicode字符,字面量裏允許使用十六進制、八進制和UTF-8編碼格式。內置函數len返回字節數組長度,cap不接受字符串類型參數。字符串默認是nil而不是&

Go語言方法詳解

go語言 方法方法是與對象實例綁定的特殊函數。用於維護和展示對象自身的狀態。對象是內斂的。普通函數則專註與算法流程,通過接受參數來完成特定的邏輯運算,並返回最終結果,方法是有關聯狀態的,函數通常是沒有的。方法和函數定義語法區別在於前者實例接受參數,編譯器以此確定方法所屬的類型。在一些語言中盡管沒有定義,但是函

Go語言項目的包結構詳解

go語言 包結構Go語言的工作空間:通常添加到GOPATH中。 src bin pkg對於bin和pkg兩個目錄,主要影響go install/get命令,它們會將編譯結果安裝到這兩個目錄下,以實現增量編譯。環境變量用於實現GOPATH只是工具鏈和標準庫的存放位置。在使用Git等版本控制工具的時候,建議忽略

Go語言常量與運算符

常量 運算符 用例1 //此文件用來練習 //常量與運算符的 package main import "fmt" //定義單個常量 const SPARK_NAME = "spark-test001" const NODE_NUM int = 3 //下面的方式,只是簡寫 const (

Go語言切片Slice練習

切片slice切片Slice理論知識 其本身並不是數組,它指向底層的數組 作為編程數組的替代方案,可以關聯底層數組的局部或者全部 為引用類型 可以直接創建或從底層數組獲取生成 使用len()獲取元素個數,cap()獲取容量 一般使用make()創建 如果多個slice指向相同底層數組,其中一個的值改變會影響