Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Go で「見つからなかった」をどう表現するか
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Kotaro Otaka
September 16, 2026
Programming
37
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Go で「見つからなかった」をどう表現するか
The Go gopher was designed by Renée French.
https://gotalk.connpass.com/event/398016/
Kotaro Otaka
September 16, 2026
More Decks by Kotaro Otaka
See All by Kotaro Otaka
actions/setup-go 完全に理解した
otakakot
1
130
Vendoring をやめたけどやめたのは正解だったのか
otakakot
0
71
t *testing.T は どこからやってくるの?
otakakot
1
1.2k
PostgreSQL を使った快適な go test 環境を求めて
otakakot
0
1.6k
Go で作った CLI ツールにバージョンを埋め込みたい
otakakot
0
260
組込みだけじゃない!TinyGo で始める無料クラウド開発入門
otakakot
2
670
組込みだけじゃない! TinyGo で始める無料クラウド開発入門
otakakot
1
180
統一感のある Go コードを生成 AI の力で手にいれる
otakakot
1
3.9k
SQLBoiler がメンテナンスモードになりまして
otakakot
0
450
Other Decks in Programming
See All in Programming
AmebaブログはKMPから卒業します
kmars0605
0
250
Kotlinの15年とServer-Side Kotlin
n_takehata
1
170
Agentic Software Factoryに、すごく賢いIF文を。 / super smart IF statement into the Agentic Software Factory.
rkaga
8
2.4k
TanStack Vue Query と Pinia Colada から学ぶ非同期状態の型設計
aoshi
0
310
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
430
조합이폭발하는디자인시스템이걸눈으로도테스트하라고요
giljongyu
0
590
[2026-10-09]一枚の布で作らなくてもいい。 信頼性は「パッチワーク」で紡がれる~既存の運用と新しい可能性をつなぎ合わせてきたCREの話~
tosite
0
110
Inertia Rails: The One-Person Framework with React & Friends
skryukov
0
130
Domain-Driven Transformation
hschwentner
2
2.3k
sbt 2.0: takeoff
eed3si9n
0
170
Optunaを作ったときにやりたかったこと、その後 (2026/10/16, Optuna Meetup #3)
iwiwi
4
1.3k
GraphQL の onError と Nullability のこれから
quramy
0
180
Featured
See All Featured
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
490
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3.1k
Embracing the Ebb and Flow
colly
88
5.2k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Evolving SEO for Evolving Search Engines
ryanjones
0
330
Mind Mapping
helmedeiros
1
410
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
650
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
280
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
530
Docker and Python
trallard
47
4.2k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
59k
Deep Space Network (abreviated)
tonyrice
0
380
Transcript
Go で「見つからなかった」を どう表現するか おーたかこーたろー / @otakakot 2026.09.16 Go Connect #17
The Go gopher was designed by Renée French.
#goconnect 見つからなかったら、作成する
#goconnect こんなロジックを書くことはないでしょうか?
#goconnect 例えば...
#goconnect HTTP ステータスコードなら 404 https://developer.mozilla.org/docs/Web/HTTP/Reference/Status
#goconnect gRPC ステータスコードなら 5 https://grpc.io/docs/guides/status-codes/
#goconnect が「見つからなかった」として 定義されています
#goconnect Go で実装するときどうしてますか?
#goconnect 私は何も考えず error で表現していました
#goconnect でも実は色々表現方法あるよね
#goconnect Go で「見つからなかった」 を実装するパターンの紹介
#goconnect 5つの実装パターン
#goconnect 前例記事
#goconnect ※ 投稿日 2017年12月22日 最終更新日 2021年05月24日 https://qiita.com/najeira/items/0bb0acdd7a71fc3f559b
#goconnect nil エラー 有無を表す bool ゼロ値や特別な値 「なかった」を判定できるオブジェクト
#goconnect nil による実装 エラーによる実装 bool による実装 ゼロ値/番兵値 による実装 ジェネリクスによる実装
#goconnect 今回の登壇では標準パッケージの 実例を交えて紹介
#goconnect nil による実装
#goconnect 例:regexp.FindStringSubmatch
#goconnect
#goconnect
#goconnect 戻り値がひとつだから許されるパターン
#goconnect res, err の戻り値の場合は nil, nil になる可能性があるので避けたい
#goconnect エラーによる実装
#goconnect 例:sql.ErrNoRows
#goconnect
#goconnect
#goconnect エラーを値として扱う※ Go では よく見るパターン https://go.dev/blog/errors-are-values
#goconnect 「見つからなかった」が文脈次第で エラーと解釈できないときに違和感
#goconnect bool による実装
#goconnect 例:os.LookupEnv
#goconnect
#goconnect
#goconnect 「見つからなかった」をシンプルに表現
#goconnect ゼロ値/番兵値 による実装
#goconnect 例:os.Getenv
#goconnect
#goconnect
#goconnect 例:strings.Index
#goconnect
#goconnect
#goconnect 取り得ない値の設定が必要
#goconnect スライス検索などでは慣習的で自然
#goconnect ゼロ値/番兵値=見つからなかった という曖昧さ(暗黙値)
#goconnect ゼロ値前提の実装 cmp.Or[T] と 組み合わせるときなどは便利
#goconnect ゼロ値が使いたいときには使えない
#goconnect ジェネリクスによる実装
#goconnect 例:sql.Null[T]
#goconnect
#goconnect
#goconnect 「見つからなかった」を型で表現
#goconnect 値へのアクセスで一手間必要
#goconnect 実装での困りごと
#goconnect 冒頭の話
#goconnect 見つからなかったら、作成する
#goconnect Repository パターンでの実装を考える
#goconnect Repository パターンとは
#goconnect コレクションのように振る舞う抽象
#goconnect Repository ... データ永続化の抽象 Gateway ... データ永続化の具象 UseCase ... データ永続化の利用者
#goconnect Go だと interface を使う
#goconnect
#goconnect 「見つからなかった」をエラーパターンで 実装すると歪みが生じません?
#goconnect 実装側で定義されたエラーで判定 → 呼び出し側が Repository の実装に依存
#goconnect
#goconnect
#goconnect 実装側がどこかで定義されたエラーで判定 → そのエラーを実装させる制約(強制力)がない
#goconnect
#goconnect
#goconnect Repository パターンでの解決案
#goconnect nil による実装 エラーによる実装 bool による実装 ゼロ値/番兵値 による実装 ジェネリクスによる実装
#goconnect この中で選ぶなら?
#goconnect nil による実装 エラーによる実装 bool による実装 ゼロ値/番兵値 による実装 ジェネリクスによる実装
#goconnect bool を使った Repository
#goconnect
#goconnect
#goconnect
#goconnect 3値を返すのが Go っぽくないかも
#goconnect ジェネリクスを使った Repository
#goconnect
#goconnect
#goconnect
#goconnect
#goconnect 値に直接アクセスできなくなるのが微妙かも
#goconnect まとめ
#goconnect 5つの「見つからなかった」 の実装方法を紹介
#goconnect 「見つからなかった」を表現するときは エラー以外も検討してみよう!
#goconnect Kotaro Otaka おーたかこーたろー / @otakakot 2020.04 Web Engineer 新卒入社
2021.04 Hello Golang! 2022.11 Web Engineer @株式会社ビットキー 2026.03 Go Connect Supporter Gopher6年生
おわり またどこかで お会いしましょう!