SEO/Metadata (JSONLD)
// services/postservice/post.go
package postservice
import (
"time"
"golazy.dev/lazyseo"
"golazy.dev/lazyseo/jsonld"
)
type Post struct {
Slug string
TitleValue string
Summary string
ImageURL string
PublishedAt time.Time
UpdatedAt time.Time
}
func (p Post) Title() string { return p.TitleValue }
func (p Post) Description() string { return p.Summary }
func (p Post) Canonical() string { return "https://example.com/posts/" + p.Slug }
func (p Post) Image() string { return p.ImageURL }
func (p Post) Kind() lazyseo.PageKind { return lazyseo.Article }
func (p Post) PublishedTime() time.Time { return p.PublishedAt }
func (p Post) LastUpdated() time.Time { return p.UpdatedAt }
func (p Post) JSONLD() any {
article := jsonld.NewArticle(p.TitleValue)
article.Description = p.Summary
article.URL = p.Canonical()
article.Image = p.ImageURL
article.DatePublished = jsonld.Date(p.PublishedAt)
article.DateModified = jsonld.Date(p.UpdatedAt)
return article
}
// app/controllers/post_controller/postcontroller.go
package postcontroller
import "sample_app/services/postservice"
func (c *PostsController) Show(post postservice.Post) error {
c.Metadata(post)
c.Set("post", post)
return nil
}