The 2026 Way to Skip Empty Fields in Go JSON
Back in 2023 I wrote a Korean post about the omitempty struct tag, which drops a field from marshaled JSON when its value is the zero value for its type. That’s still true and still the tag you reach for first. What’s new since then is omitzero, added in Go 1.24, and it exists because omitempty has a blind spot that no amount of clever tagging can fix.
The 2026 Way to Lint Go Code with golangci-lint
Back in 2023 I wrote a Korean post about adopting golangci-lint on my team. We’d grown enough that reviewers were spending more time explaining idiomatic Go in PR comments than reviewing the actual logic, and we needed something automated to take that job off our plates. golangci-lint was the fix: instead of running govet, gofmt, and a dozen other tools one at a time, it runs all of them in parallel and caches the results. Three years later that’s still exactly why I reach for it. What’s changed is everything around it, most of all the config file, which went through a major version bump in 2025.
The 2026 Way to Write Enums in Go
Back in 2022 I wrote a Korean post about faking enums in Go with a typed constant block and iota. Go still has no enum keyword in 1.26.4, and a couple of language proposals asking for one (issue #19814, issue #64739) have been open for years without landing. So the trick from 2022 is still exactly how you write an enum in Go today. What’s worth a second post is the bug hiding in that trick, because this time I actually ran it instead of just describing it.
The 2026 Way to Write a Set in Go
Back in 2021 I wrote a Korean post about building a Set in Go. I wasn’t arguing that Go needed one built in, I was solving algorithm problems, Advent of Code mostly, and kept running into spots where a set was the natural tool for the job. So I built one. Go is now at 1.26.4, the standard library has picked up generics, iterators, and a maps package along the way, and there’s still no Set type in sight (a proposal for one has been open for years without landing). That’s fine. The same trick from 2021 still solves the problem in 2026, it just looks a lot better written today.
The Best AI Transformation Strategy Is Sharing Skills
Most AI adoption plans start with tools and seats. Buy the licenses, run a workshop, tell everyone to use the agent. Adoption climbs for a week, then flattens. Everyone has the same model, and yet the results vary wildly from one person to the next.
How to Use Git Worktrees with Claude Code
When Claude Code runs a long task, it edits files in your working directory. If you want to keep working while it does, you end up fighting over the same files. Git worktrees solve this. They let one repository check out several branches into separate folders at once, so Claude can work in one folder while you stay in another.
Storing Heterogeneous Objects in PostgreSQL
Storing different types of objects in one PostgreSQL table is tricky. Each type shares a few fields and carries its own. There are three practical ways to handle it, and each one trades flexibility for structure in a different spot.
Using Interface for Controller Requests in Java Spring Framework
When you build a REST API with Spring, one endpoint often has to accept several kinds of request. Using an interface for the request body lets a single endpoint handle them all. The example here is a restaurant order system, where one /v1/orders endpoint takes both hamburger and pizza orders.
The Importance of Signals from Test Codes
When you write tests, they tell you a lot about your main code. If a test is hard to write, the problem is usually in the code you are testing, not in the test. Those difficulties are signals, and they are worth reading.
Go에서 omitempty 태그 사용하기
Go로 웹 서버를 개발하다 보면 JSON 데이터를 주고 받는 경우가 많이 있습니다. struct를 JSON으로 바꿀 때 값이 Zero Value(각 type별 기본 값)이거나 nil인 경우 그 값을 보내지 않아야할 때가 있습니다. 이런 경우, omitempty 태그를 활용하면 JSON에서 쉽게 생략할 수 있습니다.