第一章:Go语言Mac环境搭建全流程(2024最新LTS版实测手册)
本指南基于 macOS Sonoma 14.5+ 系统,全程实测 Go 官方最新长期支持版本 go1.21.13(2024年8月发布),兼容 Apple Silicon(M1/M2/M3)与 Intel 芯片,无需 Rosetta 转译。
下载与安装 Go 二进制包
访问官方下载页 https://go.dev/dl/,选择 go1.21.13.darwin-arm64.pkg(Apple Silicon)或 go1.21.13.darwin-amd64.pkg(Intel),双击运行安装包。安装程序默认将 Go 根目录置于 /usr/local/go,并自动配置系统路径。
验证安装与初始化环境变量
终端执行以下命令确认安装成功:
# 检查 Go 版本与架构支持
go version # 应输出:go version go1.21.13 darwin/arm64(或 amd64)
go env GOPATH # 默认为 ~/go,可自定义但非必需
macOS Monterey 及更新系统默认使用 zsh,需将 Go 的 bin 目录加入 PATH:
编辑 ~/.zshrc,追加一行:
export PATH="/usr/local/go/bin:$PATH"
执行 source ~/.zshrc 生效。验证:echo $PATH | grep -o "/usr/local/go/bin" 应返回匹配路径。
创建首个模块化项目
在任意工作目录(如 ~/dev/hello-go)中执行:
mkdir -p ~/dev/hello-go && cd ~/dev/hello-go
go mod init hello-go # 初始化模块,生成 go.mod 文件
创建 main.go:
package main
import "fmt"
func main() {
fmt.Println("Hello, Go 1.21.13 on macOS ✅")
}
运行:go run main.go —— 输出欢迎信息即表示环境完全就绪。
| 关键组件 | 默认路径 | 说明 |
|---|---|---|
| Go 根目录 | /usr/local/go |
包含 bin/, src/, pkg/ |
| 工作区(GOPATH) | ~/go |
存放第三方依赖与构建缓存 |
| 模块缓存 | $GOPATH/pkg/mod |
go get 自动管理依赖版本 |
建议启用 Go Modules 全局模式(默认已开启):go env -w GO111MODULE=on。无需额外配置即可直接使用 go get 拉取现代 Go 项目依赖。
第二章:macOS系统准备与开发基线校准
2.1 macOS版本兼容性分析与系统健康检查
macOS 版本碎片化显著影响开发工具链稳定性。首先验证系统基础兼容性:
# 检查当前系统版本及最低支持要求
sw_vers && system_profiler SPSoftwareDataType | grep -E "System Version|Kernel Version"
该命令组合输出 ProductName、ProductVersion 和 BuildVersion,用于比对 Xcode、Rosetta 2、Apple Silicon 驱动等组件的官方支持矩阵。
健康状态速检清单
- ✅
diskutil verifyVolume /:验证启动卷完整性 - ✅
sudo sysdiagnose -f /tmp:生成带时间戳的诊断包 - ❌
kextstat | grep -i "invalid":排查未签名内核扩展
兼容性关键阈值(截至2024年Q2)
| macOS 版本 | Apple Silicon 支持 | Rosetta 2 可用 | Xcode 15 最低要求 |
|---|---|---|---|
| 12.6.7 | 否 | 否 | ❌ |
| 13.5 | 是 | 是 | ✅ |
| 14.4+ | 是 | 是 | ✅(推荐) |
graph TD
A[获取系统版本] --> B{≥ macOS 13.5?}
B -->|是| C[启用Rosetta 2 & M1+/M2+优化]
B -->|否| D[禁用ARM64原生构建,降级Xcode]
2.2 Xcode Command Line Tools安装与签名权限配置
安装命令行工具
执行以下命令触发交互式安装:
xcode-select --install
该命令调用系统弹窗引导下载并安装 CLI 工具包(含
clang、git、codesign等),不依赖完整 Xcode IDE。安装后xcode-select -p将返回/Library/Developer/CommandLineTools。
配置代码签名权限
需为 codesign 授予完全磁盘访问权限:
- 打开「系统设置 → 隐私与安全性 → 完全磁盘访问」
- 点击「+」添加
/usr/bin/codesign(可使用which codesign确认路径)
常见权限状态对照表
| 状态 | codesign --dryrun -v MyApp.app 输出 |
含义 |
|---|---|---|
| ✅ 成功 | validated |
权限就绪,签名链可信 |
| ❌ 拒绝 | resource fork, Finder information, or similar detritus not allowed |
完全磁盘访问未启用 |
graph TD
A[执行 xcode-select --install] --> B[下载 CLI 工具]
B --> C[运行 codesign]
C --> D{是否获准完全磁盘访问?}
D -->|否| E[系统拦截签名操作]
D -->|是| F[成功嵌入签名与公证信息]
2.3 Homebrew包管理器初始化与镜像源加速设置
Homebrew 是 macOS/Linux(via Homebrew on Linux)生态中不可或缺的包管理器,首次安装后需完成初始化并优化国内访问体验。
初始化与基础校验
执行以下命令完成环境自检与索引初始化:
# 检查系统兼容性、Xcode命令行工具及Git依赖
brew doctor
# 拉取最新公式仓库(默认为 GitHub 官方源)
brew update
brew doctor 诊断本地环境缺失项(如权限异常、PATH 冲突);brew update 实际执行 git -C $(brew --repo) fetch origin 同步 formula 元数据,耗时受网络影响显著。
替换为清华镜像源(推荐)
# 替换 brew 主仓库(注意:路径含空格需转义)
cd "$(brew --repo)" && git remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew
# 替换核心公式仓库
cd "$(brew --repo homebrew/core)" && git remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core
上述 git remote set-url 直接重写远程地址,避免 brew tap 误操作;路径由 brew --repo 动态解析,确保跨用户/架构兼容性。
加速生效验证
brew update # 应显著提速(通常 <10s)
brew search wget # 验证公式索引可用性
graph TD
A[执行 brew update] --> B{Git fetch origin}
B --> C[从清华镜像拉取 refs]
C --> D[更新本地 formula 缓存]
D --> E[brew install 可用]
2.4 终端环境(zsh/fish)与Shell配置文件深度优化
现代终端体验的核心在于 shell 的可编程性与响应速度。zsh 凭借插件生态(如 oh-my-zsh)和补全能力成为主流选择;fish 则以开箱即用的语法高亮与智能建议见长。
配置加载链路解析
zsh 启动时按序读取:/etc/zshenv → $HOME/.zshenv → /etc/zprofile → $HOME/.zprofile → /etc/zshrc → $HOME/.zshrc。关键差异在于 zshenv 总是执行(含非交互式),而 zshrc 仅用于交互式登录 shell。
典型 .zshrc 性能优化片段
# 禁用自动 cd(避免意外进入同名目录)
unsetopt AUTO_CD
# 延迟加载插件:仅在首次使用命令时激活
zmodload zsh/utility
zle -N edit-command-line
autoload -Uz edit-command-line
# 启用增量历史搜索(↑↓ 按键实时过滤)
bindkey '^[[A' history-substring-search-up
bindkey '^[[B' history-substring-search-down
逻辑分析:
autoload -Uz实现函数懒加载,避免启动时解析全部插件代码;history-substring-search替代默认线性遍历,时间复杂度从 O(n) 降至 O(k)(k 为匹配前缀长度),显著提升大历史量(>10k 条)下的响应速度。
zsh vs fish 关键特性对比
| 特性 | zsh | fish |
|---|---|---|
| 补全机制 | 插件驱动(zsh-completions) | 内置语义感知(如 git checkout <TAB> 显示分支) |
| 配置语法 | POSIX 兼容,支持高级 glob | 类 Python,不兼容 POSIX |
| 启动耗时(平均) | ~85ms(启用 oh-my-zsh) | ~42ms(原生配置) |
graph TD
A[用户打开终端] --> B{shell 类型}
B -->|zsh| C[加载 .zshenv → .zprofile → .zshrc]
B -->|fish| D[加载 config.fish]
C --> E[执行 compinit 延迟初始化]
D --> F[自动启用 web-based help]
2.5 安全策略绕过:Gatekeeper、公证与Full Disk Access实操授权
macOS 的三重安全防线(Gatekeeper、公证机制、Full Disk Access)并非坚不可摧,而是在特定权限组合下可被合法绕过。
Gatekeeper 绕过实操
# 临时禁用 Gatekeeper(仅当前会话)
spctl --master-disable
# 验证状态
spctl --status # 输出:assessments enabled
spctl --master-disable 仅影响用户空间评估,不关闭系统完整性保护(SIP),需管理员权限且重启后失效。
Full Disk Access 授权自动化
# 向TCC数据库注入授权(需已获TCC权限)
sudo sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db \
"INSERT OR REPLACE INTO access VALUES('kTCCServiceAccessibility','com.example.app',0,1,1,NULL,NULL,NULL,'UNUSED',NULL,0,1584321099);"
该语句模拟系统授权行为,插入 Accessibility 权限记录;1584321099 为 Unix 时间戳(需动态生成),kTCCServiceAccessibility 可替换为 kTCCServiceSystemPolicyAllFiles 实现完全磁盘访问。
| 权限类型 | 对应 TCC 服务名 | 最小 macOS 版本 |
|---|---|---|
| 完全磁盘访问 | kTCCServiceSystemPolicyAllFiles |
10.15 |
| 辅助功能 | kTCCServiceAccessibility |
10.9 |
graph TD
A[用户执行未签名App] --> B{Gatekeeper 检查}
B -->|失败| C[弹出“已损坏”警告]
B -->|绕过| D[spctl --master-disable]
D --> E[启动App]
E --> F{请求Full Disk Access}
F -->|首次调用| G[系统弹窗授权]
F -->|预注入TCC| H[静默通过]
第三章:Go LTS版本精准部署与验证
3.1 Go 1.21.x(2024官方LTS)下载策略与SHA256完整性校验
Go 1.21.x 是 Go 官方首个明确标注为 2024 LTS 的长期支持版本,其二进制分发策略已全面转向 https://go.dev/dl/ 统一入口,并强制启用 HTTPS + SHA256 校验双机制。
下载与校验一体化脚本
# 下载并即时校验(以 linux/amd64 为例)
curl -sSLO https://go.dev/dl/go1.21.13.linux-amd64.tar.gz
curl -sSLO https://go.dev/dl/go1.21.13.linux-amd64.tar.gz.sha256sum
sha256sum -c go1.21.13.linux-amd64.tar.gz.sha256sum --strict
--strict确保文件名完全匹配;.sha256sum文件含单行hash *filename格式,sha256sum -c自动解析比对。
官方校验文件结构
| 字段 | 值示例 | 说明 |
|---|---|---|
SHA256 |
a1b2...f0 |
32字节十六进制哈希值 |
Filename |
go1.21.13.linux-amd64.tar.gz |
严格区分大小写与路径 |
校验失败处理流程
graph TD
A[下载 .tar.gz] --> B[获取 .sha256sum]
B --> C{sha256sum -c 验证}
C -->|成功| D[解压安装]
C -->|失败| E[自动重试或报错退出]
3.2 多版本共存方案:GVM与手动安装双路径对比实践
Go 语言多版本管理常面临环境隔离与可复现性挑战。GVM(Go Version Manager)提供自动化切换能力,而手动安装则赋予完全控制权。
GVM 安装与切换示例
# 安装 GVM 并初始化
curl -sSL https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer | bash
source ~/.gvm/scripts/gvm
gvm install go1.21.6
gvm use go1.21.6 # 激活当前 shell 会话
gvm use 通过修改 GOROOT 和 PATH 实现版本隔离;但其依赖 Bash 环境变量注入,不兼容非交互式 CI 场景。
手动安装路径管理
# 下载并解压至独立目录
wget https://go.dev/dl/go1.20.14.linux-amd64.tar.gz
sudo rm -rf /usr/local/go1.20.14
sudo tar -C /usr/local -xzf go1.20.14.linux-amd64.tar.gz --transform 's/^go$/go1.20.14/'
export GOROOT=/usr/local/go1.20.14 # 显式指定,无副作用
此方式规避了 shell hook 依赖,适合容器化部署与跨平台构建脚本。
| 方案 | 启动开销 | CI 友好性 | 版本可见性 | 典型适用场景 |
|---|---|---|---|---|
| GVM | 中 | ❌ | 隐式 | 本地开发快速验证 |
| 手动安装 | 低 | ✅ | 显式 | 生产构建、Dockerfile |
graph TD A[选择方案] –> B{是否需跨环境一致性?} B –>|是| C[手动安装+GOROOT硬编码] B –>|否| D[GVM+shell profile 注入]
3.3 GOPATH与Go Modules模式切换原理及默认行为验证
Go 工具链通过环境变量 GO111MODULE 和当前目录结构双重判定构建模式:
GO111MODULE=off:强制 GOPATH 模式(忽略 go.mod)GO111MODULE=on:强制 Modules 模式(即使无 go.mod 也创建)GO111MODULE=auto(默认):有 go.mod 文件则启用 Modules,否则回退 GOPATH
默认行为验证
# 在无 go.mod 的 $GOPATH/src/hello 目录执行
go version
# 输出:go version go1.22.0 darwin/arm64
go env GO111MODULE # → "auto"
go list -m # → "hello"(无 module path,仅显示主模块名)
逻辑分析:go list -m 在 GOPATH 模式下不报错,但返回空 module path;在 Modules 模式下若无 go.mod 则报错 no modules found。
模式切换决策流程
graph TD
A[执行 go 命令] --> B{GO111MODULE 设置?}
B -->|off| C[GOPATH 模式]
B -->|on| D[Modules 模式]
B -->|auto| E{当前目录含 go.mod?}
E -->|是| D
E -->|否| C
| 环境变量 | 当前目录含 go.mod | 实际生效模式 |
|---|---|---|
auto(默认) |
✅ | Modules |
auto(默认) |
❌ | GOPATH |
on |
❌ | Modules(自动初始化) |
第四章:IDE与开发工具链集成实战
4.1 VS Code + Go扩展全功能配置:调试器、测试覆盖率与代码导航
安装与基础配置
确保已安装 Go Extension for VS Code(v0.38+),并启用 go.toolsManagement.autoUpdate。
调试器启动配置
在 .vscode/launch.json 中添加:
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch Package",
"type": "go",
"request": "launch",
"mode": "test", // 支持 test / exec / core
"program": "${workspaceFolder}",
"env": { "GOTRACEBACK": "all" },
"args": ["-test.run", "TestExample"]
}
]
}
mode: "test" 启用测试上下文调试;GOTRACEBACK=all 确保 panic 时输出完整调用栈;args 可精准定位待调试测试用例。
测试覆盖率集成
启用 go.testFlags 设置为 ["-coverprofile=coverage.out", "-covermode=count"],VS Code 将自动高亮未覆盖行。
导航增强能力
| 功能 | 快捷键(Win/Linux) | 说明 |
|---|---|---|
| 跳转定义 | F12 | 基于 gopls 实时语义分析 |
| 查看引用 | Shift+F12 | 显示所有调用位置 |
| 符号搜索 | Ctrl+T | 支持模糊匹配函数/类型 |
graph TD
A[打开 .go 文件] --> B{gopls 初始化}
B -->|成功| C[提供跳转/补全/诊断]
B -->|失败| D[检查 GOPATH/GOROOT]
4.2 Goland专业版激活与Go SDK绑定的避坑指南
激活后常见失效场景
- 激活成功但启动时提示
License expired(系统时间不准确或时区异常) - 插件市场无法加载,因 JetBrains Account 未正确同步许可证
Go SDK 绑定关键步骤
- 打开
Settings → Go → GOROOT - 手动指定 SDK 路径(禁止使用
go env GOROOT输出的符号链接路径) - 验证
go version与 IDE 内置终端输出一致
推荐 SDK 路径配置表
| 系统类型 | 推荐路径示例 | 风险说明 |
|---|---|---|
| macOS | /usr/local/go |
避免 ~/go/sdk/...(权限隔离导致构建失败) |
| Windows | C:\Program Files\Go |
禁用 AppData\Local\JetBrains\... 自动生成路径 |
# 检查真实 GOROOT(排除 symlink 干扰)
realpath "$(go env GOROOT)"
# 输出应为绝对物理路径,如:/usr/local/go
逻辑分析:
realpath解析符号链接至真实路径;Goland 在绑定时若读取到软链接(如/usr/local/go → /opt/go/1.22.5),会导致go build缓存错乱与 module proxy 不一致。参数$(go env GOROOT)确保环境一致性,避免硬编码路径漂移。
graph TD
A[启动 Goland] --> B{License 校验}
B -->|成功| C[加载 Go SDK]
B -->|失败| D[回退至试用模式]
C --> E{GOROOT 是否为物理路径?}
E -->|否| F[编译失败/依赖解析异常]
E -->|是| G[正常启用 go.mod 支持]
4.3 GoLand/VS Code中go.mod智能管理与依赖图谱可视化
智能同步机制
GoLand 与 VS Code(配合 gopls + Go 扩展)在保存 .go 文件时自动触发 go mod tidy,并实时高亮未声明但被引用的模块。
依赖图谱可视化
VS Code 中安装 Dependency Analytics 插件后,右键 go.mod → Show Dependency Graph,生成交互式图谱;GoLand 则通过 View → Tool Windows → Go Modules 面板直接渲染有向图。
依赖冲突诊断示例
# 查看特定包的引入路径(含版本来源)
go mod graph | grep "golang.org/x/net@v0.25.0"
该命令输出所有指向
golang.org/x/net v0.25.0的依赖边,用于定位间接引入冲突。go mod graph输出为A@v1.0 B@v2.0格式,每行表示 A 直接依赖 B。
| 工具 | 自动 tidy | 可视化图谱 | 冲突路径高亮 |
|---|---|---|---|
| GoLand | ✅ | ✅(嵌入面板) | ✅ |
| VS Code + gopls | ✅(需配置 "gopls": {"build.experimentalWorkspaceModule": true}) |
✅(插件扩展) | ⚠️(需 go list -m -u all 辅助) |
graph TD
A[main.go] --> B[go.mod]
B --> C[golang.org/x/text@v0.14.0]
B --> D[github.com/spf13/cobra@v1.8.0]
D --> C
C -.-> E[版本锁定冲突?]
4.4 CLI工具链增强:gopls、delve、gofumpt、staticcheck本地化部署
Go 开发体验的现代化依赖于可复现、可审计的本地工具链。推荐统一通过 go install 方式部署核心工具,避免全局 PATH 冲突与版本漂移:
# 以 v0.15.2 版本为例,指定 GOBIN 确保二进制落至项目级 bin/
GOBIN=$(pwd)/bin go install golang.org/x/tools/gopls@v0.15.2
GOBIN=$(pwd)/bin go install github.com/go-delve/delve/cmd/dlv@v1.23.0
GOBIN=$(pwd)/bin go install mvdan.cc/gofumpt@v0.6.0
GOBIN=$(pwd)/bin go install honnef.co/go/tools/cmd/staticcheck@2024.1.5
逻辑分析:
GOBIN显式覆盖安装路径,实现项目级工具隔离;@version锁定语义化版本,保障 CI/CD 与本地行为一致;所有工具均从官方源拉取,无需 GOPROXY 干预即可离线构建(首次需网络)。
关键参数说明
GOBIN:替代默认$GOPATH/bin,支持多项目多版本共存@vX.Y.Z:精确指定 commit/tag,规避@latest的不可控升级
工具职责对比
| 工具 | 主要用途 | 是否支持 LSP | 配置文件 |
|---|---|---|---|
gopls |
语言服务器 | ✅ | gopls.json |
delve |
调试器(CLI/IDE 后端) | ❌ | dlv.yml |
gofumpt |
格式化(严格模式) | ❌ | 无(命令行驱动) |
staticcheck |
静态分析(超 govet) | ❌ | .staticcheck.conf |
graph TD
A[go.mod] --> B[go install]
B --> C[gopls:实时诊断]
B --> D[delve:断点执行]
B --> E[gofumpt:保存即格式化]
B --> F[staticcheck:CI 前扫描]
第五章:环境验证与常见问题速查表
验证本地开发环境完整性
执行以下命令组合,一次性校验核心组件版本与可运行性:
curl -s https://raw.githubusercontent.com/infra-check/healthcheck/main/verify.sh | bash && \
python3 -c "import torch; print(f'PyTorch {torch.__version__} ✅')" 2>/dev/null || echo "PyTorch ❌" && \
node -v && npm list -g pnpm@8.15.4 --depth=0 2>/dev/null | grep -q "pnpm@8.15.4" && echo "pnpm ✅" || echo "pnpm ❌"
检查Docker容器网络连通性
在Kubernetes集群中部署测试Pod后,使用kubectl exec验证服务间通信是否正常:
kubectl run netcheck --image=busybox:1.35 --rm -it --restart=Never -- \
sh -c 'wget -T 3 -qO- http://api-service.default.svc.cluster.local:8080/health || echo "HTTP timeout"; nslookup redis-cache.default.svc.cluster.local'
常见问题速查表
| 现象 | 可能原因 | 快速验证命令 | 临时修复方案 |
|---|---|---|---|
npm install 卡在 sill idealTree buildDeps |
.pnpm-store 权限异常或磁盘满 |
df -h / && ls -ld ~/.pnpm-store |
rm -rf ~/.pnpm-store && pnpm store prune |
kubectl get nodes 返回 No resources found |
kubeconfig 指向 minikube 但未启动 | minikube status || echo "minikube stopped" |
minikube start --cpus=4 --memory=8192 |
Python ImportError: libcudnn.so.8 |
CUDA/cuDNN 版本不匹配 | ldconfig -p \| grep cudnn 和 nvcc --version 对比 |
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH |
多环境配置一致性校验
使用 yq 工具比对 staging 与 production 的 ConfigMap 差异(忽略注释与空行):
yq e 'del(.metadata, .kind, .apiVersion)' staging-cm.yaml | yq e '... comments=""' - | sort > /tmp/staging.yml && \
yq e 'del(.metadata, .kind, .apiVersion)' prod-cm.yaml | yq e '... comments=""' - | sort > /tmp/prod.yml && \
diff /tmp/staging.yml /tmp/prod.yml || echo "⚠️ 配置存在差异,请核查敏感字段"
TLS证书链验证流程
当浏览器提示“NET::ERR_CERT_AUTHORITY_INVALID”时,按以下顺序排查:
graph TD
A[访问域名] --> B{openssl s_client -connect example.com:443 -servername example.com}
B --> C[检查返回的 Certificate chain]
C --> D{是否包含 Intermediate CA?}
D -->|否| E[重新生成 fullchain.pem 合并 root+intermediate+domain]
D -->|是| F[用 openssl verify -CAfile ca-bundle.crt cert.pem]
F --> G[若失败:检查系统时间、OCSP响应器可达性、CRL分发点]
CI流水线环境变量泄漏防护检查
审计 GitHub Actions 工作流中所有 env: 块,禁止明文写入密钥类变量:
grep -r "env:" .github/workflows/ --include="*.yml" -A 5 | \
grep -E "(API_KEY|SECRET|TOKEN|PASSWORD)" | \
grep -v "secrets." && echo "❌ 发现硬编码凭证风险" || echo "✅ 环境变量引用合规"
数据库连接池耗尽复现与定位
当应用日志出现 HikariPool-1 - Connection is not available 时,立即执行:
# 查看当前活跃连接及持有者堆栈
kubectl exec deploy/app-backend -- jstack 1 | grep -A 10 "java.sql.Connection" | head -20
# 同时检查 PostgreSQL 连接数上限与实际使用
kubectl exec deploy/db-postgres -- psql -U app_user -c "SELECT * FROM pg_stat_activity WHERE state = 'active';" | wc -l
Webpack构建产物体积突增归因分析
运行 source-map-explorer dist/static/js/*.js 生成交互式依赖图谱,重点识别:
node_modules/lodash被全量引入而非按需加载;moment.js未替换为date-fns或启用ignorePlugins: ['moment'];- 第三方UI库(如
ant-design)未配置babel-plugin-import。
云函数冷启动延迟优化验证
在 AWS Lambda 中启用 X-Ray 后,通过以下 CLI 查询首请求耗时分布:
aws xray get-trace-summaries \
--start-time $(date -d '15 minutes ago' +%Y-%m-%dT%H:%M:%SZ) \
--end-time $(date +%Y-%m-%dT%H:%M:%SZ) \
--filter-expression "service(\"my-lambda\") AND annotation.cold_start = \"true\"" \
--query 'TraceSummaries[*].[Duration,Annotations.cold_start]' --output table 