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
Gunosy.go #2 container
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Satoshi
September 25, 2014
Programming
79
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Gunosy.go #2 container
go lang study
Satoshi
September 25, 2014
More Decks by Satoshi
See All by Satoshi
高速な広告配信サーバの作り方のコツ
satoshi03
3
540
スケールしない広告サーバの作り方
satoshi03
0
260
Gunosy AdServerのデータ周りの話
satoshi03
2
3k
フルスクラッチで書いたアドサーバの開発・運用史
satoshi03
2
4.5k
Gunosy Go Lang Study #6 net net/http net/url
satoshi03
0
150
Other Decks in Programming
See All in Programming
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
450
AI Agent時代のリアーキテクチャ戦略と実践
hokaccha
9
5.4k
なぜCTOを降りてFDEを選んだのか?〜なぜプロダクト企業がFDEで顧客の現場に踏み込むのか〜
gonta
1
150
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
1.1k
Androidだけじゃない、DroidKaigiで広がった私の技術スタック
akkeylab
0
120
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Rails World 2026, Austin, Texas
marcoroth
0
190
Agentic Software Factoryに、すごく賢いIF文を。 / super smart IF statement into the Agentic Software Factory.
rkaga
7
1.8k
Workers Cache を知る
syumai
0
330
RAG の “R” を Swift で覗いてみる 〜「意味から探す」検索の仕組み〜
nao_randd
0
120
AWSに止められる覚悟してますか?
morizo_1984
2
510
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
2
1.5k
Apple Intelligence を用いた個人情報誤送信防止、及びユーザーリクエスト体験の改善について
yukiny
0
310
Featured
See All Featured
Raft: Consensus for Rubyists
vanstee
142
7.7k
The untapped power of vector embeddings
frankvandijk
2
1.9k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
300
Making the Leap to Tech Lead
cromwellryan
135
10k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
460
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
brightonSEO & MeasureFest 2025 - Winning Strategies for Black Friday CRO & PPC - Christian Goodrich
cargoodrich
3
860
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
360
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
270
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.7k
Navigating Weather and Climate Data
rabernat
0
550
Transcript
Gunosy.go #2 container Gunosy Inc.
自己紹介 • 印南 聡志 (いんなみ さとし) • 6月にGunosyに入社
• Java/Ruby … 最近 Python/Go 始めました
Container • h?p://golang.org/pkg/container/ • データのまとまりを扱うためのパッケージ – List : 双方向連結リスト
– Ring : 循環リスト – Heap : 二分木構造リスト(用Interface)
List • 双方向連結リスト – 各エレメントが前後のエレメントへのリンク (ポインタ)を所持 – インサートは高速だがインデックス参照は不可 – ジェネリクスの機能はなし
• 型アサーションを使う必要がある Element value Element value Element value root next *Element prev *Element next *Element prev *Element
List – type Element • type Element – 双方向リストの要素(エレメント)、格納するデータ、
前後のリストのリンクを持つ – Value interface{} – func (*Element) Next – func (*Element) Prev
List – type List • type List
func New() *List func (l *List) Back() *Element func (l *List) Front() *Element func (l *List) Init() *List func (l *List) InsertATer(v interface{}, mark *Element) *Element func (l *List) InsertBefore(v interface{}, mark *Element) *Element func (l *List) Len() int func (l *List) MoveATer(e, mark *Element) func (l *List) MoveBefore(e, mark *Element) func (l *List) MoveToBack(e *Element) func (l *List) MoveToFront(e *Element) func (l *List) PushBack(v interface{}) *Element func (l *List) PushBackList(other *List) func (l *List) PushFront(v interface{}) *Element func (l *List) PushFrontList(other *List) func (l *List) Remove(e *Element) interface{}
List h?p://play.golang.org/p/7GnwWoC-‐_s 出力: 1 2 3
4
Ring • 循環リスト • どのリング要素のポインタもリング全体への参照と して使用可能 • (Javaのような)ジェネリクスの機能はなし
• 型アサー(ry prev *Ring next *Ring prev *Ring prev *Ring next *Ring next *Ring
Ring – type Ring func New(n int) *Ring
func (r *Ring) Do(f func(interface{})) func (r *Ring) Len() int func (r *Ring) Link(s *Ring) *Ring func (r *Ring) Move(n int) *Ring func (r *Ring) Next() *Ring func (r *Ring) Prev() *Ring func (r *Ring) Unlink(n int) *Ring
Ring h?p://play.golang.org/p/2SqEm4PGHT 出力: 要素数: 10 0 1
2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
Heap • 二分木構造 • 取り出される値が常に最小になる – Init, Fix, Pop,
Push, Remove実行時にmin-‐heapが 走る • List, Ringとは異なり自身で定義した配列型に heap.interfaceを実装
Heap • 実装する必要のある関数 – func(Interface) Pop() – func(Interface) Push()
– func (Interface) Len() – func (Interface) Less() – func (Interface) Swap() デモ:h?p://play.golang.org/p/QIxb4gHIkW
まとめ • Container – データのまとまりを便利に扱うためのパッケージ • List : 双方向連結リスト
• Ring : 循環リスト • Heap : 2分木構造 – インサートが高速 – インデックスでの要素指定ができない