成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

常用的 Git 配置,你知道幾個(gè)?

開發(fā) 前端
OTel 是可觀測系統(tǒng)的新標(biāo)準(zhǔn),基于它可以兼容以前使用的 Prometheus、 victoriametrics、skywalking 等系統(tǒng),同時(shí)還可以靈活擴(kuò)展,不用與任何但一生態(tài)或技術(shù)棧進(jìn)行綁定。
  1. 使用NewServer函數(shù)構(gòu)建服務(wù)實(shí)例,利用依賴注入方式將所有的依賴參數(shù)包含進(jìn)來。
func NewServer(
 logger *Logger
 config *Config
 commentStore *commentStore
 anotherStore *anotherStore
) http.Handler {
 mux := http.NewServeMux()
 addRoutes(
  mux,
  Logger,
  Config,
  commentStore,
  anotherStore,
 )
 var handler http.Handler = mux
 handler = someMiddleware(handler)
 handler = someMiddleware2(handler)
 handler = someMiddleware3(handler)
 return handler
}
  1. 在routes.go文件中統(tǒng)一定義所有路由函數(shù)。
func addRoutes(
 mux                 *http.ServeMux,
 logger              *logging.Logger,
 config              Config,
 tenantsStore        *TenantsStore,
 commentsStore       *CommentsStore,
 conversationService *ConversationService,
 chatGPTService      *ChatGPTService,
 authProxy           *authProxy
) {
 mux.Handle("/api/v1/", handleTenantsGet(logger, tenantsStore))
 mux.Handle("/oauth2/", handleOAuth2Proxy(logger, authProxy))
 mux.HandleFunc("/healthz", handleHealthzPlease(logger))
 mux.Handle("/", http.NotFoundHandler())
}
  1. 主函數(shù)只調(diào)用run函數(shù)來運(yùn)行服務(wù)
func run(ctx context.Context, w io.Writer, args []string) error {
 ctx, cancel := signal.NotifyContext(ctx, os.Interrupt)
 defer cancel()

 // ...
}

func main() {
 ctx := context.Background()
 if err := run(ctx, os.Stdout, os.Args); err != nil {
  fmt.Fprintf(os.Stderr, "%s\n", err)
  os.Exit(1)
 }
}
  1. 返回閉包 handle
// handleSomething handles one of those web requests
// that you hear so much about.
func handleSomething(logger *Logger) http.Handler {
 thing := prepareThing()
 return http.HandlerFunc(
  func(w http.ResponseWriter, r *http.Request) {
   // use thing to handle request
   logger.Info(r.Context(), "msg", "handleSomething")
  }
 )
}
  1. 定義通用的encode和decode函數(shù)
func encode[T any](w http.ResponseWriter, r *http.Request, status int, v T) error {
 w.Header().Set("Content-Type", "application/json")
 w.WriteHeader(status)
 if err := json.NewEncoder(w).Encode(v); err != nil {
  return fmt.Errorf("encode json: %w", err)
 }
 return nil
}

func decode[T any](r *http.Request) (T, error) {
 var v T
 if err := json.NewDecoder(r.Body).Decode(&v); err != nil {
  return v, fmt.Errorf("decode json: %w", err)
 }
 return v, nil
}
  1. 提供一個(gè)抽象的 Validator 接口用于驗(yàn)證
// Validator is an object that can be validated.
type Validator interface {
 // Valid checks the object and returns any
 // problems. If len(problems) == 0 then
 // the object is valid.
 Valid(ctx context.Context) (problems map[string]string)
}

func decodeValid[T Validator](r *http.Request) (T, map[string]string, error) {
 var v T
 if err := json.NewDecoder(r.Body).Decode(&v); err != nil {
  return v, nil, fmt.Errorf("decode json: %w", err)
 }
 if problems := v.Valid(r.Context()); len(problems) > 0 {
  return v, problems, fmt.Errorf("invalid %T: %d problems", v, len(problems))
 }
 return v, nil, nil
}

自定義校驗(yàn)需要實(shí)現(xiàn) Validator 接口。

7.使用 Once 延遲調(diào)用來提高啟動(dòng)性能。

func handleTemplate(files string...) http.HandlerFunc {
 var (
  init    sync.Once
  tpl     *template.Template
  tplerr  error
 )
 return func(w http.ResponseWriter, r *http.Request) {
  init.Do(func(){
   tpl, tplerr = template.ParseFiles(files...)
  })
  if tplerr != nil {
   http.Error(w, tplerr.Error(), http.StatusInternalServerError)
   return
  }
  // use tpl
 }
}

What is OpenTelemetry?

這是一篇 OTel 的科普文章

OpenTelemetry 提供一個(gè)統(tǒng)一、可擴(kuò)展的框架,用于收集、分析和觀察分布式系統(tǒng)的性能數(shù)據(jù)。它包括一組API、庫、代理和收集器,這些組件可以跨多種編程語言和平臺(tái)實(shí)現(xiàn)對(duì)應(yīng)用程序的監(jiān)控。

OpenTelemetry 整合 OpenTracing 和 OpenCensus。

2019年,兩個(gè)社區(qū)進(jìn)行了合并。

同時(shí) OTel 具備以下特征:

  1. 統(tǒng)一性:OpenTelemetry 提供了一個(gè)統(tǒng)一的API,使得開發(fā)者可以在不同的編程語言和框架中以一致的方式實(shí)現(xiàn)監(jiān)控。
  2. 可擴(kuò)展性:可以編寫自己的擴(kuò)展來滿足個(gè)性化需要
  3. 跨平臺(tái):OpenTelemetry 支持多種編程語言,如 Java、Python、Go、.NET 等,以及多種云服務(wù)和容器平臺(tái)。
  4. 社區(qū)驅(qū)動(dòng):作為一個(gè)開源項(xiàng)目,OpenTelemetry 由一個(gè)活躍的社區(qū)支持,社區(qū)成員貢獻(xiàn)代碼、文檔和最佳實(shí)踐。
  5. 與現(xiàn)有工具的兼容性:OpenTelemetry 設(shè)計(jì)時(shí)考慮了與現(xiàn)有監(jiān)控工具的兼容性,如 Prometheus、Jaeger、Zipkin 等,這使得它可以輕松地集成到現(xiàn)有的監(jiān)控基礎(chǔ)設(shè)施中。

提供了一種名為:OTLP(OpenTelemetry Protocol)的通訊協(xié)議,基于 gRPC。

使用該協(xié)議用于客戶端與 Collector 采集器進(jìn)行交互。

Collector 是 OpenTelemetry 架構(gòu)中的一個(gè)關(guān)鍵組件,它負(fù)責(zé)接收、處理和導(dǎo)出數(shù)據(jù)(Trace/log/metrics)。

它可以接受從客戶端發(fā)出的數(shù)據(jù)進(jìn)行處理,同時(shí)可以導(dǎo)出為不同格式的數(shù)據(jù)。

總的來說 OTel 是可觀測系統(tǒng)的新標(biāo)準(zhǔn),基于它可以兼容以前使用的 Prometheus、 victoriametrics、skywalking 等系統(tǒng),同時(shí)還可以靈活擴(kuò)展,不用與任何但一生態(tài)或技術(shù)棧進(jìn)行綁定。

Popular git config options

本文總結(jié)了一些常用的 git 配置

  1. pull.ff only 或 pull.rebase true:這兩個(gè)選項(xiàng)都可以避免在執(zhí)行g(shù)it pull時(shí)意外創(chuàng)建合并提交,特別是當(dāng)上游分支已經(jīng)發(fā)生了變化的時(shí)候。
  2. merge.conflictstyle diff3:這個(gè)選項(xiàng)使得合并沖突更易于閱讀,通過在沖突中顯示原始代碼版本,幫助用戶更好地解決沖突。
  3. rebase.autosquash true 和 rebase.autostash true:這些選項(xiàng)使得修改舊提交變得更容易,并且自動(dòng)處理stash。
  4. push.default simple 或 push.default current:這些選項(xiàng)告訴git push自動(dòng)推送當(dāng)前分支到同名的遠(yuǎn)程分支。
  5. init.defaultBranch main:創(chuàng)建新倉庫時(shí),默認(rèn)創(chuàng)建main分支而不是master分支。
  6. commit.verbose true:在提交時(shí)顯示整個(gè)提交差異。
  7. rerere.enabled true:啟用rerere功能,自動(dòng)解決沖突
  8. help.autocorrect:設(shè)置自動(dòng)矯正的級(jí)別,以自動(dòng)運(yùn)行建議的命令。
  9. core.pager delta:設(shè)置Git使用的分頁器,例如使用delta來查看帶有語法高亮的diff。
  10. diff.algorithm histogram:設(shè)置Git的diff算法,以改善函數(shù)重排時(shí)的diff顯示。

文章鏈接:

責(zé)任編輯:武曉燕 來源: crossoverJie
相關(guān)推薦

2021-10-12 09:20:02

數(shù)據(jù)庫SQL腳本

2023-10-31 08:23:54

網(wǎng)絡(luò)命令Linux

2020-02-23 23:29:07

Python編程開發(fā)

2021-05-06 15:15:13

Python工具代碼

2019-03-05 11:22:17

操作系統(tǒng)調(diào)度算法

2024-11-05 08:13:49

python視覺OpenCV

2022-01-07 08:23:38

k8s AnnotationNginx

2023-10-30 18:00:00

Docker命令開源平臺(tái)

2022-06-30 08:31:54

排序函數(shù)SQL

2023-04-11 08:49:42

排序函數(shù)SQL

2025-03-25 10:49:13

2023-05-17 12:33:11

AI人工智能

2021-11-04 11:54:30

Linux內(nèi)存系統(tǒng)

2023-04-27 08:15:09

2024-01-18 00:16:07

2021-02-27 17:13:21

前端代碼邏輯

2023-11-30 07:37:49

MySQL函數(shù)

2019-11-27 10:27:22

程序員Git腳本語言

2023-05-30 14:54:17

Python循環(huán)語句工具

2023-11-26 00:26:00

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 天堂在线www | 国产黄色一级片 | 国产91中文 | 国产精品高清一区二区三区 | 黄视频网站免费观看 | 91久久久www播放日本观看 | 久久久久久亚洲 | 99久久精品免费看国产免费软件 | 日本福利视频 | 91亚洲国产 | 亚洲精品2 | 精品免费国产视频 | 国产一级在线 | 日韩无 | 污片在线免费观看 | 精品久久久久久久久久久久久久 | 国产精品揄拍一区二区 | 人人干人人爽 | 亚洲欧美一区二区三区在线 | 亚洲精彩视频在线观看 | 黄色精品| 国产高清自拍视频在线观看 | 欧美精品欧美精品系列 | 欧美夜夜| 久久亚洲欧美日韩精品专区 | 亚洲免费视频网址 | 国产分类视频 | 亚洲欧美日韩高清 | 久久久毛片 | 中文字幕一区二区三区精彩视频 | 麻豆精品一区二区三区在线观看 | 午夜av免费 | 欧美三区在线观看 | 亚洲码欧美码一区二区三区 | av看片网站 | 一区二区伦理电影 | 久久精品国产一区二区三区 | 美女爽到呻吟久久久久 | 成人免费在线视频 | 91综合网 | 亚洲视频免费播放 |