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言語仕様 Underlying Type / Go Language Underlyi...
Search
DQNEO
February 18, 2021
Programming
5.5k
9
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
入門Go言語仕様 Underlying Type / Go Language Underlying Type
Go言語の “Underlying Type” の仕組みをわかりやすく解説します。
Go言語の設計原則や歴史にもせまります。
#gospecreading
DQNEO
February 18, 2021
More Decks by DQNEO
See All by DQNEO
英和辞書付きGo言語仕様書 / Word Wise Go Spec
dqneo
1
630
Go言語低レイヤー入門 Hello world が 画面に表示されるまで / Introduction to low level programming in Go
dqneo
8
2k
入門Go言語仕様 / Go Specification Untyped Constants
dqneo
1
1.4k
How to write a self hosted Go compiler from scratch (Gophercon 2020)
dqneo
3
1.8k
もっと気軽にOSSに Pull Requestを出そう!/ Let's make a PR to OSS more easily
dqneo
6
8.6k
Goコンパイラをゼロから作ってセルフホスト達成するまで / How I wrote a self hosted Go compiler from scratch
dqneo
15
15k
コンパイラをつくってみよう / How to make a compiler
dqneo
9
12k
コンパイラ作りの魅力を語る / Making compilers is fun
dqneo
10
8.8k
Goのmapとheapを自作してみた / How to create your own map and heap in Go
dqneo
0
3.3k
Other Decks in Programming
See All in Programming
個人開発者よ、Honoを使え(おじさんver)
tanahiro2010
2
280
조합이폭발하는디자인시스템이걸눈으로도테스트하라고요
giljongyu
0
580
クラウドゲーミングのパフォーマンス最適化に挑む / Cloud Gaming Performance Tuning
vivion
0
260
月間100万人のサービス刷新で、 技術選定をHonoに振り切った話
yutobara
8
7k
Vapor Mode でアクセシビリティは 壊れないか検証した話
fuqda
1
130
作って学ぶSpring BootのAuto Configuration / JJUG Night Seminar 2026-10-19
rshindo
0
210
golang-bob.pdf
iwatsukayura
0
140
Findy - エンジニア向け会社紹介/Findy Company Deck
findyinc
6
400k
【加筆修正版】Laravel のアプリケーションをどこにデプロイするか #phpcon_ehime
akase244
0
160
自サークルのIdPからログアウトできるようになるまで
taiseiue
1
150
気持ちぃ〜角丸 Squircle
ryu1013
0
340
オーケストレーション記述言語 Katari
yukikurage
0
200
Featured
See All Featured
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
340
So, you think you're a good person
axbom
PRO
2
2.2k
Abbi's Birthday
coloredviolet
4
10k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
330
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Thoughts on Productivity
jonyablonski
76
5.4k
Ethics towards AI in product and experience design
skipperchong
2
440
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8.1k
Designing for Performance
lara
612
70k
Code Reviewing Like a Champion
maltzj
529
40k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
740
Transcript
入門Go言語仕様輪読会 “Underlying Type” @DQNEO 2021-02-18 20:10
自己紹介 • @DQNEO (ドキュネオ) • Goコンパイラ babygo の作者です ◦ https://github.com/DQNEO/babygo
• 公式Goコンパイラ コントリビュート歴有り • Go言語仕様書 コントリビュート歴有り(←New)
全ての型には “Underlying Type” がある
underlyingの意味 lying or situated under something --- Oxford’s Languages
underlying type = 背後霊 私 霊
“Underlying Type”がなぜ重要なのか • Assignability (代入可能性) の条件に使われている • Generics で重要な役割をになう ◦
設計ドラフトで “underlying type” が11回登場 https://go.googlesource.com/proposal/+/refs/heads/ master/design/go2draft-type-parameters.md
例 type MyInt int MyInt の underlying type は int
イメージ 背後霊 MyInt int type MyInt int
全ての型には “Underlying Type” がある = 全ての型には 背後霊型がある
MyInt int では int の underlying type は? type MyInt
int ?
int int int の underlying type は int
ルール1: predeclared な boolean, numeric, string の underlyng type は
自分自身 ルール2: 型リテラルの underlyng type は自分自身 ルール3: 型定義すると、左側と右側で underlyng type を共有する 3つのルール
predeclaredな boolean,string,numeric のunderlying typeは自分自身 ルール1 • bool • string •
int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr complex64 complex128 float32 float64
複合的な型 type User struct { id int name string }
User struct { id int name string } 背後霊
struct{...}の underlying type は? struct { id int name string
}
struct { id int name string } struct { id
int name string } struct{...}の underlying typeは自分自身
型リテラルの underlying typeは 自分自身 ルール2 例: *int struct{...} []string map[int]bool
interface{...} ※前半発表のNobishiiさん の資料もご参照ください。
type MyInt int MyInt int 派生型から派生させると? type MyMyInt MyInt MyMyInt
誰?
int type MyInt int MyInt int 派生型から派生させると? type MyMyInt MyInt
MyMyInt えっ?
型定義をすると、 左側と右側が underlying typeを共有する ルール3 type B A 左 右
※前半発表のNobishiiさんの資料も ご参照ください
背後霊を共有する type B A B A Aの背後霊
type MyInt int MyInt int int 背後霊を共有する
type MyMyInt MyInt MyMyInt MyInt int 背後霊を共有する
type User struct{ id… } User struct{id...} struct{id...} 背後霊を共有する
type AdminUser User AdminUser User struct{id...} 背後霊を共有する
type MyInt int type MyMyInt MyInt type MyMyMyInt MyMyInt MyInt
int int フラットな組織 MyMyInt MyMyMyInt
func (x MyInt) method() { } MyInt int int Method
の継承 MyMyInt MyMyMyInt method なし method なし method なし method あり method なし
Method の継承 A defined type may have methods associated with
it. It does not inherit any methods bound to the given type, but the method set of an interface type or of elements of a composite type remains unchanged: • interface型 : 継承される • 構造体型の要素のメソッド: 継承される • それ以外の型: 継承されない
型のヒエラルキー (段階的階層)がない
Go言語誕生の背景 https://talks.golang.org/2009/go_talk-20091030.pdf
https://talks.golang.org/2009/go_talk-20091030.pdf Go言語の設計原則
ルール1: predeclared boolean, numeric, string の underlyng type は自分自身 ルール2:
型リテラルの underlyng type は自分自身 ルール3: 型定義すると、左側と右側で underlyng type を共有する まとめ
None
クイズ1 type ( B1 string B2 B1 ) string, B1,
B2 の それぞれの underlying type は? → 答えは言語仕様書に
クイズ2 type ( B1 string B2 B1 B3 []B1 B4
B3 ) [ ]B1, B3, B4 のそれぞれの underlying type は? → 答えは言語仕様書に
ご清聴 ありがとうございました