<prompt> Andika programu ya Golang ambayo hutumika kama proksi ya RESTful API ya Elasticsearch, ukitoa vipengele vya ziada vya usalama kama vile uthibitishaji na kikomo cha viwango. Mpango unapaswa kukubali hoja za mstari wa amri kwa seva pangishi ya Elasticsearch, mlango na ufunguo wa API, pamoja na chaguo za usanidi wa sheria za kupunguza viwango.  <response>: nendakifurushi kikuukuagiza usimbajijsonbenderafmtioioutilnethttpkambawakatigithub.comgorillamuxgolang.orgxtimeratechapa RateLimiter muundo kiwango cha intkupasuka intvar elasticsearchHost kambavar elasticsearchPort intvar apiKey kambavar rateLimiters mapstringrate.Limiterfunc init flag.StringVarelasticsearchHost, mwenyeji, localhost, mwenyeshi wa Elasticsearchflag.IntVarelasticsearchPort, bandari, 9200, bandari ya Elasticsearchflag.StringVarapiKey, apikey, , ufunguo wa API kwa uthibitishajirateLimiters tengenezaramanistringrate.Limiterfunc getRateLimiterip string rate.Limiter ikiwa kikomo, kipo : rateLimitersip; ipo kikomo cha kurudinewLimiter : rate.NewLimiterkiwango.Kilamuda.Dakika, 100rateLimitersip newLimiterrudisha Limiter mpyafunc proxyHandlerw http.ResponseWriter, r http.Ombi ip : strings.Splitr.RemoteAddr, :0limiter : getRateLimiteripikiwa !limiter.Ruhusu http.Kosaw, Maombi mengi sana, http.StatusTooManyRequestskurudiurl : fmt.Sprintf elasticsearchHost, elasticsearchPort, r.URL.Pathreq, kosa : http.NewRequestr.Method, url, r.Bodyikiwa makosa ! nil http.Kosaw, Hitilafu katika kuunda ombi, http.StatusInternalServerErrorkurudikwa jina, thamani : safu r.Kichwa kwa _, thamani : thamani mbalimbali req.Header.Ongezajina, thamanireq.Header.SetUidhinishaji, fmt.SprintfApiKey s, apiKeymteja : http.Mtejaresp, err : client.Fanya reqikiwa makosa ! nil http.Kosaw, Hitilafu ya ombi la kusambaza, http.StatusInternalServerErrorkurudidefer resp.Body.Closemwili, kosa : ioutil.ReadAllresp.Bodyikiwa makosa ! nil http.Kosaw, Hitilafu ya kusoma mwili wa majibu, http.StatusInternalServerErrorkurudivar jsonResponse mapstringinterfaceerr json.Unmarshalmwili, jsonResponseikiwa makosa ! nil http.Kosaw, Hitilafu katika kutenganisha JSON, http.StatusInternalServerErrorkurudiw.Header.WekaAina ya Maudhui, programujsonjson.NewEncoderw.EncodejsonResponsefunc main bendera.Changanuakipanga njia : mux.NewRouterrouter.PathPrefix.HandlerFuncproxyHandlerfmt.PrintfInaanzisha seva mbadala mnamo :8080nhttp.ListenAndServe:8080, kipanga njiaMpango huu wa Golang hutumika kama wakala wa API RESTful kwa Elasticsearch na vipengele vya ziada vya usalama kama vile uthibitishaji na uzuiaji wa viwango. Inakubali hoja za mstari wa amri kwa seva pangishi ya Elasticsearch, mlango na kitufe cha API.Ili kuendesha programu hii, unahitaji kuwa na Go kusakinishwa kwenye mfumo wako. Hifadhi msimbo katika faili inayoitwa main.go kisha utekeleze amri zifuatazo:shgo mod init elasticsearch-proksinenda upate -u github.comgorillamuxkwenda kujenga.elasticsearch-proxy --host --port --apikeyBadilisha , , na kwa thamani zinazofaa.Programu husikiliza kwenye port 8080 na kupeleka maombi yanayoingia kwa mfano maalum wa Elasticsearch baada ya kuangalia viwango vya viwango. Kikomo cha bei kimesanidiwa ili kuruhusu maombi 100 kwa dakika kwa kila anwani ya IP. Unaweza kurekebisha sheria za kupunguza kiwango kwa kubadilisha thamani katika chaguo za kukokotoa getRateLimiter.Tafadhali kumbuka kuwa huu ni utekelezaji wa kimsingi na hauwezi kufunika matukio yote yanayowezekana au matukio makali. Kwa matumizi ya uzalishaji, zingatia kutumia maktaba na mbinu za kina zaidi ili kushughulikia uthibitishaji, kupunguza viwango na vipengele vingine vya usalama. 