最近有新專案在做poc demo, 把專案流程做個紀錄, 算是個人目前的best practice, 紀錄並分享有相關需要的朋友
stacks
- golang
- fiber http framework
- mysql
- docker-compose
目錄結構
├─ internal/
│ ├─ api.go ( api routing )
│ ├─ config.go ( config structure)
│ ├─ controller.go ( layer1 handle http request)
│ ├─ repository.go ( layer3 access database)
│ ├─ service.go ( layer2 business logic )
│ ├─ types.go ( data types in here aka model)
│ └─ types.go ( some helper function )
├─ docker-compose.yml ( IaC deploy )
├─ fso.sql ( sql schema )
├─ main.go ( entry point )
└─ req.sh ( testcase )
Flow
- 設定檔 .env
- 先改一下.env內的設定
- 注意一下 sql user, password, port, dbname 設定正確
-
起 MySQL
注意 docker-compose 裡面設定的port 跟 .env裡面一致docker-compose up
- 到 MySQL container 裡面新增 sql, 並做測試
sudo docker start fso && docker exec -it fso bash # 會進到container裡面 mysql -u root -p # 密碼輸入 12345(或自己設定過的) # 會進入mysql cli裡面 use database fso;
貼上 fso.sql 的內容後按下enter (以下節省時間幫貼上來)
CREATE TABLE users( id int NOT NULL AUTO_INCREMENT PRIMARY KEY, email varchar(255) NOT NULL, name varchar(255) NOT NULL, password varchar(255) NOT NULL );
會新增成功, 接著做個快速測試
SELECT * FROM users; INSERT INTO users(name, email, password) VALUES('test','test@gmail','12345'); SELECT * FROM users;
應該會看到一筆資料
- 做個API測試 (已經準備好測試資料)
./req.sh
預期結果
{"email":"test123@example.com","Name":"test123"}
repo ( 因為是repo下的folder, 所以用特別的方式抓取)
curl -o a.tar https://getsub.fiveplanet.online/?url=https://github.com/cbot918/template/tree/main/go-three-layer-poc \
&& tar -xvf a.tar && rm a.tar
後記
因為這個專案的repo是某個專案的子目錄, git沒法直接下載, 所以寫到一半跑去寫下載github子目錄的service, 算是寫出來了, 但還不夠完善, 下載repo的時候需要整串指令, 但起碼堪用, 希望可以對有相關需求的大大有幫助^^