docs: add developer-workflow.org and language examples
Complete workflow guide for Perl, Python, Go, Ansible, Terraform, Podman. Includes working example files in examples/ directory.
This commit is contained in:
105
examples/go/main.go
Normal file
105
examples/go/main.go
Normal file
@@ -0,0 +1,105 @@
|
||||
// main.go — Demonstrates core Go features for Doom Emacs workflow.
|
||||
//
|
||||
// Navigate: C-M-a/e (function boundaries), SPC s i (imenu), gd (definition)
|
||||
// Format: SPC m f (goimports), Run: SPC m r, Test: SPC m t, Build: SPC m b
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
|
||||
// Task represents a work item with priority.
|
||||
type Task struct {
|
||||
Title string
|
||||
Priority int
|
||||
Done bool
|
||||
}
|
||||
|
||||
// Summary returns a human-readable one-line description.
|
||||
func (t *Task) Summary() string {
|
||||
status := "TODO"
|
||||
if t.Done {
|
||||
status = "DONE"
|
||||
}
|
||||
return fmt.Sprintf("[%s] %s (p%d)", status, t.Title, t.Priority)
|
||||
}
|
||||
|
||||
// MarkDone marks the task as completed.
|
||||
func (t *Task) MarkDone() {
|
||||
t.Done = true
|
||||
}
|
||||
|
||||
// filterByPriority returns undone tasks with priority >= minPriority.
|
||||
func filterByPriority(tasks []*Task, minPriority int) []*Task {
|
||||
var result []*Task
|
||||
for _, t := range tasks {
|
||||
if !t.Done && t.Priority >= minPriority {
|
||||
result = append(result, t)
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
// countWords demonstrates a goroutine + channel pattern.
|
||||
// It counts words in each input string concurrently.
|
||||
func countWords(inputs []string) map[string]int {
|
||||
type result struct {
|
||||
input string
|
||||
count int
|
||||
}
|
||||
|
||||
ch := make(chan result, len(inputs))
|
||||
var wg sync.WaitGroup
|
||||
|
||||
for _, s := range inputs {
|
||||
wg.Add(1)
|
||||
go func(text string) {
|
||||
defer wg.Done()
|
||||
// Simulate work
|
||||
time.Sleep(10 * time.Millisecond)
|
||||
ch <- result{input: text, count: len(strings.Fields(text))}
|
||||
}(s)
|
||||
}
|
||||
|
||||
// Close channel after all goroutines finish
|
||||
go func() {
|
||||
wg.Wait()
|
||||
close(ch)
|
||||
}()
|
||||
|
||||
counts := make(map[string]int)
|
||||
for r := range ch {
|
||||
counts[r.input] = r.count
|
||||
}
|
||||
return counts
|
||||
}
|
||||
|
||||
func main() {
|
||||
tasks := []*Task{
|
||||
{Title: "Write tests", Priority: 2},
|
||||
{Title: "Update docs", Priority: 1},
|
||||
{Title: "Deploy v2", Priority: 2},
|
||||
}
|
||||
|
||||
tasks[0].MarkDone()
|
||||
|
||||
fmt.Println("Open tasks (priority >= 2):")
|
||||
for _, t := range filterByPriority(tasks, 2) {
|
||||
fmt.Println(" ", t.Summary())
|
||||
}
|
||||
|
||||
// Goroutine demo
|
||||
sentences := []string{
|
||||
"Go is a compiled language",
|
||||
"Goroutines are lightweight threads",
|
||||
"Channels enable safe communication",
|
||||
}
|
||||
counts := countWords(sentences)
|
||||
fmt.Println("\nWord counts:")
|
||||
for s, c := range counts {
|
||||
fmt.Printf(" %q → %d words\n", s, c)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user