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
Kotaro Otaka
September 16, 2026
Programming
14
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
45
Vendoring をやめたけどやめたのは正解だったのか
otakakot
0
66
t *testing.T は どこからやってくるの?
otakakot
1
1.1k
PostgreSQL を使った快適な go test 環境を求めて
otakakot
0
1.4k
Go で作った CLI ツールにバージョンを埋め込みたい
otakakot
0
250
組込みだけじゃない!TinyGo で始める無料クラウド開発入門
otakakot
2
650
組込みだけじゃない! TinyGo で始める無料クラウド開発入門
otakakot
1
180
統一感のある Go コードを生成 AI の力で手にいれる
otakakot
1
3.9k
SQLBoiler がメンテナンスモードになりまして
otakakot
0
390
Other Decks in Programming
See All in Programming
MVNOの申込からeSIM開通までをiOSアプリでつなぐ- 本人確認・MNP・通信事業者基盤をまたぐ実装
satotakeshi
0
400
手動確認はもう限界 〜XCUITestでCustom URL Schemeの遷移を起動種別ごとに自動テストする〜 / Testing Custom URL Schemes with XCUITest
otouto
0
280
AgentCore CLI で進化した AWS での AI エージェントの作り方 : 必要な機能を必要な時に
icoxfog417
PRO
3
340
Security issues being discussed on Web Platforms
petamoriken
0
940
選挙速報を多くのユーザーへ 届ける Live Activities 設計
hamayokokuririn
0
140
Building an Out-of-Order CPU
latte72
1
780
技術的負債を組織課題として解く-増えすぎたマイクロサービスとの戦い-
reimaru
1
1.8k
Streamlitで実現する自然言語データアプリ開発
ayumu_yamaguchi
0
280
海上で動くGoサーバー: goroutineとchannelでさばく航行データストリーム
atsuki_seo
0
690
The Good Stuff, Not the Slop: Engineering High-Quality Android Apps with Modern AI Tooling
danybony
1
250
A2UI for Android: Safely Rendering AI-Generated UI with Jetpack Compose - DroidKaigi 2026
itsmedreamwalker
0
140
自分的「カンファレンスの楽しみ方」
syumai
0
200
Featured
See All Featured
Rails Girls Zürich Keynote
gr2m
96
14k
Practical Orchestrator
shlominoach
192
12k
Why Our Code Smells
bkeepers
PRO
340
58k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
500
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
Six Lessons from altMBA
skipperchong
29
4.5k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
500
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年生
おわり またどこかで お会いしましょう!