GoAdminGroup / go-admin

A golang framework helps gopher to build a data visualization and admin panel in ten minutes
https://www.go-admin.com
Apache License 2.0
8.24k stars 1.35k forks source link

[wiki]用postgreSQL開始的教程 #413

Open CarsonSlovoka opened 3 years ago

CarsonSlovoka commented 3 years ago

這個教程很好,但主要是針對mysql

我想分享一下postgreSQL的坑以及自己遇到的一些問題

golang版本

我一開始是用golang 1.16,但後來遇到multiple-value uuid.NewV4() in single-value context

後來改用golang 1.13就沒問題了,建議大家用和GoAdminGroup/go-admin/go.mod用相同的版本

環境變數

首先 GOPROXY在中國有受限,所以文章會寫

GO111MODULE=on 
GOPROXY=https://goproxy.cn   <-- 在中國就用這個
GOPROXY=https://proxy.golang.org,direct  <-- 預設您裝好golang應該是這個,用這個也可以
go install github.com/GoAdminGroup/go-admin/adm

環境變數預設會抓系統變數,如果您不想用系統變數也可以用 go env -w 去改寫

例如:

go env -w GOPROXY=https://goproxy.cn

go env可以查看go所有的環境變數,你也可以把想看的變數丟在後面就會只列出該變數

查看當前GOPROXY的設定

go env GOPROXY

此外go env會有一個檔案紀錄-w的內容,該檔案路徑位置

go env GOENV

goAdmin

在安裝goAdmin之前如果沒有裝gcc會失敗

安裝gcc

如果您是windows可以先去裝choco (跟著裡面的Chocolatey Install即可裝好)

接著用指令

choco install mingw -y

裝完mingw之後,再使用

gcc -v

應該就會看到版本,表示安裝gcc成功了

要查看gcc裝在哪邊可以用gcm去檢查

gcm gcc.exe

建立blog的資料表

postgresql版本 ```sql SET search_path = postgres; -- USE DatabaseName; -- ---------------------------- -- Table structure for blog_article -- ---------------------------- DROP TABLE IF EXISTS public.blog_article; -- public是schema的名稱,如果您的schema名稱是別的就要改掉 CREATE TABLE public.blog_article ( -- https://www.postgresqltutorial.com/postgresql-create-table/ id SERIAL NOT NULL, -- https://www.postgresqltutorial.com/postgresql-serial/ tag_id SERIAL, title varchar(100) DEFAULT '', "desc" varchar(255) DEFAULT '', content text, cover_image_url varchar(255) DEFAULT '', created_on int DEFAULT '0', created_by varchar(100) DEFAULT '', modified_on int DEFAULT '0', modified_by varchar(255) DEFAULT '', deleted_on int DEFAULT '0', state smallint DEFAULT '1', -- https://www.postgresqltutorial.com/postgresql-data-types/ PRIMARY KEY (id) ); -- https://www.postgresql.org/docs/9.1/sql-comment.html COMMENT ON COLUMN public.blog_article.tag_id IS '標籤ID'; COMMENT ON COLUMN public.blog_article.title IS '文章标题'; COMMENT ON COLUMN public.blog_article.desc IS '简述'; COMMENT ON COLUMN public.blog_article.content IS '内容'; COMMENT ON COLUMN public.blog_article.cover_image_url IS '封面图片地址'; COMMENT ON COLUMN public.blog_article.created_on IS '新建时间'; COMMENT ON COLUMN public.blog_article.created_by IS '创建人'; COMMENT ON COLUMN public.blog_article.modified_on IS '修改时间'; COMMENT ON COLUMN public.blog_article.modified_by IS '修改人'; COMMENT ON COLUMN public.blog_article.deleted_on IS '删除时间'; COMMENT ON TABLE public.blog_article IS '文章管理'; -- ---------------------------- -- Table structure for blog_auth -- ---------------------------- DROP TABLE IF EXISTS public.blog_auth; CREATE TABLE public.blog_auth ( id SERIAL NOT NULL, username varchar(50) DEFAULT '', password varchar(50) DEFAULT '', PRIMARY KEY (id) ); COMMENT ON COLUMN public.blog_auth.username IS '账号'; COMMENT ON COLUMN public.blog_auth.password IS '密码'; INSERT INTO public.blog_auth (id, username, password) VALUES ('1', 'test', 'test123'); -- ---------------------------- -- Table structure for blog_tag -- ---------------------------- DROP TABLE IF EXISTS public.blog_tag; CREATE TABLE public.blog_tag ( id SERIAL NOT NULL, name varchar(100) DEFAULT '', created_on int DEFAULT '0', created_by varchar(100) DEFAULT '', modified_on int DEFAULT '0', modified_by varchar(100) DEFAULT '', deleted_on int DEFAULT '0', state smallint NOT NULL DEFAULT '1', PRIMARY KEY (id) ); COMMENT ON COLUMN public.blog_tag.name IS '标签名称'; COMMENT ON COLUMN public.blog_tag.created_on IS '创建时间'; COMMENT ON COLUMN public.blog_tag.created_by IS '创建人'; COMMENT ON COLUMN public.blog_tag.modified_on IS '修改时间'; COMMENT ON COLUMN public.blog_tag.modified_by IS '修改人'; COMMENT ON COLUMN public.blog_tag.deleted_on IS '删除时间'; COMMENT ON COLUMN public.blog_tag.state IS '状态 0为禁用、1为启用'; COMMENT ON TABLE public.blog_tag IS '文章标签管理'; ```

匯入goadmin需要用到的資料表

可以直接在 go-admin/data 找尋適用於您資料庫的sql 在做一些符合您的更改即可

要說的是如果您用的是postgresql,這些指令不能直接在pgAdmin運行,主要是卡在stdin的關係,

解法,打開psql的終端機來幫您,

登入完之後

最後使用

\i 'c:/path/.../xxx.sql'

即可成功完成建立

⚠ 是用/而不是\,此外用'把路徑包起來,不然可能會遇到permission denied

編寫main.go

package main

import ( // https://golang.org/pkg/

    _ "github.com/GoAdminGroup/go-admin/adapter/gin"              // 适配器
    _ "github.com/GoAdminGroup/go-admin/modules/db/drivers/postgres" // postgres 驅動  // 如果不符合可能會有訊息: panic: sql: unknown driver "postgres" (forgotten import?)
    _ "github.com/GoAdminGroup/themes/adminlte"                   // 引入ui主题,必须引入,不然报错

    "github.com/GoAdminGroup/go-admin/engine"
    "github.com/GoAdminGroup/go-admin/examples/datamodel"
    "github.com/GoAdminGroup/go-admin/modules/config"
    "github.com/GoAdminGroup/go-admin/modules/db"
    "github.com/GoAdminGroup/go-admin/modules/language"
    "github.com/GoAdminGroup/go-admin/template"
    "github.com/GoAdminGroup/go-admin/template/chartjs"
    "github.com/gin-gonic/gin"
    "io/ioutil"
)

func main() {
    r := gin.Default()

    gin.SetMode(gin.ReleaseMode)
    gin.DefaultWriter = ioutil.Discard

    eng := engine.Default()

    template.AddComp(chartjs.NewChart())

    if err := eng.AddConfig(config.Config{
        Databases: config.DatabaseList{
            "default": { // 改成自己的設定
                Host:       "127.0.0.1",
                Port:       "5432",
                User:       "postgres",
                Pwd:        "",
                Name:       "", // database name
                MaxIdleCon: 50,
                MaxOpenCon: 150,
                Driver:     db.DriverPostgresql, // db.DriverMysql,
            },
        },
        UrlPrefix: "admin",
        IndexUrl:  "/",
        Debug:     true,
        Language:  language.CN,  // 預設可用en, cn, jp, tc,也可參考這些增加您自己的語言
    }).
        AddGenerators(Generators).
        Use(r); err != nil {
        panic(err)
    }

    r.Static("/uploads", "./uploads")

    eng.HTML("GET", "/admin", datamodel.GetContent)

    _ = r.Run(":9033")
}
CarsonSlovoka commented 3 years ago

我想新增上面的東西到wiki去,我有在Telegram詢問,正等候您(@chenhg5)答覆

chenhg5 commented 3 years ago

@CarsonSlovoka 感谢分享👍👍。不好意思。近期比较忙回复慢。wiki也可以发在论坛 http://discuss.go-admin.com/。后期我们也可以整理进项目文档

CarsonSlovoka commented 3 years ago

Hi, 洛克人! 可以在論壇新增第三方的登入(With Google, Github,...)的方案嗎? (Configuring Google login for Discourse) 這樣就不用記那麼多帳號了😅

chenhg5 commented 3 years ago

@CarsonSlovaka 应该可以。让我晚些研究研究。👌🏻

chenhg5 commented 3 years ago

@CarsonSlovoka 👌🏻应该可以。我晚些研究研究。