到項目初始化過程了,這邊的項目設(shè)計完全按照作者自己的喜好來進(jìn)行定義和設(shè)置的,所以各位完全可以按照自己的偏好自喜設(shè)置哈。
首先是創(chuàng)建一個工作文件夾哈。
別問為啥不直接quickstart,因為quickstart生成的api名字是greet,改起來很麻煩(頭禿)。
> mkdir go-zero-demo
> code go-zero-demo/
注1: go-zero-demo是我隨便寫的個文件夾名字,寫個自己開心的名字就好,這個不影響任何運行結(jié)果
注2:第二步是用編輯器打開這個文件夾,我用的是vscode所以直接code打開了,用其他編輯器手動打開該文件夾都是ok的,不影響任何結(jié)果。
然后我就按照自己的喜歡庫庫新建了四個文件夾。
api就是放api對外接口的地方。
db就是放數(shù)據(jù)庫腳本。
models就是放對應(yīng)的數(shù)據(jù)表model。
services就是咱們放服務(wù)的地方。
還記得咱們第1部分新建的三張表不?點擊標(biāo)題不記得的話跳轉(zhuǎn)>>>
【go零基礎(chǔ)】go-zero從零基礎(chǔ)學(xué)習(xí)到實戰(zhàn)教程 - 1項目表設(shè)計
復(fù)制黏貼一下哈~
這個init.sql就是初始化數(shù)據(jù)庫用的,內(nèi)容如下:(我屬于是記不住,所以init數(shù)據(jù)庫部分也給擱這了)
把他們執(zhí)行一下,記得先執(zhí)行init哈。
mysql> create database demo;
Query OK, 1 row affected (0.02 sec)
mysql> use demo;
Database changed;
mysql> (user.sql的內(nèi)容)
Query OK, 0 rows affected, 2 warnings (0.03 sec)
mysql> (article.sql的內(nèi)容)
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql> (comment.sql的內(nèi)容)
Query OK, 0 rows affected (0.01 sec)
如圖所示就成功了哈。
那么此刻就可以根據(jù)官方文檔咱們直接生成model了哈。想看詳細(xì)解讀的官方文檔點此一鍵速達(dá)
咱們這個用的是mysql,官檔是既可以通過datasource也可以通過sql腳本,咱們直接sql腳本,從咱們db/xxx.sql生成對應(yīng)的model。
> goctl model mysql ddl --src db/user.sql --dir models/
> goctl model mysql ddl --src db/article.sql --dir models/
> goctl model mysql ddl --src db/comment.sql --dir models/
指令和執(zhí)行結(jié)果都如圖所示哈,然后現(xiàn)在咱們再來看看咱們models文件夾下生成的東西。
很棒哈,該有的都有了。以usermodel為例,我們可以在usermodel_gen.go文件里面看到,已經(jīng)幫我們生成了一個User的數(shù)據(jù)model和增刪改查的四個方法。
作者也很友好的給了提示哈,gen的部分由goctl直接生成,不要編輯,盲猜二次執(zhí)行g(shù)octl model mysql ddl --src db/user.sql --dir models/的時候會直接覆蓋之前的usermodel_gen.go文件,但不會動usermodel.go文件。
嗯,聽人勸,吃飽飯,咱別在usermodel_gen里面寫東西哈,新增的方法的業(yè)務(wù)需要的額外字段邏輯咱們在usermodel里面拼拼湊湊哈。
好了,models生成好了,接下來咱們來整services。
我直接拿了官檔中的api示例來做服務(wù)生成哈,api示例來源點擊快速查看>>>
因為咱們model還不一樣,我還得改改它數(shù)據(jù)結(jié)構(gòu)。
syntax = "v1"
type (
// 定義登錄接口的 json 請求體
LoginReq {
Phone string `json:"phone"`
Password string `json:"password"`
}
// 定義登錄接口的 json 響應(yīng)體
LoginResp {
Id string `json:"id"`
Name string `json:"name"`
Type int64 `json:"type"`
Status int64 `json:"status"`
}
)
type (
// 定義獲取用戶信息的 json 請求體
GetUserInfoReq {
Id string `json:"id"`
}
// 定義獲取用戶信息的 json 響應(yīng)體
GetUserInfoResp {
Id string `json:"id"`
Name string `json:"name"`
Type int64 `json:"type"`
Status int64 `json:"status"`
}
)
type (
RegisterReq {
Name string `json:"name"`
Phone string `json:"phone"`
Password string `json:"password"`
}
// 定義獲取用戶信息的 json 響應(yīng)體
RegisterResp {
Id string `json:"id"`
Name string `json:"name"`
Desc string `json:"desc"`
}
)
// 登錄
@server (
group: login
prefix: /v1
)
service user {
@handler login
post /login (LoginReq) returns (LoginResp)
}
// 注冊
@server (
group: register
prefix: /v1
)
service user {
@handler register
post /register (RegisterReq) returns (RegisterResp)
}
// 獲取用戶詳情
@server (
jwt: Auth
group: user
prefix: /v1
)
service user {
@handler getUserInfo
post /user/info (GetUserInfoReq) returns (GetUserInfoResp)
}
如上述代碼哈,咱們給這個user服務(wù)給設(shè)計了三個接口,接著,咱們一鍵生成user服務(wù)的代碼。
> goctl api go --api api/user.api --dir services/user/
執(zhí)行上述代碼之后,打開services文件夾可以清晰地看到咱們user服務(wù)的代碼已經(jīng)生成了哈。
goctl生成api or rpc的官檔鏈接也掛一下,方便大家想要了解更多可配置信息。想看詳細(xì)解讀的官方文檔點此一鍵速達(dá)
如法炮制article部分哈。
設(shè)計好接口然后一鍵生成。
我后續(xù)會掛個github的demo項目鏈接,這里就不一一貼了,要不這文章得老長了。文章來源:http://www.zghlxwxcb.cn/news/detail-858774.html
項目完備已經(jīng)初見雛形哈,下一篇寫config配置。文章來源地址http://www.zghlxwxcb.cn/news/detail-858774.html
到了這里,關(guān)于【go零基礎(chǔ)】go-zero從零基礎(chǔ)學(xué)習(xí)到實戰(zhàn)教程 - 2項目初始化的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!