Skip to content

Instantly share code, notes, and snippets.

View dragonsinth's full-sized avatar

Scott Blum dragonsinth

  • FullStory
  • Atlanta, GA
View GitHub Profile
package concurrency
import (
"context"
"fmt"
"golang.org/x/sync/errgroup"
)
const (
doThingWorkers = 4
@dragonsinth
dragonsinth / gazelle-local-repositores.go
Created September 22, 2022 15:53
Generate local repository rules from a go.work file that uses on-disk replacements
///usr/bin/env true; exec /usr/bin/env go run "$0" "$@"
package main
import (
"fmt"
"log"
"os"
"os/exec"
"path/filepath"
go install github.com/fullstorydev/go/examples/chatterbox/...@latest
chatterbox server
chatterbox monitor # in another terminal
chatterbox client # in another terminal
type LogReplicatedModel struct {
mu sync.RWMutex
snapshot Model
stream eventstream.EventStream
}
func (m *LogReplicatedModel) ReadAndSubscribe() (Model, eventstream.Promise) {
m.mu.RLock()
defer m.mu.RUnlock()
return m.snapshot, m.stream.Subscribe()
for it := eventStream.Subscribe().Iterator(); true; {
v, err := it.Next(ctx)
if err == eventstream.ErrDone {
return nil
} else if err != nil {
return err
}
msg := v.(bwamp.Event)
// [Send msg to client]
}
promise := eventStream.Subscribe()
for {
select {
case <-ctx.Done():
return ctx.Err()
case <-promise.Ready():
v, nextPromise := promise.Next()
if v == nil {
return nil
}
type node struct {
value interface{} // the value of the event (nil until ready)
next *node // the next node in the stream (nil until ready)
ready chan struct{} // a channel whose closure marks readiness
}
@dragonsinth
dragonsinth / gcp-kube.go
Last active February 14, 2024 10:14
Connect to Google Kubernetes with GCP credentials and pure Golang
package main
import (
"context"
"encoding/base64"
"flag"
"fmt"
"log"
"google.golang.org/api/container/v1"
func GetFriends(ctx context.Context, user int64) (map[string]*User, error) {
// Produce
var friendIds []int64
for it := GetFriendIds(user); ; {
if id, err := it.Next(ctx); err != nil {
if err == io.EOF {
break
}
return nil, fmt.Errorf("GetFriendIds %d: %w", user, err)
} else {
func GetFriends(ctx context.Context, user int64) (map[string]*User, error) {
friendIds := make(chan int64)
// Produce
go func() {
defer close(friendIds)
for it := GetFriendIds(user); ; {
if id, err := it.Next(ctx); err != nil {
if err == io.EOF {
break