PTT APP 的後端

Overview

PTT APP 後端

這個專案主要的開發語言是 Golang 以及中文。

原有的 PTT 程式碼是透過C語言進行開發的, 然而C語言開發的程式碼雖然效能高,但是可維護性稍低,以致於後續接手維護不易。

另外原有C程式碼編譯結果仰賴平台例如 LP32, LP32, ILP64, LLP64 等狀態,導致原有主機 故障後升級成 64 位元架構主機時可能會無法順利執行上線之問題。

再來目前C版本程式碼並沒有把顯示以及商業邏輯的程式碼分離,也就是不符合 MVC 架構, 使得需要修改前端顯示文字也需要一路找到後端才有辦法進行。

較長期的問題還有例如在C當中的IPv6支援需要另外處理,線程管理不易導致需要大量使用 行程間溝通 (IPC) 方式進行資料處理。這些部分需要整體架構翻新才有機會被改善。

另外是目前存放時間的方式大多是使用32bit的儲存單位為主,這會在2038年後產生問題。

選擇 Golang 來處理這些問題的理由在於 Golang 在一開始設計之初時就考慮到不同架構 編譯上的狀況,同時可以很簡單的進行跨平台編譯 (Cross compiling) ,因此未來系統要 在 Arm based 的平台上面或者是在 Windows 上面運行都是有機會的。

另一方面是 Golang 原生支援 UTF-8 編碼,因此可以透過此次大改版逐步將 Big5-UAO 編碼的資料進行轉換。

整體架構部分

目前整體而言會以 HTTP 的 RESTful API 作為對外設計的介面,未來也許會支援相容VT100 (也就是傳統可以用PCMAN登入的BBS介面)的SSH連線方式。

使用 RESTful API 的主因在於便於其他開發者進行開發,HTTP有許多現成的客戶端以及測試工具,在各種語言以及平台中皆有範例程式碼以及函式庫可以呼叫。 另外HTTPS也經過了數年來在資訊安全上的驗證,同時我們可以透過HTTP既有的快取機制設計來進一步節省維運伺服器所需要的流量。

這個專案採用 Golang 原生的 HTTP 解譯器不另外使用其他框架(framework)以降低未來框架修改時的維護成本。

在呼叫流程中如下列所示: (需要補圖)

====外面(公有IP或是受防火牆保護的網段)=====

針對 IP 判斷流量以及流速決定是否發回 429 Too Many Request

檢查傳入的 Access Token 是否合法

解開傳入的 Access Token, 取出使用者必要資訊(例如User ID, User Level)

透過使用者必要資訊以及etag和if-not-modified資訊來決定是否送回304 Not Modified

檢查存取的項目是否為熱門項目(熱門文章或是看板),回傳資料

透過Cache模組(Shared memory)檢查資料是否存在Shared memory上,確認是否應該回傳Shared memory資料優先

透過 go-bbs 模組讀寫現有BBS檔案架構

將處理後的資料進行快取儲存後回傳資料

而較為即時性的部分會另外採用 Event Stream 的方式進行設計。使用 Event Stream 的主因為使用WebSocke的話開發者會需要另外維護一份WebSocket的函式庫。

以水球為例,在呼叫流程中如下列所示:(需要補圖)

====外面(公有IP或是受防火牆保護的網段)=====

針對 IP 判斷流量以及流速決定是否發回 429 Too Many Request

檢查傳入的 Access Token 是否合法

解開傳入的 Access Token, 取出使用者必要資訊(例如User ID, User Level)

訂閱指定的 Go Channel

有人丟水球過來時回傳給使用者水球(不關閉連線)

有人丟第二顆水球時回傳第二個訊息給使用者

資料夾結構

主要的程式碼包含程式進入點會放在根目錄

其他功能以功能為分類分在不同資料夾

目前暫定的功能為下:

後端預定模組

流量控制
權限管控
	登入CRL

後台版主部分

水球部分

寄信模組

認證模組
	TWID等認證模組
		https://github.com/ptt/pttbbs/issues/65
	手機認證模組
		https://github.com/ptt/pttbbs/issues/63



視訊部分
推播模組
看板文章即時訂閱
看板文章RSS訂閱

系統狀態統計部分
	產生可讓rrdtool使用的資料或是直接寫入rrd?

Open ID Provider


IPv6 Support
	https://github.com/ptt/pttbbs/issues/58

ASCII 圖片產圖引擎

模組的載入以及停用儘可能設計在一到三個註解就可以完成,此設計可以避免模組使用的套件未來發生問題時造成無法編譯的狀況。

請儘量避免使用 unsafe 以及 cgo 除非你確定你提供的足夠多的文件以及測試案例。

測試案例盡量避免只有一行reflect.DeepEqual,可以使用 reflect.DeepEqual, 但是如果能夠多比對其他欄位輸出更多錯誤訊息會對未來的開發者更有幫助。

文件檔案部分

Issues
  • Clean Architecture

    Clean Architecture

    嗨大家好,為了寫出更健全的系統,我想導入 Clean Architecture 到這個專案。

    跟 @PichuChen 討論過後,覺得最好還是讓每個人都可以參與,所以決定開個 issue 來 ~讓大家鞭~ 跟大家一起討論,我會盡我所能的解釋我想做的,如果有描述不清楚的還請見諒,也歡迎指出你覺得不妥的地方,甚至更歡迎提供更好的做法,目標是能夠寫出更好的系統,也有助於自我學習,感謝!

    回到正題,關於 Clean Architecture,我是參考這幾篇文章:

    現在的 code 我看到的問題有幾個:

    1. 不好寫 Unit test,因為所有的東西都在 main (不過個人淺見,嚴格上來說這跟 Clean Architecture 比較無關)
    2. 沒有抽象的概念。以 #7 為例,假設之後要把 build-in 的 http 換成 mux/gin 等等的話,勢必是大改,改完會不會跟預期的行為一致也是另一個問題。

    為了讓系統有較高的彈性,方便抽換第三方套件,我覺得套用 Clean Architecture 不失為一個好的選擇。

    那麼實際上會怎麼做呢?這邊先提供一下我自己切完三個 layer 之後的結果:

    .
    ├── cmd
    │   ├── cmd
    │   └── main.go
    └── internal
        ├── config
        │   └── config.go
        ├── delivery
        │   └── http
        │       ├── http.go
        │       ├── route.go
        │       ├── route_boards.go
        │       ├── route_boards_treasures.go
        │       ├── route_borads_articles.go
        │       ├── route_classes.go
        │       ├── route_token.go
        │       ├── route_users.go
        │       └── route_users_test.go
        ├── logging
        │   └── logger.go
        ├── repository
        │   ├── board.go
        │   ├── repository.go
        │   └── user.go
        └── usecase
            ├── board.go
            ├── token.go
            ├── usecase.go
            └── user.go
    

    首先,我把整個專案切了三層: delivery, usecase, repository,讓我逐一介紹每一層的分工。

    delivery 這一層,主要是做 API 的接口。例如我們現在是用 http ,所以這一層就會專門處理像是 http 的 routing (parsing) 還有從 http request 抽出需要的資料(例如: http header 中的 token )。未來,這一層可能會被換成使用 mux/gin 也說不定。也說不定我們會要提供 gRPC, GraphQL ,但我相信把我們的商業邏輯抽出來之後,這一層的修改應該不會太大。

    在來是 usecase 這一層,主要是處理我們的商業邏輯。講得白話一點,今天如果看到一個 API 是 GET /user/info 的話,在 usecase 這一層理論上就會有一個 function/method 在處理 /user/info。因為我們把商業邏輯抽出來了,代表我們不去依賴像是 http.Request, http.ResponseWriter,這樣也有利於我們寫 Unit test。

    最後是 repository 這一層,這一層不外乎是處理 DB 或者以我們的 case 的話,目前是依賴 "github.com/PichuChen/go-bbs" 這個第三方套件。之前也有討論過要不要把 ptt 轉成使用 RDBMS,雖然近期內應該是很難,但是切了這層也保證了 DB layer 的彈性,也方便我們之後要換掉 library 。

    對於看到中英文混雜想吐槽的人,請容我先說聲抱歉 ... 小弟中文不好 😅 請多多包容

    小弟對於自己的描述沒有信心,所以如果需要直接看 code 的話,請看: https://github.com/mkfsn/Ptt-backend/tree/feat/clean-architecture 。這邊也要先做個聲明,我有盡可能不動到原本的邏輯,如果您有看到任何不懂或是不妥的地方也請不吝指出。關於 naming 不妥的地方,那純粹是小弟英文不好 😓 也請多多包涵!至於一些 coding stlye 的問題我想應該是可以暫時忽略,等之後有訂 linting rule 再來修改應該也不算太遲?

    特別提一下,在 #3 中也有討論到一些架構上的問題,但是 #3 主要還是要去 follow go-standard 的結構,跟 Clean Architecture 所要做的事情還是有所差異。

    因為這是一個 Open Source 的專案,所以我想不是由我一個,或是少數幾個人就決定方向的,因此如果大家覺得現在的架構也可以寫得輕鬆自在,也歡迎提出意見。我想最重要的還是參與,還有能不能從中學習到東西。

    值得一提的是,我覺得要訂架構現在是個不錯的時間點。之後功能越加越多,跟依賴的套件耦合度只會越來越高,那到時候只會趨向懶得切,最後就是一團 legacy code 想動都動不了 XD


    最後還是重複一次,小弟也還在學習中,不是說上述這個架構就是最好的,只是因為我看到一些問題,然後以我目前的經驗 Clean Architecture 不失為一個解法,想藉由這個 issue 拋磚引玉,請大家鞭小力一點 ... 🙇🏻

    也感謝您努力讀完這一長篇內容 XDDD

    enhancement help wanted 
    opened by mkfsn 37
  • [主線] [PTT] 實作上下箭頭推文 - usecase

    [主線] [PTT] 實作上下箭頭推文 - usecase

    實作細節 / Details of Implement

    • 參照主 issue #210 說明
    • 修改usecase /article.go
      • 增加類似UpdateUsefulness function,以模仿stackoverflow或reddit
    • 對應測試需要撰寫

    期程 / Schedule

    • 討論時間: 二天, 到 6/23
    • 實作時間: 一天, 到 6/24
    • 確認時間: 二天, 到 6/26

    相關文件 / Documents

    API文件

    help wanted milestone1 
    opened by wagaru 31
  • [主線] [PTT] 實作上下箭頭推文 - repository

    [主線] [PTT] 實作上下箭頭推文 - repository

    實作細節 / Details of Implement

    • 參照主 issue #210 說明
    • 在repository/article.go中新增Usefulness struct,與後端gobbs對接
    • 對應測試需要撰寫

    期程 / Schedule

    • 討論時間: 二天, 到 6/23
    • 實作時間: 一天, 到 6/24
    • 確認時間: 二天, 到 6/26

    相關文件 / Documents

    API文件

    補充目前 go-bbs 的進度

    go-bbs 相關的實作要等 Ptt-official-app/go-bbs#82 這個完成,知道目前推文數以及修改推文數的應該直接呼叫文章屬性相關的函式就行了?

    help wanted milestone1 
    opened by wagaru 22
  • 添加 openapi 支援

    添加 openapi 支援

    👏 解決掉的 issue / Resolved Issues

    • close #30

    📝 相關的 issue / Related Issues

    • #30

    ⛏ 變更內容 / Details of Changes

    在跟目錄新增 swagger.yaml ,使用時在其 servers 項目中新增測試環境 domain url 後再執行 README 中的指令即可。

    opened by DeanXu2357 20
  • setup makefile and CI with github action

    setup makefile and CI with github action

    reference to #6

    • 加入Makefile 跟相關的基本command(help, build, deps, lint, format, test-unit, test-integration)
    • setup CI with github action, two jobs: run linter and integration testing
    • 加入給PR的template(還需要弄成中文)
    • test coverage report使用codecov

    目前是紅燈,因為linter沒有過,等review後在修正相關程式碼 看有沒有流程還需要增刪或修改

    opened by Julian-Chu 16
  • Implement repository for AppendComment

    Implement repository for AppendComment

    👏 解決掉的 issue / Resolved Issues

    • close #232

    📝 相關的 issue / Related Issues

    • Ptt-official-app/go-bbs#82

    ⛏ 變更內容 / Details of Changes

    • 在repositoy.article裡串接bbs.DB裡的AppendNewLine
    opened by gogog22510 14
  • [建議] errcheck 是否有必要

    [建議] errcheck 是否有必要

    相關 issue

    • #90

    原本作法的問題 / Existed Problem

    以目前 ci 的狀況看起來 errcheck fail 為大宗,目前看起來都是在 call io 相關沒有檢查 bytes 是否不為0

    實作細節 / Details of Implement

    增加 golangci.yaml 移除 io 相關 errcheck

    期程 / Schedule

    相關文件 / Documents

    https://golangci-lint.run/usage/configuration/

    enhancement 
    opened by y2468101216 14
  • [建議] golang code style

    [建議] golang code style

    原本作法的問題 / Existed Problem

    目前 CI 有跑 golangci-lint 可能需要 code style,例如 :

    1. 官方庫提供的 function err 要不要接(ex: json.Unmarshal)
    2. 要不要全面跑 go fmt,強烈建議要

    實作細節 / Details of Implement

    1. 在專案底下增加 .golangci.yaml
    2. ci cd 自動執行 go fmt
    3. go mod add golangci-lint

    期程 / Schedule

    • 討論時間: 到過年後,2/22
    • 實作時間: 一天
    • 確認時間:一天

    相關文件 / Documents

    https://golangci-lint.run/

    enhancement 
    opened by y2468101216 14
  • 修正 get classes

    修正 get classes

    👏 解決掉的 issue / Resolved Issues

    • close #276

    ⛏ 變更內容 / Details of Changes

    • 回傳的分類目錄 id 從 ClassIDBase 開始
    • 想問一下 非 class 的 BoardHeader 的 ClassID 是否一定從 2 開始?如果是的話是不是在 GET classes/{id} (id != 1) 是不是就不用特別去扣除 ClassIDBase?
    opened by nickyanggg 13
  • [建議] 應該可以把目前 Response 的回應改成 struct 格式

    [建議] 應該可以把目前 Response 的回應改成 struct 格式

    在練習寫 go 途中發現也許有可以改善的地方 所以就來提案看看 ~ 歡迎各位指教!

    原本作法的問題 / Existed Problem

    目前寫法會都需要直接寫死 key 在 Response 的地方, 我想也許可以改用 struct 的方式

    m := map[string]string{
    	"error":             "find_board_error",
    	"error_description": "get board for " + boardID + " failed",
    }
    

    實作細節 / Details of Implement

    可以把統一會用到的 Response 結構放在 delivery/http/http.go 底下, 類似這樣

    type ErrorResponse struct {
    	Error  int    `json:"error"`
    	ErrorDescription string `json:"error_description"`
    }
    

    再透過呼叫 func 去建立 Response

    func NewErrorResponse(errorType string, description string) (response ErrorResponse) {
    	return Response{
    		Error:  errorType,
    		ErrorDescription: description,
    	}
    }
    // 接著透過 MarshalIndent 就可以製造出來 json response
    resp := NewErrorResponse("error1", "error message")
    b, _ := json.MarshalIndent(resp, "", "  ")
    

    那如果說除了固定的 error error_description 之外, 想要合併其他額外訊息 舉例像是要在某一個特定 router 額外回傳 username (這邊 function 舉例叫做 GetUserName) 可以在檔案在最面建構一個 struct

    type getUserNameResponse struct {
    	ErrorResponse
    	Username string `json:"username"`
    }
    

    接著使用的時候可以這樣去做轉換

    response := getUserNameResponse{
        NewErrorResponse("errortype", "errordescription"),
        Username: "jack"
    }
    responseJson, _ := json.MarshalIndent(response, "", "")
    

    想說那接著可以再把 json.MarshalIndent 包進去一層 這樣不管是用上面合併組出來的 struct 或是原本定義的 ErrorResponse 都可以轉換

    func ToJson (response interface{}) []byte {
    	responseJson, _ := json.MarshalIndent(response, "", "")
    	return responseJson
    
    }
    // 外面就可以直接這樣使用 
    w.Write(ToJson(response))
    

    期程 / Schedule

    • 討論時間:不確定
    • 實作時間:不確定
    • 確認時間:不確定

    相關文件 / Documents

    enhancement 
    opened by Yu-Jack 13
  • 導入router

    導入router

    討論用的PR

    👏 解決掉的 issue / Resolved Issues

    • #7

    📝 相關的 issue / Related Issues

    • #43

    ⛏ 變更內容 / Details of Changes

    • 引入 第三方router (目前用gorilla/mux, 可替換)
    • 對router封裝
    • 改寫/v1/boards做為討論範例

    採用第三方router的好處,可以大幅減少route的實作邏輯,route的管理也直觀,有利於下一步導入middleware,加上router很輕量,沒有依賴單一第三方套件的風險

    opened by Julian-Chu 13
  • [BUG] C2-3-2, C2-3-3, C2-3-4: 最愛新增分隔線、資料夾、看板沒有成功

    [BUG] C2-3-2, C2-3-3, C2-3-4: 最愛新增分隔線、資料夾、看板沒有成功

    發生了什麼事? / The Problem

    使用者的最愛功能沒有辦法成功新增分隔線、資料夾以及看板

    如何重現 / To Reproduce

    可參考 testing-script 的 C2-3-2 C2-3-3 C2-3-4

    1. 首先以 pichu3/123123 取得 pichu3 的 Access Token
    2. 透過 curl http://localhost:8081/v1/users/$1/favorites -H "Authorization: bearer $2" 確認目前狀態 3-a. 透過 curl http://localhost:8081/v1/users/$1/favorites -H "Authorization: bearer $2" -d 'action=add_favorite' -d 'type=line' 新增分隔線,接下來用 2 的 API 來確認會發現仍然沒有分隔線

    3-b. 透過 curl http://localhost:8081/v1/users/$1/favorites -H "Authorization: bearer $2" -d 'action=add_favorite' -d 'type=folder' -d 'title=test' 新增資料夾,接下來用 2 的 API 來確認會發現仍然沒有資料夾

    3-c. 透過 curl http://localhost:8081/v1/users/$1/favorites -H "Authorization: bearer $2" -d 'action=add_favorite' -d 'type=board' -d 'board_id=SYSOP' 新增看板,接下來用 2 的 API 來確認會發現仍然沒有看板

    預期的行為 / Expected behavior

    應該要出現剛剛新增的東西

    螢幕截圖 / Screenshots

    截圖 2021-09-06 上午12 17 36

    開發環境 / Environment

    Package version: cb8fb31f7a480dce1f29406be6c6d215d365c37e

    bug 
    opened by PichuChen 0
  • [BUG] C6-1-3: 無法刪除文章,出現 path not found

    [BUG] C6-1-3: 無法刪除文章,出現 path not found

    發生了什麼事? / The Problem

    刪除時出現 path /v1/boards/test/articles/M.1629564570.A.2AC not found

    如何重現 / To Reproduce

    請參考 testing-script C6-1-3.sh

    1. 取得 SYSOP 的 Access Token
    2. 發一篇新文章
    3. 刪掉他,用 curl http://localhost:8081/v1/boards/test/articles/$NEW_FILENAME -d 'action=delete'

    然後就會看到錯誤了。

    預期的行為 / Expected behavior

    他應該要能正常刪掉文章,至少不要出現錯誤訊息,然後文章列表中要出現這篇文章已被刪除。

    螢幕截圖 / Screenshots

    截圖 2021-09-05 下午11 41 53

    開發環境 / Environment

    Package version: cb8fb31f7a480dce1f29406be6c6d215d365c37e

    bug 
    opened by PichuChen 3
  • [BUG][後端測試表] 新增看板失敗

    [BUG][後端測試表] 新增看板失敗

    發生了什麼事? / The Problem

    以 SYSOP 帳號新增看板失敗

    如何重現 / To Reproduce

    1. 先用 SYSOP 帳號登入
    2. POST /v1/boards 新增看板
    3. 出現錯誤訊息

    預期的行為 / Expected behavior

    1. 應該要能看到被新增的看板

    螢幕截圖 / Screenshots

    截圖 2021-08-07 下午7 19 04

    開發環境 / Environment

    Ptt-backend: 6bf9e57c9079b7cda312e03b4052c2da2b1bc6ee 請見測試表 C3-1-2

    bug 
    opened by PichuChen 2
  • [BUG][後端測試表] /v1/users/SYSOP/information 登入時間沒有被修改

    [BUG][後端測試表] /v1/users/SYSOP/information 登入時間沒有被修改

    發生了什麼事? / The Problem

    • 在登入後理論上上 last_login_ip 這個欄位以及 last_login_time 應該要被更新,但是沒有被更新。

    請見測試表 C2-1-5

    如何重現 / To Reproduce

    1. 使用預設資料集
    2. 登入 SYSOP 帳號,取得 Access Token
    3. curl http://localhost:8081/v1/users/SYSOP/information -H "Authorization: bearer $ACCESS_TOKEN"

    預期的行為 / Expected behavior

    1. 登入後可能需要修改原本的 Userec,這部分也許需要 go-bbs 支援修改
    2. 在 go-bbs 還沒修改之前,有可能把登入記錄先存在 Ptt-backend 的 process memory 裡面嗎? 缺點應該是中開會 reset

    螢幕截圖 / Screenshots

    截圖 2021-07-31 上午7 44 16

    開發環境 / Environment

    如需要再另外提供 Ptt-backend: v0.0.5 (0371cfc5)

    bug 
    opened by PichuChen 0
  • [BUG] 在放入一般使用者的 Access Token 的情況下 GET /v1/boards/bm_only/articles 不應該出現文章列表

    [BUG] 在放入一般使用者的 Access Token 的情況下 GET /v1/boards/bm_only/articles 不應該出現文章列表

    發生了什麼事? / The Problem

    在放入一般使用者的 Access Token 的情況下 GET /v1/boards/bm_only/articles 不應該出現文章列表,因為這是版主以上才能看到的版,應該出現 error。但是卻回傳文章列表。

    如何重現 / To Reproduce

    1. curl http://localhost:8081/v1/boards/bm_only/articles
    2. 回傳文章列表

    預期的行為 / Expected behavior

    螢幕截圖 / Screenshots

    image 要回傳錯誤,因為沒有bm_only的Access Token

    開發環境 / Environment

    1. OS: Windows 10 and WSL 2 Ubuntu 20.04
    2. Go version v1.16.5
    bug milestone1 
    opened by titaneric 9
Owner
Ptt official app
Ptt official app
Corona App for Ubuntu Touch

Corona App Digitaler Impfausweis Luca - check in Corona Warn App

Arne 8 Nov 14, 2021
Coding assessment to create Todo app given by Percipia

Coding assessment to create Todo app given by Percipia

Anish 0 Oct 20, 2021
Backend for Ribbit, Broker API Reference App

Ribbit Reference Implementation (Backend) The reference implementation for the backend of a broker-dealer trading application with the Alpaca Broker A

Alpaca 24 Jun 20, 2022
It is a basic todo app which has CRUD operation using Buffalo and golang

It is a basic todo app which has CRUD operation using Buffalo and golang

null 0 Nov 1, 2021
Dolphinsay app written in Go.

DolphinSay About Welcome in DolphinSay! DolphinSay is inspired by Cowsay program. DolphinSay allow you to display a message said by a cute random Dolp

tranquac0312 0 Nov 3, 2021
Minimal example app of hexagonal architecture in go

Hexagonal Architecture Minimal example of hexagonal architecture (ports & adapters) in go. Resources T

Rodrigo Gamba 0 Nov 5, 2021
Example app using labstack/echo and ozzo-validator.

Example app using labstack/echo and ozzo-validator.

mattn 6 Feb 18, 2022
Package buildinfo provides basic building blocks and instructions to easily add build and release information to your app.

Package buildinfo provides basic building blocks and instructions to easily add build and release information to your app. This is done by replacing variables in main during build with ldflags.

null 1 Nov 14, 2021
A reproducible example for an issue I'm encoutering when deploying my gunicorn app to nginx

Ngnix Issue This is a minimum, reproducible example for an issue I'm encoutering when deploying my gunicorn app to nginx. Installation (Linux) Webserv

Space Simulation Services of Canada Corporation 1 May 29, 2022
A dead simple Go wrapper around the hidden moonarch.app API.

moonarch A dead simple Go wrapper around the hidden moonarch.app API. How-To First, get the repository: go get github.com/lazdotdigital/moonarch. moon

Laz 0 Nov 27, 2021
Let's Go is task sharing app implemented in golang.

Let's Go - A sample GO app Overview Let's Go is an HTTP server. It has various apis to play with. It is a small app that can group users of a company

null 0 Dec 13, 2021
Web app built with Go/Golang and Buffalo, deployed on Heroku, using Heroku Postgres

hundred-go-buffalo Background Read Go Read Buffalo Read Getting Started on Heroku with Go Recommended Tools PowerShell terminal Chocolatey Windows pac

Denise Case 0 Dec 18, 2021
High-Performance Shortlink ( Short URL ) app creator in Golang. For privacy reasons, you may prefer to host your own short URL app and this is the one to use.

About The Project Shortlink App in Golang Multiple Node based Architecture to create and scale at ease Highly performant key-value storage system Cent

null 124 Jun 8, 2022
記帳-PWA-web-app (Bookkeeping-PWA-web-app)

GoKeep (bookkeeping web app) 記帳-PWA-web-app (Bookkeeping-PWA-web-app) demo link : https://bookkepping.herokuapp.com/ 測試用帳密 : tester002 , tester002 (亦可

Yu-Zhuang Lin 5 Jan 31, 2022
Built Virtual Operating System and integrated application like calculator, gallery app , weather app, and text editor.

Virtual Operating System Built Virtual Operating System and integrated application like calculator, gallery app , weather app, and text editor. Langua

null 0 Nov 2, 2021
CLI and web app to convert HTML markup to go-app.dev's syntax.

HTML to go-app Converter CLI and web app to convert HTML markup to go-app.dev's syntax. Installation CLI Static binaries are also available on GitHub

Felix Pojtinger 8 May 28, 2022
A simple Go app and GitHub workflow that shows how to use GitHub Actions to test, build and deploy a Go app to Docker Hub

go-pipeline-demo A repository containing a simple Go app and GitHub workflow that shows how to use GitHub Actions to test, build and deploy a Go app t

Marat Bogatyrev 0 Nov 17, 2021
Test-app-url-shortner - A sample url shortener app to test Keploy integration capabilities

test-app-url-shortner A sample url shortener app to test Keploy integration capa

null 1 Jan 23, 2022
Go-cent-app - CENT.APP GO Package

CENT.APP - GO Package Official documentation - https://cent.app/en/merchant/api

Aleksandr Kalinkin 3 Mar 15, 2022
How to get a Go / Golang app using the Gin web framework running natively on Windows Azure App Service WITHOUT using a Docker container

Go on Azure App Service View the running app -> https://go-azure-appservice.azurewebsites.net ?? This is an example repo of how to get a Go / Golang a

Ed Andersen 4 Jun 24, 2022
This is for managing Slack App Manifests, it is no use if you are not developing an App for Slack.

Terraform Provider Slack App This is for managing Slack App Manifests, it is no use if you are not developing an App for Slack. Requirements Terraform

ChangeEngine 2 May 23, 2022
Go session management for web servers (including support for Google App Engine - GAE).

Session The Go standard library includes a nice http server, but unfortunately it lacks a very basic and important feature: HTTP session management. T

András Belicza 107 Jun 1, 2022
CLI - A package for building command line app with go

Command line interface Screenshot Key features Lightweight and easy to use. Defines flag by tag, e.g. flag name(short or/and long), description, defau

王仕晋 655 Jun 18, 2022
Download, build, cache and run a Go app easily.

demand -- An easy way to install apps demand will download, build, cache and run a Go app. You can use it as an interpreter. Create a file bytes2human

Tv 12 Sep 10, 2017
Crash your app in style (Golang)

panicparse Parses panic stack traces, densifies and deduplicates goroutines with similar stack traces. Helps debugging crashes and deadlocks in heavil

M-A 3.2k Jun 30, 2022
A 12-factor app logger built for performance and happy development

logxi log XI is a structured 12-factor app logger built for speed and happy development. Simpler. Sane no-configuration defaults out of the box. Faste

Mario Gutierrez 348 Jun 25, 2022
💨 A real time messaging system to build a scalable in-app notifications, multiplayer games, chat apps in web and mobile apps.

Beaver A Real Time Messaging Server. Beaver is a real-time messaging server. With beaver you can easily build scalable in-app notifications, realtime

Ahmed 1.3k Jun 27, 2022
This is a simple chat app which shows how to use Go with Hotwire.

chat-hotwire-go This is a simple chat app which shows how to use Go with Hotwire. Messages from another user are received via Turbo Streams over a web

null 26 Jul 2, 2022