Skip to content

Instantly share code, notes, and snippets.

@zombiezen
zombiezen / contacts_with_numbers.go
Last active February 22, 2018 18:59
A simple Go library with a structure including a name and a number.
package contacts
type Person struct {
FirstName string
LastName string
FavoriteNumber int
}
func Me() *Person {
return &Person{
@zombiezen
zombiezen / app.go
Created February 22, 2018 18:52
An example application that uses a contacts library with a brittle test.
package app
import "contacts"
func GreatSpeaker() *Person {
return contacts.Me()
}
func TestMyName(t *testing.T) {
got := GreatSpeaker()
@zombiezen
zombiezen / contacts.go
Last active February 22, 2018 18:54
A simple Go library with a name structure.
package contacts
type Person struct {
FirstName string
LastName string
}
func Me() *Person {
return &Person{
FirstName: "Ross",
use std::convert::AsRef;
use std::ffi::OsStr;
#[derive(Clone, Debug)]
#[must_use = "join_args is lazy and does nothing unless consumed"]
pub struct JoinArgs<A, B> {
a: A,
b: B,
state: JoinState,
}
@zombiezen
zombiezen / ideal_ioctx.go
Last active January 3, 2018 17:03
Snippet of RPC receive written with contexts
type Conn struct {
wc io.WriteCloser
cancel context.CancelFunc
tasks sync.WaitGroup
// ... other internal state ...
}
func NewConn(rwc io.ReadWriteCloser) *Conn {
ctx, cancel := context.WithCancel(context.Background())
c := &Conn{
@zombiezen
zombiezen / readctx.go
Last active November 30, 2020 06:01
Reading while respecting Context.Done
// ctxReader adds timeouts and cancellation to a reader.
type ctxReader struct {
r io.Reader
ctx context.Context // set to change Context
// internal state
result chan readResult
pos, n int
err error
buf [1024]byte
@zombiezen
zombiezen / writectx.go
Last active January 8, 2018 23:39
Writing while respecting Context.Done
// writeCtx writes bytes to a writer while making a best effort to
// respect the Done signal of the Context. However, once any bytes have
// been written to w, writeCtx will ignore the Done signal to avoid
// partial writes.
func writeCtx(ctx context.Context, w io.Writer, b []byte) (int, error) {
select {
case <-ctx.Done():
// Early cancel.
return 0, ctx.Err()
default:
@zombiezen
zombiezen / justclose.go
Created December 31, 2017 18:34
Closing simple RPC connection in Experience Report
type Conn struct {
wc io.WriteCloser
tasks sync.WaitGroup
// ... other internal state ...
}
func NewConn(rwc io.ReadWriteCloser) *Conn {
c := &Conn{wc: rwc}
c.tasks.Add(1)
go func() {
@zombiezen
zombiezen / simplerpc.go
Last active January 2, 2018 18:32
Simple RPC skeleton for experience report
type Conn struct {
wc io.WriteCloser
// ... other internal state ...
}
func NewConn(rwc io.ReadWriteCloser) *Conn {
c := &Conn{wc: rwc}
go c.receive(rwc)
return c
}
@zombiezen
zombiezen / unconvert-std.txt
Created July 15, 2017 20:52
unconvert results on stdlib
/Users/light/go/src/archive/tar/format.go:131:26: unnecessary conversion
/Users/light/go/src/archive/tar/strconv.go:198:34: unnecessary conversion
/Users/light/go/src/archive/tar/strconv.go:200:30: unnecessary conversion
/Users/light/go/src/archive/zip/reader.go:303:18: unnecessary conversion
/Users/light/go/src/debug/dwarf/entry.go:419:15: unnecessary conversion
/Users/light/go/src/math/big/prime.go:253:14: unnecessary conversion
/Users/light/go/src/net/http/fs.go:292:17: unnecessary conversion
/Users/light/go/src/net/http/h2_bundle.go:6966:37: unnecessary conversion
/Users/light/go/src/net/writev_unix.go:81:23: unnecessary conversion
/Users/light/go/src/os/stat_darwin.go:45:24: unnecessary conversion