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
31
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
93
Vendoring をやめたけどやめたのは正解だったのか
otakakot
0
70
t *testing.T は どこからやってくるの?
otakakot
1
1.2k
PostgreSQL を使った快適な go test 環境を求めて
otakakot
0
1.5k
Go で作った CLI ツールにバージョンを埋め込みたい
otakakot
0
260
組込みだけじゃない!TinyGo で始める無料クラウド開発入門
otakakot
2
660
組込みだけじゃない! TinyGo で始める無料クラウド開発入門
otakakot
1
180
統一感のある Go コードを生成 AI の力で手にいれる
otakakot
1
3.9k
SQLBoiler がメンテナンスモードになりまして
otakakot
0
440
Other Decks in Programming
See All in Programming
Rでドレミ/Do-Re-Mi_with_R
florets1
0
120
半永久的に提供し続けられるプライベートクラウドを目指して ― 利用者の認知負荷を抑えるAPI抽象化とハードウェア世代交代の基盤設計
tomokon
0
440
技術的負債の返済は、AI時代の複利で効く投資 — 経営としての意思決定とその遂行
curekoshimizu
1
2.2k
Turning Architecture into Unit Tests in the AI Era (NSSpain XIV)
steliosf
PRO
1
130
SalesForceを内製化!? ~ HR事業を支える顧客管理基盤のインフラを大公開 ~
oku053
0
130
自サークルのIdPからログアウトできるようになるまで
taiseiue
0
100
動作中のプログラムの中身をリアルタイムに覗く / Realtime Debugger for CSharp with Roslyn
prota
1
1.8k
RAG の “R” を Swift で覗いてみる 〜「意味から探す」検索の仕組み〜
nao_randd
0
120
ソニーのクラウド共通基盤の変遷とAI時代の開発スタイルに合わせた進化 / The Journey of Sony’s Common Cloud Platform and Its Evolution for AI-Native Development
kenjiyoneyama
0
230
mrbgem 三角測量 開発
ogom
0
200
モジュールの視点からSwiftを読み解く #iosdc
s_shimotori
0
350
速習iPhone Duo対応
yuukiw00w
2
960
Featured
See All Featured
Fantastic passwords and where to find them - at NoRuKo
philnash
52
4k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.6k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
720
The Spectacular Lies of Maps
axbom
PRO
1
1.1k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
910
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
2
930
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.8k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
530
Chasing Engaging Ingredients in Design
codingconduct
0
340
Mobile First: as difficult as doing things right
swwweet
225
10k
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年生
おわり またどこかで お会いしましょう!