The Curious Engineer

All blogs / Go

Dave Cheney

dave.cheney.net

The acme of foolishness

GoPerformance / optimizationEssays / personalEngineering blogs

Posts
270 from 5 Oct 2010 to 18 Dec 2025
Posting
now and then (2 in the last year)
Kind
personal blog
Feed
https://dave.cheney.net/feed

2025 2

  1. Pop quiz: what time was it?
  2. Pointer pop quiz

2024 1

  1. Microblog: TestMain can cause one to question reality

2021 1

  1. A few bytes here, a few there, pretty soon you’re talking real memory

2020 10

  1. The story of the one line fix
  2. How to dump the GOSSAFUNC graph for a method
  3. Diamond interface composition in Go 1.14
  4. Fatih’s question
  5. Ensmallening Go binaries by prohibiting comparisons
  6. Mid-stack inlining in Go
  7. Inlining optimisations in Go
  8. go test -v streaming output
  9. Are large slices more expensive than smaller ones?
  10. The Zen of Go

2019 21

  1. Dynamically scoped variables in Go
  2. Internets of Interest #15: The Queen of the Skies
  3. Complementary engineering indicators
  4. Internets of interest #14: UNIX v0
  5. Internets of interest: Warner Losh on the first ten years of UNIX
  6. Use internal packages to reduce your public API surface
  7. Be wary of functions which take several parameters of the same type
  8. Don’t force allocations on the callers of your API
  9. Go compiler intrinsics
  10. Clear is better than clever
  11. Sydney High Performance Go workshop
  12. Constant Time
  13. The three Rs of remote work
  14. Why bother writing tests at all?
  15. Prefer table driven tests
  16. Absolute Unit (test)
  17. Internets of Interest #12: Testing Michael Feathers’ Patience
  18. Talk, then code
  19. You shouldn’t name your variables after their types for the same reason you wouldn’t name your pets “dog” or “cat”
  20. Eliminate error handling by eliminating errors
  21. Avoid package names like base, util, or common

2018 21

  1. Internets of Interest #11: Yesterday’s Computer of Tomorrow: The Xerox Alto
  2. The office coffee model of concurrent garbage collection
  3. Internets of Interest #10: Mike Harrison on the Eidophor
  4. Internets of Interest #9: Jason Scott on the Copyright Fury Road
  5. Internets of Interest #8: Todd Fernandez on the manufacturing of modern semiconductors
  6. Internets of Interest #7: Ian Cooper on Test Driven Development
  7. Internets of Interest #6: Dave Cutler on Dave Cutler
  8. Internets of Interest #5: Kate Gregory on Simplicity
  9. Internets of Interest #4: Niall Murphy’s Polemic Against On-Call
  10. Internets of interest #3: Adam Fletcher on Life of an Airline Flight
  11. Internets of interest #2: John Ousterhout discusses a Philosophy of Software Design
  12. Internets of interest #1: Brian Kernighan on the Elements of Programming Style
  13. Maybe adding generics to Go IS about syntax after all
  14. Internets of interest #0: The future of Microprocessors
  15. Using Go modules with Travis CI
  16. Taking Go modules for a spin
  17. Slices from the ground up
  18. How the Go runtime implements maps efficiently (without generics)
  19. Containers versus Operating Systems
  20. Go’s hidden #pragmas
  21. If aligned memory writes are atomic, why do we need the sync/atomic package?

2017 24

  1. What Have We Learned from the PDP-11?
  2. Never edit a method, always rewrite it
  3. Please, vote Yes for marriage equality in Australia
  4. Why I joined Heptio
  5. I’m talking about Go at DevFest Siberia 2017
  6. The HERE IS key
  7. Context isn’t for cancellation
  8. Typed nils in Go 2
  9. Should Go 2.0 support generics?
  10. How to find out which Go version built your binary
  11. Simplicity Debt Redux
  12. Simplicity Debt
  13. Go, without package scoped variables
  14. If a map isn’t a reference variable, what is it?
  15. There is no pass-by-reference in Go
  16. Understand Go pointers in less than 800 words or your money back
  17. Why Slack is inappropriate for open source communications
  18. RC2017/4: Introducing Arudino6502
  19. Retrochallenge 2017/04: 6502 on Arduino
  20. Why Go?
  21. How to write a successful conference proposal
  22. I’m speaking at GopherChina and GopherCon Singapore
  23. Context is for cancelation
  24. The package level logger anti pattern

2016 28

  1. Never start a goroutine without knowing how it will stop
  2. Thinking about $GOPATH
  3. Declaration scopes in Go
  4. Simulating minicomputers on microcontrollers
  5. Go 1.8 toolchain improvements
  6. Do not fear first class functions
  7. Introducing Go 2.0
  8. IoT p0wnership
  9. Go 1.8 performance improvements, one month in
  10. SOLID Go Design
  11. Transistor logic fundamentals
  12. Automatically fetch your project’s dependencies with gb
  13. Gophers, please tag your releases
  14. Automatically run your package’s tests with inotifywait
  15. Stack traces and the errors package
  16. Test fixtures in Go
  17. Don’t just check errors, handle them gracefully
  18. The value of TDD
  19. Constant errors
  20. Go 1.7 toolchain improvements
  21. Threads are a strange abstraction
  22. Go project contributors by the numbers
  23. Must be willing to relocate
  24. Should methods be declared on T or *T
  25. Suggestions for contributing to an Open Source project
  26. Investigate your package dependencies with prdeps and Unix
  27. Unhelpful abstractions
  28. cgo is not Go

2015 31

  1. Are Go maps sensitive to data races ?
  2. How will you be programming in a decade ?
  3. A whirlwind tour of Go’s runtime environment variables
  4. Wednesday pop quiz: spot the race
  5. The Legacy of Go
  6. Let’s talk about logging
  7. Programming language markets
  8. Bootstrapping Go 1.5 on non Intel platforms
  9. Padding is hard
  10. Building Go 1.5 on the Raspberry Pi
  11. Cross compilation with Go 1.5
  12. Using gb as my every day build tool
  13. Performance without the event loop
  14. Why Go and Rust are not competitors
  15. Listen up!
  16. gb, a project based build tool for the Go programming language
  17. Friday pop quiz: the smallest buffer
  18. Hear me speak about Go performance at OSCON
  19. Struct composition with Go
  20. Introducing gb, a project based build tool for the Go programming language
  21. 2015 is going to be the year of Go
  22. A parable about practice
  23. Recruiters, know thy community
  24. Polyglot travel
  25. Simplicity and collaboration
  26. Cross compilation just got a whole lot better in Go 1.5
  27. Unofficial Go 1.4.2 tarballs now available
  28. Lost in translation
  29. Practical public speaking for Nerds
  30. Thanks Brainman
  31. Errors and Exceptions, redux

2014 52

  1. Building an atmega1284p prototype
  2. Make your own Apple 1 replica
  3. Inspecting errors
  4. Unofficial Go 1.4 tarballs now available
  5. Friday pop quiz: the size of things
  6. Minimum one liner followup
  7. Friday pop quiz: minimum one liner
  8. Retrochallenge 2015/01 entry, reviving an Apple II motherboard
  9. Five suggestions for setting up a Go project
  10. Visualising dependencies
  11. Error handling vs. exceptions redux
  12. Go, frameworks, and Ludditry
  13. Simple profiling package moved, updated
  14. Functional options for friendly APIs
  15. That trailing comma
  16. Unofficial Go 1.3.3 ARM tarballs now available
  17. Using // +build to switch between debug and release builds
  18. go list, your Swiss army knife
  19. How to install multiple versions of Go
  20. Go’s runtime C to Go rewrite, by the numbers
  21. Go has both make and new functions, what gives ?
  22. Tinyterm: A silly terminal emulator written in Go
  23. Arduino SPI woes
  24. Visualising the Go garbage collector
  25. Unofficial Go 1.3 ARM tarballs now available
  26. Paranormal trivia
  27. Ice cream makers and data races
  28. That wild ass recruiting idea
  29. Five things that make Go fast
  30. What does go build build ?
  31. On declaring variables
  32. Go 1.3 linker improvements
  33. Accidental method value
  34. Unofficial Go 1.2.2 and 1.3beta1 tarballs for ARM now available
  35. term: low level serial with a high level interface
  36. autobench-next updated for Go 1.3
  37. How to install multiple versions of Go
  38. Associative commentary follow up
  39. Associative commentary
  40. The empty struct
  41. Thoughts on Go package management six months on
  42. Channel Axioms
  43. Pointers in Go
  44. pdp11 presentation slides
  45. avr11: performance measurements
  46. avr11: profiling on the Atmega
  47. avr11: building an SPI SRAM shield for an Arduino Mega
  48. avr11: how to add 256 kilobytes of ram to an Arduino
  49. avr11: simulating minicomputers on microcontrollers
  50. What did devops mean ?
  51. Using go test, build and install
  52. A real serial console for your Raspberry Pi

2013 44

  1. Caro on LBJ
  2. Unofficial Go 1.2 tarballs for ARM now available
  3. The Mythical Man-Month selection bias
  4. Go 1.2 performance improvements
  5. A Go client for Joyent Manta
  6. Benchmarking Go 1.2rc5 vs gccgo
  7. Evaluation order oddity
  8. More simple test coverage in Go 1.2
  9. Stupid Go declaration tricks
  10. Subcommand handling in Go
  11. Calling for autobench contributions for Go 1.2
  12. Installing Ubuntu Precise 12.04 on a Udoo Quad
  13. How does the go build command work ?
  14. How to use conditional compilation with the go build tool
  15. Why I think Go package management is important
  16. Simple test coverage with Go 1.2
  17. Two point five ways to access the serial console on your Beaglebone Black
  18. #golang tweet popularity
  19. Release candidate 1 tarballs for ARM now available
  20. Unofficial Go 1.1.2 tarballs for ARM now available
  21. Using Juju to build gccgo
  22. How to include C code in your Go package
  23. Autoworkers of our generation, a response
  24. Introducing autobench-next
  25. Go 1.1 on the Cubieboard 2
  26. An introduction to cross compilation with Go 1.1
  27. Introducing profile, super simple profiling for Go programs
  28. Unofficial Go 1.1.1 tarballs for ARM now available
  29. How to write benchmarks in Go
  30. Stress test your Go packages
  31. How to install Go 1.1 on CentOS 5.9
  32. You don’t need to set GOROOT, really
  33. Writing table driven tests in Go
  34. How Go uses Go to build itself
  35. Why is a Goroutine’s stack infinite ?
  36. Go 1.1 performance improvements, part 3
  37. Go 1.1 performance improvements, part 2
  38. Go 1.1 performance improvements
  39. Go 1.1 tarballs for linux/arm
  40. Go and Juju at Canonical slides posted
  41. Curious Channels
  42. What is the zero value, and why is it useful?
  43. Using screen for lazy dot files
  44. Go, the language for emulators

2012 13

  1. Testing Go on the Raspberry Pi running FreeBSD
  2. Andrei Alexandrescu on exceptions
  3. The Go Programming Language (2009)
  4. Notes on exploring the compiler flags in the Go compiler suite
  5. Mikio Hara’s ipv4 package
  6. Installing Go on the Raspberry Pi
  7. An introduction to cross compilation with Go
  8. Another Go at the Next Big Language
  9. How to decode travel agent speak
  10. August Go meetup slides
  11. How the Go language improves expressiveness without sacrificing runtime performance
  12. Introducing gmx, runtime instrumentation for Go applications
  13. Why Go gets exceptions right

2011 19

  1. Three new SSH client features in Go weekly.2011-11-18
  2. Scratching my own itch, or how to publish multicast DNS records in Go
  3. OS X has a built in WiFi scanner
  4. Simple extended attribute support for Go
  5. Using Clang 2.9 to build Google Go
  6. Bash trick ‘o the day
  7. A new take on artificial scarcity
  8. Nobody rings a bell at the top of the market
  9. Netgear Stora as an ARM development platform
  10. Zephyr
  11. Pivot
  12. Cthulhu
  13. Click through rates
  14. The Whitlam Government’s achievements
  15. Harbour Bridge, 2011
  16. ack! and Go source files
  17. daemontools rpm for CentOS / Redhat
  18. Frothy
  19. Holga

2010 3

  1. How to run godoc under launchd on OS X
  2. Dude Business
  3. How to dial remote SSL/TLS services in Go