如何为Goreleaser中的每个目标设置“-ldflags”值?

如何为Goreleaser中的每个目标设置“-ldflags”值?,go,goreleaser,Go,Goreleaser,我需要为每个构建目标设置Os/Arch变量。我最初的想法是有一个脚本来计算这些变量,并使用钩子在每个目标上运行这个脚本 .goreleaser.yaml: builds: hooks: pre: - sh variables.sh ldflags: - -s -w -X "main.goversion={{.Env.GOVERSION}}" - -s -w -X "main.commit={{.Env.GITCOMMIT}

我需要为每个构建目标设置Os/Arch变量。我最初的想法是有一个脚本来计算这些变量,并使用钩子在每个目标上运行这个脚本

.goreleaser.yaml

builds:
  hooks:
    pre:
      - sh variables.sh
  ldflags:
    - -s -w -X "main.goversion={{.Env.GOVERSION}}"
    - -s -w -X "main.commit={{.Env.GITCOMMIT}}"
    - -s -w -X "main.os={{.Env.GOOS}}"
    - -s -w -X "main.arch={{.Env.GOARCH}}"
    - -s -w -X "main.commit={{.Env.GITCOMMIT}}"
    - -s -w -X "main.date={{.Env.BUILDTIME}}"

variables.sh

#!/bin/bash

export GITCOMMIT=${GITCOMMIT:-$(git rev-parse --short HEAD 2> /dev/null || true)}
export BUILDTIME=${BUILDTIME:-$(date -u +"%Y-%m-%dT%H:%M:%SZ")}
export GOOS="${GOOS:-$(go env GOHOSTOS)}"
export GOARCH="${GOARCH:-$(go env GOHOSTARCH)}"
export GOVERSION=$(go version | awk '{print $3;}')
但由于变量未在配置中的任何位置定义,因此它似乎无法识别它们,抛出:

release failed after 0.45s error=template: tmpl:1:31: executing "tmpl" at <.Env.GOVERSION>: map has no entry for key "GOVERSION"
0.45s后发布失败错误=模板:tmpl:1:31:在:map执行“tmpl”时没有键“GOVERSION”的条目
这是有道理的。但现在我关心的是如何为每个目标设置特定于目标的变量