Langsung ke konten

Go ​

Aplikasi minimal ​

go
package main

import (
	"fmt"
	"log"
	"net/http"
	"os"
)

func main() {
	port := os.Getenv("PORT")
	if port == "" {
		port = "8080"
	}
	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		fmt.Fprintln(w, "Hello from Go")
	})
	log.Printf("listening on %s", port)
	log.Fatal(http.ListenAndServe(":"+port, nil))
}

":"+port mendengarkan di semua interface. r.Run() milik Gin, e.Start(":"+port) milik Echo, dan app.Listen(":"+port) milik Fiber bekerja dengan cara yang sama.

Apa yang dideteksi Zenavo ​

Repositori dengan go.mod dibangun dengan zbpack sebagai Go. Versi Go diambil dari baris go di go.mod. Build menjalankan go mod download dan go build dengan CGO_ENABLED=0, dan binernya berjalan di image Alpine yang kecil.

zbpack membangun package di direktori root. Bila main berada di tempat lain, seperti cmd/server, atur entry di Settings → Build → zbpack options:

sh
ZBPACK_GO_ENTRY=./cmd/server

Untuk monorepo, atur Root Directory layanan ke folder yang berisi go.mod.

Deploy ​

  1. Add Service → GitHub, pilih repositori dan branch.
  2. Klik Next, pastikan pratinjau menampilkan go dengan versi Go Anda, lalu klik Deploy.
  3. Buat domain di tab Networking.

Hubungkan database ​

Tambahkan PostgreSQL ke proyek dan atur di layanan Go:

sh
DATABASE_URL=${POSTGRESQL_CONNECTION_STRING}

pgx, database/sql dengan lib/pq, GORM, dan sqlc semuanya menerima URL ini.

Dockerfile Anda sendiri ​

Dockerfile di direktori root dipakai sebagai pengganti zbpack, misalnya untuk menyertakan file di samping biner atau untuk build dengan cgo:

dockerfile
FROM golang:1.26-alpine AS build
WORKDIR /src
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -o /server ./cmd/server

FROM gcr.io/distroless/static-debian12
COPY --from=build /server /server
EXPOSE 8080
ENTRYPOINT ["/server"]

Port layanan berasal dari EXPOSE.

Masalah umum ​

GejalaPenyebab
Deployment tidak pernah sehatServer mendengarkan di localhost:8080 atau mengabaikan PORT. Dengarkan di ":"+os.Getenv("PORT").
no Go files in /srcmain tidak ada di direktori root. Atur ZBPACK_GO_ENTRY atau direktori root.
Biner tidak menemukan template atau file statiszbpack hanya menyalin biner ke image. Sematkan dengan //go:embed, atau gunakan Dockerfile.
x509: certificate signed by unknown authority dari image distroless atau scratchImage tidak punya sertifikat CA. Gunakan distroless/static, yang menyertakannya, atau salin /etc/ssl/certs.

Tidak berafiliasi dengan Zeabur.