gointerop

package
v0.6.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 16, 2026 License: MPL-2.0 Imports: 6 Imported by: 0

README

Go Imports

This example shows the supported .gwdk to Go import slice: a page imports a Go package by module path and calls a no-argument build-time function from build {}.

What works today:

  • .gwdk page files can declare a top-level aliased import: import interop "github.com/cssbruno/gowdk/examples/go-interop".
  • The .gwdk package declaration still matches the sibling Go package: package gointerop.
  • build {} can call one no-argument imported Go function: => interop.FeaturedCopyForBuild().
  • Build-time Go calls can also use a bare same-package helper when the page directory is a buildable Go package.
  • Build helpers can return T or (T, error).
  • The returned value must JSON-encode to an object. Scalar fields become string interpolation data for view {}.
  • Successful stderr logging from the helper is kept separate from the JSON payload.
  • Literal build {} and paths {} records still work in other examples.

What does not work yet:

  • Arbitrary Go statements inside build {} are not supported.
  • Passing route params into Go build functions is not supported yet.
  • Generated per-route param structs and typed load/action result accessors are deferred.

catalog.go is the imported application code. The .gwdk page uses the import as its main data path, with no literal fallback.

go run ./cmd/gowdk build --out /tmp/gowdk-go-interop examples/go-interop/imported-build.page.gwdk
test -f /tmp/gowdk-go-interop/go-imported/index.html

Run the command from the repository root so the required root gowdk.config.go is loaded, or pass an explicit --config <file>.

Real-world slice: validation + structured logging

newsletter.go shows a page delegating serious behavior to standard-library packages instead of inline or generated logic. SubscriberDigestForBuild:

  • parses and validates a raw subscriber list with net/mail (mail.ParseAddress), so malformed entries are rejected by a real parser;
  • emits log/slog structured build logs to stderr, which GOWDK keeps separate from the JSON build payload; and
  • returns a digest (validCount, rejectedCount, sampleDomains) that the page interpolates — including integer fields, which render as strings.

What is real: the net/mail validation, the log/slog logging, and the stderr/JSON separation are genuine.

What is mocked: rawSubscribers is a hardcoded slice standing in for a real data source (a database/sql/pgx query, a CRM export, or a drained queue). Swap it for your data layer and the .gwdk build contract is unchanged.

What is omitted, on purpose: this example uses only the standard library so it adds no production dependency. Demonstrating database/sql, pgx, sqlc, markdown, email-sending, image, or queue packages follows the same import + build {} pattern, but adding those would need a real dependency reviewed under dependency-policy.md. The root module deliberately keeps its direct-dependency surface tiny.

go run ./cmd/gowdk check examples/go-interop/newsletter-digest.page.gwdk
go run ./cmd/gowdk build --out /tmp/gowdk-newsletter examples/go-interop/newsletter-digest.page.gwdk
grep -F 'Valid subscribers: 3' /tmp/gowdk-newsletter/go-newsletter/index.html

gowdk check over examples/go-interop/*.gwdk runs in CI (scripts/check-example-reports.sh), so this page is validated on every build and cannot silently rot.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type FeaturedCopy

type FeaturedCopy struct {
	Title   string `json:"title"`
	Tagline string `json:"tagline"`
}

func FeaturedCopyForBuild

func FeaturedCopyForBuild() FeaturedCopy

func FeaturedCopyWithErrorForBuild added in v0.5.0

func FeaturedCopyWithErrorForBuild() (FeaturedCopy, error)

func FeaturedCopyWithStderrForBuild added in v0.5.0

func FeaturedCopyWithStderrForBuild() FeaturedCopy

type SubscriberDigest added in v0.6.0

type SubscriberDigest struct {
	Title         string `json:"title"`
	Tagline       string `json:"tagline"`
	ValidCount    int    `json:"validCount"`
	RejectedCount int    `json:"rejectedCount"`
	SampleDomains string `json:"sampleDomains"`
}

SubscriberDigest is build-time data produced by delegating real work to the standard library: addresses are parsed and validated with net/mail and the build emits structured logs through log/slog. It demonstrates a .gwdk page handing serious behavior to a normal Go package instead of inline or generated business logic.

func SubscriberDigestForBuild added in v0.6.0

func SubscriberDigestForBuild() SubscriberDigest

SubscriberDigestForBuild validates rawSubscribers with net/mail, logs the outcome with log/slog (to stderr, which GOWDK keeps separate from the JSON build payload), and returns the digest rendered by the page.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL