Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
dgw generating Go struct from potgresql table d...
Search
Akira Chiku
July 03, 2017
Programming
1.7k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
dgw generating Go struct from potgresql table definition
Akira Chiku
July 03, 2017
More Decks by Akira Chiku
See All by Akira Chiku
Goの標準ライブラリで扱うフォントと画像
achiku
1
2.3k
gocon-2018-how-we-go-test-with-rdbms.pdf
achiku
6
5.9k
詳解 BTC Payment
achiku
3
3.7k
Async, Persistent, Fast, and Stable "Enought" Queue/Worker Using Go and PostgreSQL
achiku
5
9k
非同期Jobの設計と実装
achiku
0
400
How We Built Testable HTTP API Server
achiku
6
7.9k
PyCon JP 2014 Python + Hive on AWS EMRで貧者のログ集計
achiku
0
4k
Other Decks in Programming
See All in Programming
才能?センス?知らん、 続けたもん勝ちだ。-- 結婚・出産・癌を越えてなお、私がプロダクトを創り続ける理由
16bitidol
2
860
Apache Hive: Toward a Cloud Native Lakehouse
okumin
0
130
OSINT for SRE: 学術論文とポストモーテムから探る システム障害の共通パターン / SRE NEXT 2026
tomoyk
1
3.8k
20260623_Loop Engineeringで自分の分身の問い合わせBotを作る
ryugen04
0
220
吝嗇家のためのAI活用 / AI development for miser - ChatGPT + Issue Driven Development
tooppoo
0
190
AIを活用したE2Eテスト実装効率化のあゆみ / ebisu-mobile-14-kotetu
kotetuco
0
170
そのテスト、説明できますか?~LWテスト戦略FW~のご紹介
nakahara
0
210
Foundation Models frameworkで画像分析
ryodeveloper
1
120
AI がコードを書く時代における新卒エンジニアの仕事風景 (2026) / New Graduate Engineers in the Era of AI Coding (2026)
sushichan044
0
220
【SRE NEXT 2026 Lunch Session】一人目専任SREの立ち上げを加速する ― AIと進めたオンボーディングで2分を0.04秒にした話
pkshadeck
PRO
0
2.7k
act2-costs.pdf
sumedhbala
0
110
LaravelLive Japan の裏方のすべて — 第188回 PHP勉強会@東京 (2026-06-24)
suguruooki
2
150
Featured
See All Featured
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
For a Future-Friendly Web
brad_frost
183
10k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
750
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.8k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
Practical Orchestrator
shlominoach
191
11k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.9k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.2k
Building Adaptive Systems
keathley
44
3.1k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
280
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
3.8k
Transcript
EHX (FOFSBUJOH(PTUSVDU GSPN1PTUHSF42- HPMBOHUPLZP+VM "LJSB$IJLV
NF /BNF"LJSB$IJLV 5XJUUFS!@BDIJLV (JU)VC!BDIJLV (PPHMF4FBSDI"LJSB$IJLV'JSF
BHFOEB Ø #BDLHSPVOE Ø 8IBU Ø 8IZ Ø )PX
CBDLHSPVOE
CBDLHSPVOE QSPEVDU Ø QSPEVDU Ø "QQCBTFEJOTUBOU BOESFMPBEBCMFWJSUVBMQMBTUJD 7*4"QSFQBJEDBSEGPSFWFSZPOF
Ø J04 "OESPJE Ø IUUQTWBOEMFKQ
CBDLHSPVOE QSPEVDUTJ[F Ø TJ[F BTPG+VM Ø
PGFOEQPJOUT JOUFSOBM"1* Ø PGFYUFSOBMTFSWJDFT Ø OPUJODMVEJOH4FOUSZ/FX3FMJD4UBUVT1BHFJP Ø PGUBCMFT 1PTUHSF42- Ø PGMJOFT (PDPEFXJUIPVUWFOEPSEJS Ø 5PUBM Ø 8JUIPVUUFTUDPEF
XIBU
EHX Ø IUUQTHJUIVCDPNBDIJLVEHX Ø *UHFOFSBUFT(PTUSVDU BOETJNQMF5BCMF3PX%BUB(BUFXBZ GVODUJPOTNFUIPETGSPN1PTUHSF42-UBCMFEFOJUJPOT Ø 5BCMF3PX%BUB(BUFXBZ
Ø 1SJNJUJWFGPSNPGNBQQJOHCFUXFFO(PBOE3%#.4 UBCMFBOESPX OPUMJLF"DUJWF3FDPSE%BUB.BQQFS Ø IUUQTNBSUJOGPXMFSDPNFBB$BUBMPHUBCMF%BUB(BUFXBZIUNM Ø IUUQTNBSUJOGPXMFSDPNFBB$BUBMPHSPX%BUB(BUFXBZIUNM Ø VTFS@BDDPVOUUBCMF6TFS"DDPVOUTUSVDU Ø AUZQF6TFS"DDPVOUTUSVDUAXJUIA*%A A&NBJMA A-BTU/BNFA BOEA'JSTU/BNFABUUSJCVUFT Ø A6TFS"DDPVOU$SFBUF 2VFSZFS ANFUIPEUPJOTFSU SFDPSE Ø A(FU6TFS"DDPVOU#Z1L QLJOU AGVODUJPOUPTFMFDU SFDPSECZQL
&YBNQMF CREATE TABLE user_account ( id bigserial primary key
, email text not null unique , last_name text not null , first_name text not null );
// UserAccount represents public.user_account type UserAccount struct { ID
int64 // id Email string // email LastName string // last_name FirstName string // first_name } // Create inserts the UserAccount to the database. func (r *UserAccount) Create(db Queryer) error { err := db.QueryRow( `INSERT INTO user_account (email, last_name, first_name) VALUES ($1, $2, $3) RETURNING id`, &r.Email, &r.LastName, &r.FirstName).Scan(&r.ID) if err != nil { return errors.Wrap(err, "failed to insert user_account") } return nil } // GetUserAccountByPk select the UserAccount from the database. func GetUserAccountByPk(db Queryer, pk0 int64) (*UserAccount, error) { var r UserAccount err := db.QueryRow( `SELECT id, email, last_name, first_name FROM user_account WHERE id = $1`, pk0).Scan(&r.ID, &r.Email, &r.LastName, &r.FirstName) if err != nil { return nil, errors.Wrap(err, "failed to select user_account") } return &r, nil }
4JNJMBSBQQSPBDI Ø YP Ø IUUQTHJUIVCDPNLORYP Ø 4VQQPSUJOH1PTUHSF42-.Z42-0SBDMF.442-4FSWFS 42-JUF Ø
EHXJTIFBWJMZJOTQJSFECZYP Ø TRMCPJMFS Ø IUUQTHJUIVCDPNWBUUMFTRMCPJMFS Ø 4VQQPSUJOH1PTUHSF42-.Z42-.442-4FSWFS Ø 3BJMTTUZMF EBUBCBTFSTU03.
'FBUVSF Ø EHXDBOQSPQFSMZEFUFDUDPNQPTJUFQSJNBSZLFZT BOEBVUP HFOFSBUJOHDPMVNOT Ø SFUVOJOHBVUPHFOFSBUFEAVVJEA
ACJHTFSJBMA FUD Ø EHXIBTDPOHVSBCMFUZQFNBQQJOHCFUXFFO1PTUSHF42-BOE (P Ø EHXQSPWJEFTDVTUPNUFNQMBUFGFBUVSF Ø EFWFMPQFSTDBOVTFUIFJSPXOUFNQMBUFGPSTUSVDU NFUIPE BOEGVODUJPO
/PU'FBUVSF Ø EHXEPFTOUDBSFBCPVUSFMBUJPOT Ø POMZTUSVDUXJUIA$SFBUFANFUIPE BOEGVODUJPOXIJDI TFMFDUTSPXCZ1,BSFHFOFSBUFE
Ø *UTUBZTCFJOHNJOJNBMUBCMFSPXEBUBHBUFXBZ Ø EHXPOMZTVQQPSUT1PTUHSF42- Ø XFBSFDVSSFOUMZOPUVTJOHPUIFS3%#.4PUIFSUIBO 1PTUHSF42-
XIZ
"CJUPGIJTUPSZ Ø 8FSTUTUBSUFECVJMEJOHUIFQSPEVDUXJUIIBOEDSBGUFESBX42- Ø CBDLJO (PCBTFE DPEFSTU03.MJCSBSJFTBSFCJUTIBLZ Ø SFFDUJPOTFWFSZXIFSF
HFOFSBUFE42-OPUBMXBZFDJFOU Ø TJODF*DBNFGSPN%KBOHP03. 42-"MDIFNZXPSME *LOPX 03.JTHSFBUJONBOZXBZT Ø CVU*UIPVHIUNBZCFDPEFSTU03.JTOPUGPS(PBUUIBU NPNFOU Ø TUBSUFEXSJUJOHSBX42-GPSPVSQSPEVDU Ø NPRBEB BOE*GFMUQSFUUZDPOEFOUXSJUJOHDPNQMFY42- Ø IPXFWFS JUXBTFYUSFNFMZSFQFUJUJWF CPSJOH BOEFSSPSQSPOFUP DSFBUFTJNQMF42- Ø QSPCMFNXBTOPUDPNQMFY42- CVUSBUIFSTJNQMF BOETNBMM42- XJUIMPUTPGDPMVNOT Ø BUUIFTBNFUJNF XFBQQSFDJBUFEIPX03.IBWFCFFOTBWJOHPVS UJNF
%FOFQSPCMFN Ø %FOFQSPCMFNXIJDIXFTIPVMETPMWF Ø NBOVBMMZXSJUJOHJOTFSUSPXTFMFDUCZQL42-BSFFWJM Ø DPMT BSHT BOEQMBDFIPMEFSTIBWFUPCFFYBDUMZJOPSEFS
Ø UIFNPTUGSFRVFOUQBUUFSO JOPVSQSPEVDU JODMVEJOH UFTUEBUBQSFQBSBUJPO Ø TJODFPVSQSPEVDUEPFTOUZFUSFBMMZIBWFBOBMZUJDTGFBUVSF XJUIDPNQMFYEBUBNBOJQVMBUJPO Ø %FOFQSPCMFNTXIJDIXFMFBWFVOTPMWFE Ø XSJUJOH42-XJUINVMUJQMFKPJOT DBTFFYQSFTTJPO BOEDPNQMFY QSFEJDBUFT Ø PGBMM42-JOPVSQSPEVDU Ø UIJTJTXIFSFSBX42-SPDLT Ø EZOBNJD42-DPOTUSVDUJPOEFQFOEJOHPOVTFSJOQVU Ø NBZCFXFTIPVMEVTFRVFSZCVJMEFS CVUOPUZFUJNQMFNFOUFE XIJDINFBOTOPUUIBUOFDFTTBSZBUUIFNPNFOU
IPX
IPX Ø IUUQTHJUIVCDPNBDIJLVEHX Ø 6TFGVMJGZPVVTFXJUIHPHFOFSBUFDPNNBOE
%FNP
2"
2" 8FBSFIJSJOH