Каждая инструкция в Dockerfile создает слой. Слои кешируются по хешу контекста; при изменении инструкции или файлов выше по контексту все последующие слои пересобираются. Поэтому копирование go.mod и go.sum и go mod download до COPY кода - частый паттерн: зависимости кешируются отдельно от кода. В Go multi-stage: слой с go build пересобирается при изменении кода, базовый образ и зависимости - из кеша.
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN go build -o app .