Go語言快速搭建一個API流式回復(fù)本地模擬接口
在開發(fā) Coze Bot 相關(guān)的前端功能時,我們經(jīng)常需要測試流式回復(fù)(SSE)的打字機效果、加載狀態(tài)、停止響應(yīng)、內(nèi)容渲染等邏輯。但直接調(diào)用真實的 Coze API 會消耗 token,而且回復(fù)速度和內(nèi)容不可控。
下面分享一個純 Go 實現(xiàn)的本地模擬接口,只需幾分鐘就能跑起來,完全兼容 Coze 的 /v3/chat 流式返回格式,讓你零成本、無限次地測試前端體驗。
功能亮點
- 完美還原 Coze 的 SSE 流式結(jié)構(gòu)(
event: conversation.message.delta+data: {"content":"..."}) - 逐字打字機效果,延遲隨機 50~150ms,模擬真人輸入
- 支持 CORS,前端直接調(diào)用無需額外配置
- 回復(fù)內(nèi)容支持 Markdown,前端可直接渲染
- 自動發(fā)送
[DONE]結(jié)束標志 - 代碼簡潔,只有不到 100 行
完整代碼(mock_coze.go)
package main
import (
"fmt"
"io"
"log"
"net/http"
"strings"
"time"
)
const proxyPort = ":8680"
func main() {
http.HandleFunc("/coze-chat", mockHandler)
log.Printf("[MOCK] 模擬 Coze 接口已啟動")
log.Printf("[MOCK] 監(jiān)聽地址: http://localhost%s/coze-chat", proxyPort)
log.Printf("[MOCK] 可直接用你原來的前端代碼測試(無需 token)")
log.Fatal(http.ListenAndServe(proxyPort, nil))
}
func mockHandler(w http.ResponseWriter, r *http.Request) {
clientIP := r.RemoteAddr
log.Printf("[MOCK REQUEST] %s %s from %s", r.Method, r.URL.Path, clientIP)
// 處理 CORS 預(yù)檢
if r.Method == http.MethodOptions {
w.Header().Set("Access-Control-Allow-Origin", "*")
w.Header().Set("Access-Control-Allow-Methods", "POST, OPTIONS")
w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
w.Header().Set("Access-Control-Max-Age", "86400")
w.WriteHeader(http.StatusNoContent)
return
}
if r.Method != http.MethodPost {
http.Error(w, "Method Not Allowed", http.StatusMethodNotAllowed)
return
}
// 讀取請求體(僅模擬,可忽略內(nèi)容)
_, _ = io.ReadAll(r.Body)
defer r.Body.Close()
// 設(shè)置 SSE 響應(yīng)頭
w.Header().Set("Content-Type", "text/event-stream")
w.Header().Set("Cache-Control", "no-cache")
w.Header().Set("Connection", "keep-alive")
w.Header().Set("Access-Control-Allow-Origin", "*")
w.(http.Flusher).Flush()
// 自定義回復(fù)內(nèi)容(支持 Markdown,隨時修改)
fullResponse := `# 時尚審美評估師
**評判結(jié)果**:好看
**理由**:
- 這件帽衫的深灰色非常百搭,經(jīng)典不過時,適合各種膚色。
- 版型寬松舒適,oversize 設(shè)計很有街頭感,顯瘦又時髦。
- 帽繩和袖口細節(jié)處理精致,質(zhì)感看起來很不錯(棉感強,不廉價)。
- 前胸的小logo繡標低調(diào)有質(zhì)感,不會太張揚。
- 整體風(fēng)格偏休閑運動風(fēng),日常穿搭、約會、逛街都非常合適。
**搭配建議**:
- 下裝:黑色或深藍牛仔褲 + 白球鞋(經(jīng)典安全)
- 進階:卡其色工裝褲 + 馬丁靴(更有層次)
- 外搭:短款羽絨服或風(fēng)衣(冬天顯高)
總體來說,這件帽衫設(shè)計簡潔大方,性價比應(yīng)該很高,值得入手!?`
// 逐字輸出,模擬打字機效果
for _, char := range fullResponse {
fmt.Fprintf(w, "event: conversation.message.delta\n")
fmt.Fprintf(w, "data: {\"id\":\"mock123\",\"conversation_id\":\"mock\",\"bot_id\":\"mock\",\"role\":\"assistant\",\"type\":\"answer\",\"content\":\"%s\",\"content_type\":\"text\"}\n\n", escapeJSON(string(char)))
w.(http.Flusher).Flush()
// 隨機延遲,模擬人類打字速度
time.Sleep(time.Millisecond * time.Duration(50+(char%100)))
}
// 發(fā)送結(jié)束標志
fmt.Fprint(w, "event: done\ndata: [DONE]\n\n")
w.(http.Flusher).Flush()
log.Printf("[MOCK SUCCESS] 模擬回復(fù)完成,共輸出 %d 個字符", len(fullResponse))
}
// 簡單 JSON 轉(zhuǎn)義函數(shù)
func escapeJSON(s string) string {
s = strings.ReplaceAll(s, "\\", "\\\\")
s = strings.ReplaceAll(s, "\"", "\\\"")
s = strings.ReplaceAll(s, "\n", "\\n")
s = strings.ReplaceAll(s, "\r", "\\r")
return s
}
使用方法
保存為 mock_coze.go
運行:
go run mock_coze.go
前端保持原有調(diào)用方式(URL 指向 http://localhost:8680/coze-chat 即可)
自定義回復(fù)內(nèi)容
只需修改 fullResponse 變量中的文本,支持任意 Markdown 格式。例如想測試負面評價:
fullResponse := "這件帽衫不太行,顏色暗沉、版型臃腫,建議再看看其他款~"
或者測試超長回復(fù)、代碼塊、列表等,都可以隨意發(fā)揮。
總結(jié)
這個小工具極大提升了前端開發(fā)效率:
- 零成本、無限測試
- 完全還原真實流式體驗
- 內(nèi)容、速度可控
- 支持前后端聯(lián)調(diào)
推薦所有在做 Coze Bot 前端交互的同學(xué)都備一個,調(diào)試 UI、加載狀態(tài)、打字動畫時簡直無敵好用!
到此這篇關(guān)于Go語言快速搭建一個API流式回復(fù)本地模擬接口的文章就介紹到這了,更多相關(guān)Go本地模擬接口內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
golang實現(xiàn)redis的延時消息隊列功能示例
這篇文章主要介紹了golang實現(xiàn)redis的延時消息隊列功能,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
基于Go Int轉(zhuǎn)string幾種方式性能測試
這篇文章主要介紹了Go Int轉(zhuǎn)string幾種方式測試,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04
Go+Kafka實現(xiàn)延遲消息的實現(xiàn)示例
本文主要介紹了Go+Kafka實現(xiàn)延遲消息的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
Go Uber靜態(tài)分析工具NilAway使用初體驗
這篇文章主要介紹了Go Uber靜態(tài)分析工具NilAway使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2024-01-01

