GoDe Yi Ge Fu Wu Kuang Jia
ssgoNeng Yi Fei Chang Jian Dan De Fang Shi Kuai Su Bu Shu Cheng Wei Wei Fu Wu Qun
Kai Shi Shi Yong
Ru Guo Nin De Dian Nao go version >= 1.11,Shi Yong Yi Xia Ming Ling Chu Shi Hua Yi Lai Zi Ding Yi sshow:
go mod tidy
1, Xia Zai Bing An Zhuang s
2, Zai Xiang Mu Dai Ma Zhong Dao Ru Ta
Kuai Su Gou Jian Yi Ge Fu Wu
start.go:
import "github.com/ssgo/s"
func main() {
s.Restful(0, "GET", "/hello", func() string{
return "Hello ssgo\n"
})
s.Start()
}
Ji Ke Kuai Su Gou Jian Chu Yi Ge 8080Duan Kou Ke Fang Wen De Fu Wu :
export service_httpversion=1
go run start.go
windowsXia Shi Yong :
set service_httpversion=1
go run start.go
Huan Jing Bian Liang She Zhi Bu Qu Fen Da Xiao Xie
Fu Wu Mo Ren Shi Yong Sui Ji Duan Kou Qi Dong ,Ruo Yao Zhi Ding Duan Kou Ke She Zhi Huan Jing Bian Liang ,Huo start.goMu Lu Xia Pei Zhi Wen Jian service.json
"listen":":8081"
}
Kai Fa Shi Ke Yi Shi Yong Pei Zhi Wen Jian
Bu Shu Tui Jian Shi Yong Rong Qi Ji Zhu She Zhi Huan Jing Bian Liang
redis
Kuang Jia Fu Wu Fa Xian Ji Zhi Ji Yu redisShi Xian ,Suo Yi Shi Yong discoverZhi Qian ,Xian Yao Zhun Bei Yi Ge redisFu Wu
Mo Ren Shi Yong 127.0.0.1:6379,dbMo Ren Wei 15,Mi Ma Mo Ren Wei Kong ,Ye Ke Yi Zai Xiang Mu Gen Mu Lu Zi Ding Yi Pei Zhi redis.json
Ru Guo Nin De redisDe Mi Ma Ru Guo Bu Wei Kong ,Xu Yao Shi Yong AESJia Mi Hou Jiang Mi Wen Fang Zai Pei Zhi Wen Jian passwordZi Duan Shang ,Bao Zhang Mi Ma Bu Xie Lu
Mi Ma Shi Yong AESJia Mi
Shi Yong github.com/ssgo/toolZhong De sskeyLai Sheng Cheng Mi Ma :
# Ru Guo Yi Qian Mei You Bian Yi Guo
go build sskey.go
# Chuang Jian Bing Bao Cun Mi Yao
sskey -c sshow
# Shu Ru Yuan Shi Mi Ma
sskey -e sshow
De Dao AESJia Mi Hou De Mi Ma Fang Ru discover.jsonZhong
"registry":"127.0.0.1:6379:1:upvNALgTxwS/xUp2Cie4tg=="
}
Ye Ke Yi Tong Guo Huan Jing Bian Liang Lai She Zhi :
windowsXia :
discover_registryDe She Zhi Dai Biao :
redisZhu Ji :Duan Kou Hao :Shu Ju Ku :resJia Mi Hou De Mi Ma
Fu Wu Fa Xian
Service
import "github.com/ssgo/s"
func getFullName(in struct{ Name string }) (out struct{ FullName string }) {
out.FullName = in.Name + " Lee"
return
}
func main() {
s.Register(1, "/{name}/fullName", getFullName)
s.Start()
}
export service_accesstokens='{"s1token":1}'
go run service.go
windowsXia Shi Yong :
set service_accesstokens={"s1token":1}
go run service.go
RegisterDi Yi Ge Can Shu Zhi Wei 1Biao Shi Gai Fu Wu Gong Zuo Zai Ren Zheng Ji Bie 1Shang ,Pai Fa Liao Yi Ge Ling Pai "s1token",Bu Dai Gai Ling Pai De Qing Qiu Jiang Bei Ju Jue
s.Start()Jiang Hui Gong Zuo Zai HTTP/2.0 No SSL Xie Yi Shang (Fu Wu Jian Tong Xun Mo Ren Du Shi Yong HTTP/2.0 No SSL Xie Yi )
Bing Qie Zi Dong Lian Jie Ben Ji Mo Ren De redisFu Wu ,Bing Zhu Ce Yi Ge Jiao s1 De Fu Wu (Ru Xu Shi Yong Qi Ta Ke Yi Can Kao redisDe Pei Zhi )
Ke Yun Xing Duo Ge Shi Li ,Diao Yong Fang Fang Wen Shi Jiang Hui Zi Dong Fu Zai Jun Heng Dao Mou Yi Ge Jie Dian
Controller
import (
"github.com/ssgo/s"
"github.com/ssgo/discover"
)
func getInfo(in struct{ Name string }, c *discover.Caller) (out struct{ FullName string }) {
c.Get("s1", "/"+in.Name+"/fullName", nil).To(&out)
return
}
func main() {
s.Register(0, "/{name}", getInfo)
s.Start()
}
export service_httpversion=1
export service_listen=:8091
export discover_calls='{"s1":"s1token"}'
go run controller.go &
windowsXia Shi Yong :
set service_httpversion=1
set service_listen=:8091
set discover_calls={"s1":"s1token"}
go run controller.go
Gai Fu Wu Gong Zuo Zai Ren Zheng Ji Bie 0Shang ,Gong Zuo Zai HTTP/1.1 Xie Yi Shang ,Ke Yi Zhi Jie Fang Wen
getInfo Fang Fa Zhong Diao Yong s1 Shi Hui Gen Ju redis Zhong Zhu Ce De Jie Dian Xin Xi Fu Zai Jun Heng Dao Mou Yi Ge Jie Dian
Suo You Diao Yong s1 Fu Wu De Qing Qiu Du Hui Zi Dong Dai Shang "sltoken" Zhe Ge Ling Pai Yi Huo De Xiang Ying Deng Ji De Fang Wen Quan Xian
Kuang Jia Chang Yong Fang Fa
func Register(authLevel uint, name string, serviceFunc any) {}
// Zhu Ce Yi Zheng Ze Pi Pei De Fu Wu
func RegisterByRegex(name string, service any){}
// She Zhi Qian Zhi Guo Lu Qi
func SetInFilter(filter func(in *map[string]any, request *http.Request, response *http.ResponseWriter) (out any)) {}
// She Zhi Hou Zhi Guo Lu Qi
func SetOutFilter(filter func(in *map[string]any, request *http.Request, response *http.ResponseWriter, out any) (newOut any, isOver bool)) {}
// Zhu Ce Shen Fen Ren Zheng Mo Kuai
func SetAuthChecker(authChecker func(authLevel uint, url *string, request *map[string]any) bool) {}
// She Zhi panicCuo Wu Chu Li Fang Fa
func SetErrorHandle(myErrorHandle func(err any, request *http.Request, response *http.ResponseWriter) any)
// Mo Ren Qi Dong HTTP/2.0Fu Wu (Ruo Wei Pei Zhi Zheng Shu Jiang Gong Zuo Zai No SSLMo Shi )
// Ru Guo She Zhi Liao httpVersion=1Ze Qi Dong HTTP/1.1Fu Wu
func Start() {}
// Mo Ren Yi Bu Fang Shi Qi Dong HTTP/2.0Fu Wu ()
// Ru Guo She Zhi Liao httpVersion=1Ze Qi Dong HTTP/1.1Fu Wu
func AsyncStart() *AsyncServer {}
// Ting Zhi Yi Yi Bu Fang Shi Qi Dong De Fu Wu Hou Deng Dai Ge Chong Zi Xian Cheng Jie Shu
func (as *AsyncServer) Stop() {}
// Diao Yong Yi Bu Fang Shi Qi Dong De Fu Wu
func (as *AsyncServer) Get(path string, headers ... string) *Result {}
func (as *AsyncServer) Post(path string, data any, headers ... string) *Result {}
func (as *AsyncServer) Put(path string, data any, headers ... string) *Result {}
func (as *AsyncServer) Head(path string, data any, headers ... string) *Result {}
func (as *AsyncServer) Delete(path string, data any, headers ... string) *Result {}
func (as *AsyncServer) Do(path string, data any, headers ... string) *Result {}
Ji Ben Shi Yong
RestfulShi Yong GET, POST, PUT, HEAD, DELETEHe OPTIONS
import (
"github.com/ssgo/s"
"net/http"
"os"
)
type actionIn struct {
Aaa int
Bbb string
Ccc string
}
func restAct(req *http.Request, in actionIn) actionIn {
return in
}
func showFullName(in struct{ Name string }) (out struct{ FullName string }) {
out.FullName = in.Name + " Lee."
return
}
func main() {
//http://127.0.0.1:8301/api/echo?aaa=1&bbb=2&ccc=3
s.Restful(0, "GET", "/api/echo", restAct)
s.Restful(0, "POST", "/api/echo", restAct)
s.Restful(0, "PUT", "/api/echo", restAct)
//HEADHe GETBen Zhi Yi Yang ,Qu Bie Zai Yu HEADBu Han Cheng Xian Shu Ju ,Jin Jin Shi HTTPTou Xin Xi
s.Restful(0, "HEAD", "/api/echo", restAct)
s.Restful(0, "DELETE", "/api/echo", restAct)
s.Restful(0, "OPTIONS", "/api/echo", restAct)
//Chuan Can
//http://127.0.0.1:8301/full_name/david
s.Restful(0, "GET", "/full_name/{name}", showFullName)
//Fang Wen She Zhi header content-type:application/json params:{"name":"jim"}
s.Restful(0, "PUT", "/full_name", showFullName)
s.Start()
}
| Huan Jing Bian Liang | Zhi |
|---|---|
| service_listen | :8301 |
| service_httpVersion | 1 |
Qing Qiu Li Zi
POST http://127.0.0.1:8301/api/echo HTTP/1.1
Content-Type: application/x-www-form-urlencoded
aaa=12&bbb=hello&ccc=world
PUT http://127.0.0.1:8301/api/echo HTTP/1.1
Content-Type: application/json
{
"aaa": 12,
"bbb": "hello",
"ccc": "world"
}
https
Pei Zhi httpsFu Wu Xu Yao Zai Yuan Lai Pei Zhi Ji Chu Shang Zeng Jia Liang Ge Huan Jing Bian Liang
export service_keyfile="your key file path"
windowsXia :
set service_keyfile=D:/server/ssl/your.key
Dui Yu Shang Mian De restfulShi Li ,Ru Guo She Zhi Wei httpsFu Wu :
Qing Qiu Li Zi
POST https://127.0.0.1:8301/api/echo HTTP/1.1
Content-Type: application/x-www-form-urlencoded
aaa=12&bbb=hello&ccc=world
Qing Qiu Tou He Xiang Ying Tou
import (
"github.com/ssgo/s"
"net/http"
"os"
)
func headerTest(request *http.Request, response http.ResponseWriter) (token string) {
token = "Get header token:" + request.Header.Get("token")
response.Header().Set("resToken", "Hello world")
return
}
//Shu Ru Can Shu Fang Zai Qian Fang Zai Hou Du Ke Yi
func label(in struct{ Enter string },
request *http.Request, response http.ResponseWriter) (out struct{ Label string}) {
prefix := request.Header.Get("prefix")
out.Label = prefix + in.Enter
response.Header().Set("accept", "application/json")
return
}
func main() {
//header
s.Restful(0, "GET", "/header_test", headerTest)
s.Restful(0, "POST", "/label", label)
s.Start() ////She Zhi service_httpVersion=1
}
She Zhi Xiang Ying Zhuang Tai Ma
Shi Yong goBiao Zhun Ku Zi Dai De response
response.WriteHeader(504)
return "controller timeout"
})
Wen Jian Shang Chuan
Wen Jian Shang Chuan Shi Yong Biao Zhun Bao Zi Dai Gong Neng
func upload(w http.ResponseWriter, r *http.Request) {
r.ParseMultipartForm(32 << 20)
file, handler, err := r.FormFile("uploadfile")
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
fmt.Fprintf(w, "%v", handler.Header)
f, err := os.OpenFile("./upload/"+handler.Filename, os.O_WRONLY|os.O_CREATE, 0666)
if err != nil {
fmt.Println(err)
return
}
defer f.Close()
io.Copy(f, file)
}
Guo Lu Qi Yu Shen Fen Ren Zheng
Zhi Xing Xian Hou Shun Xu Wei :Qian Zhi Guo Lu Qi , Shen Fen Ren Zheng , Hou Zhi Guo Lu Qi
import (
"github.com/ssgo/s"
"net/http"
"os"
)
type actionFilter struct {
Aaa int
Bbb string
Ccc string
Filter1 string
Filter2 int
}
func authTest(in actionFilter) actionFilter {
return in
}
func main() {
s.Restful(0, "GET", "/auth_test", authTest)
s.Restful(1, "POST", "/auth_test", authTest)
s.Restful(2, "PUT", "/auth_test", authTest)
//Qian Zhi Guo Lu Qi
s.SetInFilter(func(in *map[string]any, request *http.Request, response *http.ResponseWriter) any {
(*in)["Filter1"] = "see"
(*in)["filter2"] = 100
(*response).Header().Set("content-type", "application/json")
return nil
})
//Shen Fen Ren Zheng
s.SetAuthChecker(func(authLevel uint, url *string, in *map[string]any, request *http.Request) bool {
token := request.Header.Get("Token")
switch authLevel {
case 1:
return token == "dev" || token == "develop"
case 2:
return token == "dev"
}
return false
})
//Hou Zhi Guo Lu Qi
s.SetOutFilter(func(in *map[string]any, request *http.Request, response *http.ResponseWriter, result any) (any, bool) {
data := result.(actionFilter)
data.Filter2 = data.Filter2 + 100
return data, false
})
s.Start() ////She Zhi service_httpVersion=1
}
SetAuthCheckerFang Fa return falseShi ,Qing Qiu Hui Fan Hui 403Zhuang Tai Ma ,Jin Zhi Fang Wen
Rewrite
Shi Xian Dui urlDe Zhong Xie
s.Register(0, "/show", func(in struct{ S1, S2 string }) string {
return in.S1 + " " + in.S2
})
s.Register(0, "/show/{s1}", func(in struct{ S1, S2 string }) string {
return in.S1 + " " + in.S2
})
s.Rewrite("/r1", "/show")
//get http://127.0.0.1:8305/r2/123?s2=456 --> http://127.0.0.1:8305/r2/123?s2=456
s.Rewrite("/r2/(\\w+?)\\?.*?", "/show/$1")
//post http://127.0.0.1:8305/r3?name=123 s2=456
s.Rewrite("/r3\\?name=(\\w+)", "/show/$1")
s.Start() //She Zhi service_httpVersion=1
}
Yi Bu Fu Wu
Qi Dong Yi Bu Fu Wu Yu Yi Bu Fu Wu De Diao Yong :
import (
"fmt"
"github.com/ssgo/s"
"net/http"
"os"
)
type actIn struct {
Aaa int
Bbb string
Ccc string
}
func act(req *http.Request, in actIn) actIn {
return in
}
func main() {
s.ResetAllSets()
//http://127.0.0.1:8301/api/echo?aaa=1&bbb=2&ccc=3
s.Restful(0, "GET", "/act/echo", act)
s.Restful(1, "POST", "/act/echo", act)
//s.Restful(2, "PUT", "/act/echo", act)
as := s.AsyncStart()
defer as.Stop()
asyncPost := as.Post("/act/echo?aaa=hello&bbb=hi", s.Map{
"ccc": "welcome",
}, "Cid", "demo-post").Map()
asyncPut := as.Put("/act/echo", s.Map{
"aaa": "hello",
"bbb": "hi",
"ccc": "welcome",
}, "Cid", "demo-put").Map()
asyncGet := as.Get("/act/echo?aaa=11&bbb=222&ccc=333").Map()
fmt.Println("asyncPut:", asyncPut)
fmt.Println("asyncPost:", asyncPost)
fmt.Println("asyncGet", asyncGet)
}
proxy
Jiang Fu Wu Dai Li Wei Zi Ding Yi Fu Wu ,Zhi Chi Zheng Ze Biao Da Shi
s.Register(1, "/serv/provide", func() (out struct{ Name string }) {
out.Name = "server here"
return
})
//Diao Yong Zhu Ce De Fu Wu
s.Register(2, "/serv/gate_get", func(c *discover.Caller) string {
r := struct{ Name string }{}
c.Get("e1", "/serv/provide").To(&r)
return "gate get " + r.Name
})
s.Proxy("/proxy/(.+?)", "e1", "/serv/$1")
os.Setenv("LOG_FILE", os.DevNull)
os.Setenv("SERVICE_ACCESSTOKENS", `{"e1_level1": 1, "e1_level2": 2, "e1_level3":3}`)
os.Setenv("DISCOVER_CALLS", `{"e1":"5000:e1_level3:1"}`)
//Yi Ding Yao Zuo reset,Bu Ran Shou Dong She Zhi De Huan Jing Bian Liang Bu Ke Bei Jia Zai ****
config.ResetConfigEnv()
as := s.AsyncStart()
fmt.Println("/serv/provide:")
fmt.Println(as.Get("/serv/provide", "Access-Token", "e1_level1"))
fmt.Println("/serv/gate_get:")
fmt.Println(as.Get("/serv/gate_get", "Access-Token", "e1_level2"))
fmt.Println("/proxy/provide:")
fmt.Println(as.Get("/proxy/provide", "Access-Token", "e1_level2"))
fmt.Println("/proxy/gate_get:")
fmt.Println(as.Get("/proxy/gate_get", "Access-Token", "e1_level2"))
defer as.Stop()
}
Shou Quan Deng Ji
Zhu Ce Fu Wu Zhi Ding authLevelWei 0,Qi Dong De Fu Wu Bei Diao Yong Shi Bu Xu Yao Jian Quan ,Ke Yi Zhi Jie Fang Wen
Ke Yi Wei Yi Ge Fu Wu Zhi Ding Duo Ge Shou Quan Deng Ji (1,2,3,4,5,6......),Ju Bei Dui Ying Shou Quan Deng Ji De accessTokenDe Ke Hu Duan ,You Quan Xian Fang Wen Fu Wu
callsKe Hu Duan Shi Yong Fu Wu Ju Bei De Gao Deng Ji De Fang Wen token,Ke Yi Fang Wen Yi Di Shou Quan Deng Ji Qi Dong De Fu Wu
Ru Guo accessTokenCuo Wu ,Huo Zhe Ju Bei Xiao Yu Fu Wu Qi Dong Shou Quan Deng Ji De token,Fang Wen Fu Wu Hui Bei Ju Jue ,Fan Hui 403
Li Ru :
Ke Hu Duan Ju Bei 6Deng Ji accessToken,Dui Yu Ying Yong Xia Zhu Ce Qi Dong De 1,2,3,4,5,6Fu Wu Mo Ren Ju Bei Fang Wen Quan Xian
Ke Hu Duan Jin Ju Bei 1Deng Ji accessToken,Dui Yu Ying Yong Xia Zhu Ce Qi Dong De 2,3,4,5,6Fu Wu De Fang Wen Hui Bei Ju Jue
Jing Tai Zi Yuan
s.Start()
Zhu Yi :resourceJie Wei Yi Ding Yao You /
Qi Dong Fu Wu Ke Yi Fang Wen Zhan Dian resourceMu Lu Xia De Jing Tai Zi Yuan
controllerKe Yi Tong Guo proxyLai Shi Xian Duo Ge Jing Tai Fu Wu De Fu Zai Dai Li :
s.Start()
Websocket
Yi Ge Yi ActionWei Chu Li Dan Wei De Websocket Feng Zhuang
func RegisterWebsocket(authLevel uint, name string, updater *websocket.Upgrader,
onOpen any,
onClose any,
decoder func(data any) (action string, request *map[string]any, err error),
encoder func(action string, data any) any) *ActionRegister {}
// Zhu Ce Websocket Action
func (ar *ActionRegister) RegisterAction(authLevel uint, actionName string, action any) {}
// Zhu Ce Zhen Dui Action De Ren Zheng Mo Kuai
func SetActionAuthChecker(authChecker func(authLevel uint, url *string, action *string, request *map[string]any, sess any) bool) {}
Shi Yong websocket:
ws.RegisterAction(0, "hello", func(in struct{ Name string })
(out struct{ Name string }) {
out.Name = in.Name + "!"
return
})
c, _, err := websocket.DefaultDialer.Dial("ws://"+addr2+"/proxy/ws", nil)
err = c.WriteJSON(s.Map{"action": "hello", "name": "aaa"})
err = c.ReadJSON(&r)
c.Close()
cookie
cookieKe Yi Shi Yong goBiao Zhun Bao httpTi Gong De Fang Fa ,cookieFa Song Gei Liu Lan Qi ,Ji Tian Jia Yi Ge cookie
cookieName := http.Cookie{
Name: "name",
Value: "jim",
HttpOnly: true,
}
cookieToken := http.Cookie{
Name: "token",
Value: "asd123dsa",
HttpOnly: true,
MaxAge: 60,//She Zhi You Xiao Qi Wei 60s
}
w.Header().Set("Set-Cookie", cookieName.String())
w.Header().Add("Set-Cookie", cookieToken.String())
}
Shi Yong httpDe setCookieYe Ke Yi
cookieName := http.Cookie{
Name: "name",
Value: "jim",
HttpOnly: true,
}
cookieToken := http.Cookie{
Name: "token",
Value: "asd123dsa",
HttpOnly: true,
}
http.SetCookie(w, &cookieName)
http.SetCookie(w, &cookieToken)
}
Du Qu Cookie
cookies := r.Header["Cookie"]
nameCookie, _ := r.Cookie("name")
}
SessionKeyHe SessionInject
func SetSessionKey(inSessionKey string) {}
// Huo Qu SessionKey
func GetSessionKey() string {}
// She Zhi Yi Ge Sheng Ming Zhou Qi Zai Request Zhong De Dui Xiang ,Qing Qiu Zhong Ke Yi Shi Yong Dui Xiang Lei Xing Zhu Ru Can Shu Fang Bian Diao Yong
func SetSessionInject(request *http.Request, obj any) {}
// Huo Qu Ben Sheng Ming Zhou Qi Zhong Zhi Ding Lei Xing De Session Dui Xiang
func GetSessionInject(request *http.Request, dataType reflect.Type) any {}
Ji Yu Http Header Chuan Di SessionId(Bu Tui Jian Shi Yong Cookie)
s.SetSessionKey("name")
s.Start()
func showFullName(in struct{ Name string },req *http.Request) (out struct{ FullName string }) {
out.FullName = in.Name + " Lee." + s.GetSessionId(req)
return
}
Shi Yong SetSession She Zhi De Dui Xiang Ke Yi Zai Fu Wu Fang Fa Zhong Zhi Jie Shi Yong Xiang Tong Lei Xing Huo De Dui Xiang ,Yi Ban Shi Zai AuthChecker Huo Zhe InFilter Zhong She Zhi
sessionDui Xiang Zhu Ru
s.SetSessionInject(req, aiValue)
ai := s.GetSessionInject(req, reflect.TypeOf(actionIn{})).(actionIn)
Dui Xiang Zhu Ru
func SetInject(obj any) {}
// Huo Qu Yi Ge Zhu Ru Dui Xiang
func GetInject(dataType reflect.Type) any {}
Zhu Ru Dui Xiang Ke Yi Kua Qing Qiu Ti
Aaa int
Bbb string
Ccc string
}
func showInject(in struct{ Name string }) (out struct{ FullName string }) {
ai := s.GetInject(reflect.TypeOf(actionIn{})).(actionIn)
out.FullName = in.Name + " Lee." + " " + ai.Ccc
return
}
func main() {
//......
aiValue := actionIn{2, "so", "cool"}
s.SetInject(aiValue)
//......
}
panicChu Li
Jie Shou Fu Wu Fang Fa Zhu Dong panicDe Chu Li ,Ke Zi Ding Yi SetErrorHandle
Ru Guo Mei You Zi Ding Yi errorHandle,Ke Yi Zou Kuang Jia Mo Ren De Chu Li Fang Shi ,Jian Yi Zi Ding Yi SetErrorHandle,She Zhi Zi Shen De Fu Wu Fang Fa De Tong Yi panicChu Li
panic(errors.New("s panic test"))
}
func main() {
s.ResetAllSets()
s.Register(0, "/panic_test", panicFunc)
s.SetErrorHandle(func(err any, req *http.Request, rsp *http.ResponseWriter) any {
return s.Map{"msg": "defined", "code": "30889", "panic": fmt.Sprintf("%s", err)}
})
as := s.AsyncStart()
defer as.Stop()
r := as.Get("/panic_test")
panicArr := r.Map()
fmt.Println(panicArr)
}
Pei Zhi
Fu Wu Pei Zhi
Ke Zai Ying Yong Gen Mu Lu Fang Zhi Yi Ge service.json
"listen": ":8081",
"httpVersion": 2,
"rwTimeout": 5000,
"keepaliveTimeout": 15000,
"rewriteTimeout": 10000,
"noLogGets": false,
"noLogHeaders": "Accept,Accept-Encoding,Cache-Control,Pragma,Connection",
"noLogInputFields": false,
"logInputArrayNum": 0,
"logOutputFields": "code,message",
"logOutputArrayNum": 2,
"logWebsocketAction": false,
"compress": true,
"certFile": "",
"keyFile": "",
"accessTokens": {
"hasfjlkdlasfsa": 1,
"fdasfsadfdsa": 2,
"9ifjjabdsadsa": 2
}
}
| Pei Zhi Xiang | Lei Xing | Yang Li Shu Ju | Shuo Ming |
|---|---|---|---|
| listen | string | :8081 | Fu Wu Bang Ding De Duan Kou Hao |
| httpVersion | int | 2 | Fu Wu De httpBan Ben |
| rwTimeout | int Hao Miao |
10000 | Fu Wu Du Xie Chao Shi Shi Jian |
| keepaliveTimeout | int Hao Miao |
10000 | keepalivedJi Huo Shi Lian Jie Yun Xu Kong Xian De Zui Da Shi Jian Ru Guo Wei She Zhi ,Mo Ren Wei 15Miao |
| rewriteTimeout | int Hao Miao |
5000 | rewrite, proxyCao Zuo De Chao Shi Shi Jian |
| noLogGets | bool | false | Wei trueShi Ping Bi GetWang Luo Qing Qiu Ri Zhi |
| noLogHeaders | string | Accept,Accept-Encoding | Ri Zhi Qing Qiu Tou He Xiang Ying Tou Ping Bi headerTou Zhi Ding Zi Duan Shu Chu Ke She Zhi Wei false |
| noLogInputFields | string | accessToken | Ri Zhi Guo Lu Shu Ru De Zi Duan ,Mu Qian Wei Qi Yong Wei falseDai Biao Suo You Zi Duan Du Ri Zhi Da Yin |
| logInputArrayNum | int | 2 | Shu Ru Zi Duan Zi Yuan Su (Shu Zu )Ri Zhi Da Yin Ge Shu Xian Zhi Mo Ren Wei 0, s.Arr{1, 2, 3}Hui Shu Chu Wei float64 (3) |
| logOutputFields | string | code,message | Ri Zhi Shu Chu De Zi Duan Bai Ming Dan Mo Ren Wei false,Dai Biao Bu Xian Zhi |
| logOutputArrayNum | int | 3 | Shu Chu Zi Duan Zi Yuan Su (Shu Zu )Ri Zhi Da Yin Ge Shu Xian Zhi Mo Ren Wei 0 |
| logWebsocketAction | bool | false | Shi Fou Zhan Shi websocketDe WSACTIONQing Qiu Ri Zhi |
| compress | bool | false | Shi Fou Kai Qi Xiang Ying gzipYa Suo (Bao Han Jing Tai Zi Yuan ) |
| compressMinSize | int | 1024 | She Zhi Xiang Ying Nei Rong gzipYa Suo Man Zu De Zui Xiao Chi Cun Mo Ren Wei 1024Bytes |
| compressMaxSize | int | 4096000 | She Zhi Xiang Ying Nei Rong gzipYa Suo Man Zu De Zui Da Chi Cun Mo Ren Wei 4096000Bytes |
| certFile | string | httpsQian Ming Zheng Shu Wen Jian Lu Jing | |
| keyFile | string | httpsSi Yao Zheng Shu Wen Jian Lu Jing | |
| accessTokens | map | {"ad2dc32cde9" : 1} | Dang Qian Fu Wu Fang Wen Shou Quan Ma ,Ke Yi Gen Ju Bu Tong De Shou Quan Deng Ji She Zhi Duo Ge |
| acceptXRealIpWithoutRequestId | bool | false | Zai Mei You X-Request-IDDe Qing Kuang Xia Shi Fou Hu Lue X-Real-IP falseDai Biao Hu Lue |
Fu Wu Fa Xian Pei Zhi
Ke Zai Ying Yong Gen Mu Lu Fang Zhi Yi Ge discover.json
"registry": "127.0.0.1:6379:15",
"app": "",
"weight": 1,
"calls": {
"s1": "5000:hasfjlkdlasfsa:2:s"
}
}
| Pei Zhi Xiang | Lei Xing | Yang Li Shu Ju | Shuo Ming |
|---|---|---|---|
| registry | string | 127.0.0.1:6379:15 | Fu Wu Fa Xian redisDe host, Duan Kou , Shu Ju Ku , Mi Ma , Chao Shi Shi Jian Pei Zhi Yong Yu Fu Wu Zhu Ce Yu Zhu Xiao |
| app | string | s1 | Ke Bei Fa Xian De Fu Wu Ying Yong Ming |
| weight | int | 2 | Fu Zai Jun Heng Fu Wu Quan Zhong |
| calls | string | Ke Hu Duan Fang Wen Fu Wu De Pei Zhi {"s1":"5000:adfad"} {"s1":"5000:s"} {"s1":"adfad:s"} |
|
| callRetryTimes | int | 10 | Ke Hu Duan Fang Wen Fu Wu Shi Bai Zhong Shi Ci Shu |
callsZhong Bao Han :
timeout:accessToken:httpVersion:SSL
Mei You Gu Ding Qian Hou Shun Xu ,Zi Dong Jian Cha Pei Zhi Xing
| Pei Zhi Xiang | Lei Xing | Bu Tian Mo Ren | Yang Li Shu Ju | Shuo Ming |
|---|---|---|---|---|
| timeout | int | 5000ms | 5000 | Ru Guo Wei She Zhi Mo Ren Wei 10000(10Miao ),Bi Ru :":s1token" ":s1token:2" |
| accessToken | string | Kong | 5000 | Bi Ru :"5000" |
| httpVersion | int | http 2.0 no ssl | 2 | Diao Yong Fu Wu Shi Yong De httpXie Yi :1Dai Biao http1.1 2Dai Biao http2 |
| SSL | string | Bu Shi Yong ssl | s | Shi Fou Shi Yong https ssl Zhe Li De Zhi Ke Yi Bu Tian Huo Zhe Wei s |
callsJian Cha Shun Xu :
- 1Huo 2Dai Biao http 1.1 2.0 Mo Ren Wei 2
- sDai Biao https Mei You s Biao Shi Bu Shi Yong ssl
- Zi Fu Chuan Dai Biao token
- intLei Xing Dai Biao Chao Shi De ms
- Qi Ta Lei Xing Wei token
Ri Zhi Pei Zhi
Ke Zai Ying Yong Gen Mu Lu Fang Zhi Yi Ge log.json
"level": "info",
"truncations": ["github.com/", "/ssgo/"],
"sensitive": ["password", "secure", "token", "accessToken"],
"regexSensitive": ["(^|[^\\d])(1\\d{10})([^\\d]|$)", "\\[(\\w+)\\]"],
"sensitiveRule": ["11:3*3", "7:2*2", "3:1*1", "2:1*0"]
}
| Pei Zhi Xiang | Lei Xing | Yang Li Shu Ju | Shuo Ming |
|---|---|---|---|
| level | string | info | Zhi Ding De Ri Zhi Shu Chu Ji Bie debug,info,warning,error |
| file | string | /dev/null | Ri Zhi Wen Jian She Zhi Wei nil,Bu Zhan Shi Ri Zhi Ke Yi Zhi Ding Ri Zhi Wen Jian Lu Jing Bu She Zhi Mo Ren Da Xiang Kong Zhi Tai |
| truncations | []string | ["github.com/", "/ssgo/"] | Cheng Xu Diao Yong Zhan callStackZi Duan Hu Lue De Mu Lu |
| sensitive | []string | ["password","token"] | Min Gan Zi Duan |
| regexSensitive | []string | ["\[(\w+)\]"] | Ri Zhi Min Gan Xin Xi Zheng Ze Pi Pei |
| sensitiveRule | []string | ["11:33", "7:22", "3:11", "2:10"] | Min Gan Zi Duan Zhan Shi Gui Ze |
redisPei Zhi
Ke Zai Ying Yong Gen Mu Lu Fang Zhi Yi Ge redis.json
"test": {
"host": "127.0.0.1:6379",
"password": "",
"db": 1,
"maxActive": 100,
"maxIdles": 30,
"idleTimeout": 0,
"connTimeout": 3000,
"readTimeout": 0,
"writeTimeout": 0
},
"dev": {
"...":"..."
}
}
| Pei Zhi Xiang | Lei Xing | Yang Li Shu Ju | Shuo Ming |
|---|---|---|---|
| host | string | 127.0.0.1:6379 | hostPei Zhi |
| password | string | AESJia Mi Hou De Mi Ma | |
| db | int | 1 | Xuan Ze De Shu Ju Ku |
| maxActive | int | 1 | Zui Da Lian Jie Shu Mo Ren Wei 0,Dai Biao Bu Xian Zhi |
| maxIdles | int | 10 | Zui Da Kong Xian Lian Jie Shu ,Mo Ren Wei 0Biao Shi Bu Xian Zhi |
| idleTimeout | int Hao Miao |
10000 | keepalivedJi Huo Shi Lian Jie Yun Xu Kong Xian De Zui Da Shi Jian Mo Ren Wei 0,Dai Biao Bu Xian Zhi |
| connTimeout | int Hao Miao |
10000 | Lian Jie Chao Shi Shi Jian ,Mo Ren Wei 10s |
| readTimeout | int Hao Miao |
10000 | Du Chao Shi Shi Jian ,Mo Ren Wei 10s |
| writeTimeout | int Hao Miao |
10000 | Xie Chao Shi Shi Jian ,Mo Ren Wei 10s |
Shu Ju Ku Pei Zhi
Ke Yi Zai Xiang Mu Gen Mu Lu Fang Zhi Yi Ge db.jsonLai Zuo mysqlShu Ju Ku De Pei Zhi
"test": {
"type": "mysql",
"user": "test",
"password": "34RVCy0rQBSQmLX64xjoyg==",
"host": "/tmp/mysql.sock",
"db": "test",
"maxOpens": 100,
"maxIdles": 30,
"maxLifeTime": 0
}
}
| Pei Zhi Xiang | Lei Xing | Yang Li Shu Ju | Shuo Ming |
|---|---|---|---|
| type | string | mysql | Shu Ju Ku Lei Xing |
| user | string | test | Shu Ju Ku Ming |
| password | string | Jing Guo AESJia Mi De Shu Ju Ku Mi Ma | |
| host | string | Ke Wei sockWen Jian Lu Jing Huo Zhe mysqlDe Di Zhi , Duan Kou Hao | |
| db | string | test | Shu Ju Ku Ming |
| maxOpens | int | 100 | Zui Da Lian Jie Shu ,0Biao Shi Bu Xian Zhi |
| maxIdles | int | 30 | Zui Da Kong Xian Lian Jie ,0Biao Shi Bu Xian Zhi |
| maxLifeTime | int | 0 | Mei Ge Lian Jie De Cun Huo Shi Jian ,0Biao Shi Yong Yuan |
Shu Ju Ku Mi Ma Jia Mi Ke Yi Bao Zhang Bu Xie Lu ,He redisJia Mi Fang Fa Wan Quan Xiang Tong
Ye Ke Yi Yi Qi Ta Fang Shi Zhi Yao Zai init Han Shu Zhong Diao Yong db.SetEncryptKeys She Zhi Pi Pei De keyHe ivJi Ke
Wang Guan Dai Li Pei Zhi
Ke Yi Zai Xiang Mu Gen Mu Lu Fang Zhi Yi Ge gateway.jsonLai Zuo Wang Guan Dai Li Pei Zhi
"checkInterval": 1,
"proxies": {
"/abc": "k1",
"/def":"g1",
"/cce":"g1"
}
}
| Pei Zhi Xiang | Lei Xing | Yang Li Shu Ju | Shuo Ming |
|---|---|---|---|
| checkInterval | int |
10 | Mei Ge Pei Zhi De Miao Shu Dao redisZhong Huo Qu Zui Xin Shu Ju Zui Xiao Pei Zhi Zhi Wei 3 |
| proxies | map | {"/abc": "k1"} | Lu You Dao Ying Yong Ming De Ying She |
proxies
proxiesKe Yi Cong Huan Jing Bian Liang , Pei Zhi Wen Jian , redisZhong Lai Huo Qu . Qi Zhong redisPei Zhi Shi Dong Tai Pei Zhi ,Huo Qu redisZhong _proxiesDe Zhi ,Dong Tai Geng Xin Dao gatewayYing Yong Shang .
envPei Zhi
Ke Yi Zai Ying Yong Gen Mu Lu Shi Yong env.jsonZong He Pei Zhi (service+discover+log+gateway+redis+db)Fu Wu :
"redis":{
"test":{
"host":"127.0.0.1:6379",
"password":"upvNALgTxwS/xUp2Cie4tg==",
"db":1
}
},
"service":{
"listen":":8081"
},
"discover": {
"app":"e1"
},
"log": {
"level": "info"
},
"db":{
"test": {
"type": "mysql",
"user": "root",
"password": "8wv3Kie3Y4nLArmSWs+hng==",
"host": "127.0.0.1:3306",
"db": "test"
}
}
}
env.jsonDe You Xian Ji Gao Yu Qi Ta Pei Zhi Wen Jian .
Ru Guo Tong Ji Mu Lu Xia Tong Shi Chu Xian envHe serverPei Zhi Wen Jian ,envDe Pei Zhi Hui Dui serverPei Zhi Jin Xing Fu Gai .
Huan Jing Bian Liang
Yi Xia Shi Fu Wu Pei Zhi
export discover_app='c1'
export discover_calls_s1='5000:asfews:2'
windowsXia :
set discover_app=c1
set discover_calls_s1=5000:asfews:2
Yi Xia Shi Fu Wu Fa Xian De redisPei Zhi
export discover_registry='127.0.0.1:6379:1:udigzs+oTp2Kau3Gs20xXQ=='
windowsXia :
set discover_registry=127.0.0.1:6379:udigzs+oTp2Kau3Gs20xXQ==
Huan Jing Bian Liang Dan Xiang Pei Zhi You Xian Ji Da Yu Zong Ti Pei Zhi
export service_calls_k1_accesstokens='s1-token'
service_calls_k1_accesstokensDe Pei Zhi Hui Fu Gai service_callsDui k1Fu Wu accessTokenDe Pei Zhi
Pei Zhi You Xian Ji Shun Xu
cliShe Zhi Huan Jing Bian Liang (set/export) > Pei Zhi Wen Jian
Fu Wu Diao Yong
Fu Wu Diao Yong Ke Hu Duan Mo Shi
func (caller *Caller) Get(app, path string, headers ... string) *Result {}
func (caller *Caller) Post(app, path string, data any, headers ... string) *Result {}
func (caller *Caller) Put(app, path string, data any, headers ... string) *Result {}
func (caller *Caller) Head(app, path string, data any, headers ... string) *Result {}
func (caller *Caller) Delete(app, path string, data any, headers ... string) *Result {}
func (caller *Caller) Do(app, path string, data any, headers ... string) *Result {}
Fu Zai Jun Heng Suan Fa
func (caller *Caller) DoWithNode(method, app, withNode, path string, data any, headers ... string) (*Result, string) {}
// She Zhi Yi Ge Fu Zai Jun Heng Suan Fa
func SetLoadBalancer(lb LoadBalancer) {}
type LoadBalancer interface {
// Mei Ge Qing Qiu Wan Cheng Hou Ti Gong Xin Xi
Response(node *NodeInfo, err error, response *http.Response, responseTimeing int64)
// Qing Qiu Shi Gen Ju Jie Dian De De Fen Qu Zui Xiao Zhi Fa Qi Qing Qiu
Next(nodes []*NodeInfo, request *http.Request) *NodeInfo
}
Ri Zhi Shu Chu
Shi Yong jsonGe Shi Shu Chu Ri Zhi
func Info(logType string, data Map) {}
func Warning(logType string, data Map) {}
func Error(logType string, data Map) {}
func Log(logLevel LogLevelType, logType string, data Map) {}
func TraceLog(logLevel LogLevelType, logType string, data Map) {}
Document Zi Dong Sheng Cheng Jie Kou Wen Dang
func MakeDocument() []Api {}
// Sheng Cheng Wen Dang Bing Cun Chu Dao json Wen Jian Zhong
func MakeJsonDocumentFile(file string) {
// Sheng Cheng Wen Dang Bing Cun Chu Dao html Wen Jian Zhong ,Shi Yong Mo Ren htmlMo Ban
func MakeHtmlDocumentFile(title, toFile string) string {}
// Sheng Cheng Wen Dang Bing Cun Chu Dao html Wen Jian Zhong ,Shi Yong Zhi Ding htmlMo Ban
func MakeHtmlDocumentFromFile(title, toFile, fromFile string) string {}
Zhen Dui Zhu Ce Hao De Fu Wu ,Ke Qing Song Shi Xian Wen Dang De Sheng Cheng
s.Register(0, "/show2", show2)
s.Register(0, "/show3", show3)
s.Register(0, "/show4", show4)
s.MakeHtmlDocumentFile("Ce Shi Wen Dang ", "doc.html")
Sheng Cheng htmlWen Dang Mo Ren Shi Yong sKuang Jia Gen Mu Lu Xia De DocTpl.htmlZuo Wei Mo Ban ,Nei Bu Cai Yong {{ }}Biao Shi Yu Fa
DocTpl.htmlKe Yi Zuo Wei Xin Jian Mo Ban De Can Kao
Shi Yong Ming Ling Xing Chuang Jian Wen Dang
Jia She Bian Yi Hao De Wen Jian Wei ./server
./server doc
// Sheng Cheng json Ge Shi Wen Dang
./server doc xxx.json
// Sheng Cheng html Ge Shi Wen Dang ,Shi Yong Mo Ren htmlMo Ban
./server doc xxx.html
// Sheng Cheng html Ge Shi Wen Dang ,Shi Yong Zhi Ding htmlMo Ban
./server doc xxx.html tpl.html