The Curious Engineer

All blogs / Go

Jay Conrod's Blog

jayconrod.com

Itegration tests are the most important kind of tests. You should strive for excellent integration test coverage and invest relatively little time in unit tests. I've believed this since I worked on cmd/go, Go's build tool. We had a really excellent set of integration tests that were easy to write,

GoDev tools / editors / IDEsTesting / QA

Posts
99 from 1 Jan 2008 to 29 Oct 2026
Posting
now and then (3 in the last year)
Kind
personal blog
Feed
https://jayconrod.com/feed

2026 3

  1. Generate BUILD files for new rule sets with Gazelle v2
  2. Integration tests are best tests
  3. View All Posts

2025 2

  1. Writing Bazel rules: module extensions
  2. Open source is like a second job

2023 4

  1. Preserving comments when parsing and formatting code
  2. Goroutines: the concurrency model we wanted all along
  3. How GitHub's upgrade broke Bazel builds
  4. ctxio: A new Go package for cancellable I/O

2022 3

  1. Go Editor Support in Bazel Workspaces
  2. Curiosities of the Go testing package
  3. Internals of Go's new fuzzing system

2021 2

  1. Leaving Google
  2. Life of a Go module

2020 5

  1. Error handling guidelines for Go
  2. Organizing Bazel WORKSPACE files
  3. Accessing private GitHub repositories over HTTP
  4. Export data, the secret of Go's fast builds
  5. Writing Bazel rules: data and runfiles

2019 2

  1. Writing Bazel rules: platforms and toolchains
  2. Writing Bazel rules: repository rules

2018 4

  1. Writing Bazel rules: moving logic to execution
  2. Writing Bazel rules: library rule, depsets, providers
  3. Writing Bazel rules: simple binary rule
  4. An update on Gypsum and CodeSwitch

2017 8

  1. Minibox: A miniature Linux container runner
  2. Intermediate Linux command line tutorial
  3. Thoughts from GopherCon 2017
  4. How Python parses white space
  5. Lambdas in Gypsum
  6. Migrating to Bazel: Part 2
  7. Migrating to Bazel: Part 1
  8. Traits in Gypsum

2016 9

  1. Static and dynamic types in pattern matching
  2. Machine learning and compiler optimization
  3. Futures are better than callbacks
  4. CodeSwitch assembly glue for native functions
  5. CodeSwitch API: native functions
  6. CodeSwitch API improvements
  7. Existential types in Gypsum
  8. Arrays in Gypsum
  9. Pattern matching in Gypsum

2015 9

  1. Importing symbols in Gypsum
  2. Memory management in CodeSwitch
  3. CodeSwitch bytecode and interpretation
  4. Package loading in CodeSwitch
  5. How CodeSwitch got its name
  6. Packages in Gypsum and CodeSwitch
  7. Thoughts on automated testing
  8. Type parameter bounds and variance
  9. A weird problem in the Scala type system

2014 10

  1. Gypsum now has type parameters!
  2. Structure of the Gypsum compiler (part 3)
  3. Structure of the Gypsum compiler (part 2)
  4. Structure of the Gypsum compiler (part 1)
  5. Introducing Gypsum
  6. Pinky and the god: Avoiding Emacs-induced RSI
  7. Emacs: Run git-blame on the current line
  8. The Strahler number
  9. How to build a parser by hand
  10. New and improved blog software

2013 3

  1. Bit rot is real!
  2. A tour of V8: Garbage Collection
  3. A tour of V8: Crankshaft, the optimizing compiler

2012 5

  1. A tour of V8: object representation
  2. New Android app: Snowflakes live wallpaper
  3. A tour of V8: full compiler
  4. Water simulation demo in WebGL
  5. Interviewing from the other side of the table

2011 8

  1. A tale of two benchmarks
  2. Polymorphic Inline Caches explained
  3. How to use Emacs like GNU Screen
  4. A brief explanation of Scala 2.8 collections
  5. A simple interpreter from scratch in Python (part 4)
  6. A simple interpreter from scratch in Python (part 3)
  7. A simple interpreter from scratch in Python (part 2)
  8. A simple interpreter from scratch in Python (part 1)

2010 6

  1. Emacs etags: a quick introduction
  2. Parsing key=value pairs in bash
  3. Water simulation in GLSL
  4. Trapping floating point exceptions in Linux
  5. Convenient updates for immutable objects in Scala
  6. Parallelization: Harder than it looks

2009 9

  1. Tutorial: Reverse debugging with GDB 7
  2. Processing large files in Scala
  3. Midrange computers are amazingly cheap
  4. Scala's IDE support is terrible
  5. Tutorial: Function Interposition in Linux
  6. Demise of the BBS
  7. Keeping a developer diary
  8. How to use HTTP cookies in Python
  9. Currying and why we don't pass arguments as tuples

2008 7

  1. Method resolution
  2. Type tagging format
  3. Limitations on generics
  4. Type inference
  5. Type inference and generics post-mortem
  6. New Blogging System with Python/MySQL
  7. Fixpoint type inference