Controllers/LazyLoading

// app/controllers/post_controller/postcontroller.go
package postcontroller

import "context"

func (c *PostsController) Show(post *Post) error {
	c.Set("post", post)

	// SetLater starts loading immediately; use it where older notes say SetEventually.
	c.SetLater("related_posts", func(ctx context.Context) ([]Post, error) {
		return c.posts.Related(ctx, post.ID)
	})

	// SetWhenNeeded waits until the template first reads the value.
	c.SetWhenNeeded("comment_count", func(ctx context.Context) (int, error) {
		return c.posts.CommentCount(ctx, post.ID)
	})

	return nil
}