原文地址:https://go.dev/blog/deconstructing-type-parameters

译者评论

本文通过 slices.Clone 泛型函数介绍了 Go 是如何使用类型推断完成参数类型的解构。简单来说,如果第一个类型参数是一个复合类型,则可以通过第二、第三或更多的类型参数约束复杂类型中的类型参数,而类型推断则可以通过第一个参数推断出后续类型参数的实际类型。另外本文还说明为消除歧义而引入 ~ 符号,即用于指定类型的底层类型。

flag 包定义了一系列函数,可用于定义命令行参数,支持的参数类型如下:

  • string:flag.StringVar 函数
  • bool:flag.BoolVar 函数
  • time.Duration: flag.DurationVar 函数
  • int: flag.IntVar 函数
  • uint: flag.UintVar 函数
  • float64: flag.Float64Var 函数
  • int64: flag.Int64Var 函数
  • uint64: flag.Uint64Var 函数

在命令行工具的开发过程中,我们常常需要设置一个同时支持短名称和长名称的选项,如 -d 等价于 --debug-p 等价于 --password。在使用 Go flag 包的情况下,该需求的实现相当简单,只需要定义两个不同的 flag 指向同一个变量即可。

本文主要介绍如何基于 Docker 生成容器化应用以及配置 Nginx 来实现 Web 服务的负载均衡,包含以下内容: Go 简易 Web 程序(hello world) 通过 Dockerfile 生成镜像 Nginx 配置 Docker Compose 多容器启动 Go Web 程序 本次配置使用 Go Web 程序作为后端服务,其作用是接收请求并返回“hello-world”,代码如下: // main.go package main import ( "log" "net/http" "os" ) func main() { logFile, err := os.OpenFile("/var/log/app.log",...

原文:Error handling and Go

介绍

如果你写过 Go 的代码,就一定遇到过 Go 的内置类型 error。一个 error 类型的值可用于指明程序的某种不正常的状态,比如,当打开文件失败时,os.Open 函数会返回一个非 nil 的 error 值。