Submit Search
Upload
メルカリ カウルのマスタデータの更新
•
2 likes
•
2,451 views
Takuya Ueda
Follow
golang.tokyo#10で発表した資料です。 https://golangtokyo.connpass.com/event/70162/
Read less
Read more
Technology
Report
Share
Report
Share
1 of 23
Download Now
Download to read offline
Recommended
そうだ、Goを始めよう
そうだ、Goを始めよう
Takuya Ueda
WebAssembly with Go
WebAssembly with Go
Takuya Ueda
Goにおけるバージョン管理の必要性 − vgoについて −
Goにおけるバージョン管理の必要性 − vgoについて −
Takuya Ueda
Go Friday 傑作選
Go Friday 傑作選
Takuya Ueda
Google Assistant関係のセッションまとめ
Google Assistant関係のセッションまとめ
Takuya Ueda
GAE/Goとsyncパッケージ
GAE/Goとsyncパッケージ
Takuya Ueda
RSGT参加レポート
RSGT参加レポート
Noriyuki Nemoto
プロトタイピングで変わる開発プロセス 一休.comレストランの事例
プロトタイピングで変わる開発プロセス 一休.comレストランの事例
Tetsuya Takeda
More Related Content
What's hot
Introduction
Introduction
Takeshi Akutsu
サービスデザイン方法論実践編 第4回ペーパープロトタイピング-Prottのご紹介
サービスデザイン方法論実践編 第4回ペーパープロトタイピング-Prottのご紹介
Tetsuya Takeda
生産性を倍にしたハピネスチームビルディング
生産性を倍にしたハピネスチームビルディング
Yusuke Kojima
GoによるiOSアプリの開発
GoによるiOSアプリの開発
Takuya Ueda
Dev love hangarflight wintersortie-
Dev love hangarflight wintersortie-
toshihiro ichitani
組織と個人が内発的動機により継続的に成長するための施策
組織と個人が内発的動機により継続的に成長するための施策
Yusuke Kojima
GDC15エデュケーション報告 (in Japanese)
GDC15エデュケーション報告 (in Japanese)
syamane
Gceハンズオン20150411イン福岡
Gceハンズオン20150411イン福岡
Ryosuke Akahoshi
PyPro2の読みどころ紹介:Python開発の過去と現在
PyPro2の読みどころ紹介:Python開発の過去と現在
Takayuki Shimizukawa
Cloud functionsの紹介
Cloud functionsの紹介
Takuya Ueda
Cloud Functionsの紹介
Cloud Functionsの紹介
Takuya Ueda
CEDEC2015: ゲーム開発者教育の国際動向と実践報告
CEDEC2015: ゲーム開発者教育の国際動向と実践報告
syamane
エンタープライズにおける開発ツールの導入と活用推進
エンタープライズにおける開発ツールの導入と活用推進
グロースエクスパートナーズ株式会社/Growth xPartners Incorporated.
Namespace API を用いたマルチテナント型 Web アプリの実践
Namespace API を用いたマルチテナント型 Web アプリの実践
Takuya Ueda
初心者向けSpigot開発
初心者向けSpigot開発
Masafumi Terazono
Pythonを始めよう
Pythonを始めよう
shouta yoshikai
Visasq
Visasq
創史 花村
Kobe.py 勉強会 minecraft piスライド
Kobe.py 勉強会 minecraft piスライド
Masafumi Terazono
Hour of-code-2016冬-シンポジウム
Hour of-code-2016冬-シンポジウム
Yuta Tonegawa
Minecraftと連携するSlackちゃんという会話Botを作った話
Minecraftと連携するSlackちゃんという会話Botを作った話
Masafumi Terazono
What's hot
(20)
Introduction
Introduction
サービスデザイン方法論実践編 第4回ペーパープロトタイピング-Prottのご紹介
サービスデザイン方法論実践編 第4回ペーパープロトタイピング-Prottのご紹介
生産性を倍にしたハピネスチームビルディング
生産性を倍にしたハピネスチームビルディング
GoによるiOSアプリの開発
GoによるiOSアプリの開発
Dev love hangarflight wintersortie-
Dev love hangarflight wintersortie-
組織と個人が内発的動機により継続的に成長するための施策
組織と個人が内発的動機により継続的に成長するための施策
GDC15エデュケーション報告 (in Japanese)
GDC15エデュケーション報告 (in Japanese)
Gceハンズオン20150411イン福岡
Gceハンズオン20150411イン福岡
PyPro2の読みどころ紹介:Python開発の過去と現在
PyPro2の読みどころ紹介:Python開発の過去と現在
Cloud functionsの紹介
Cloud functionsの紹介
Cloud Functionsの紹介
Cloud Functionsの紹介
CEDEC2015: ゲーム開発者教育の国際動向と実践報告
CEDEC2015: ゲーム開発者教育の国際動向と実践報告
エンタープライズにおける開発ツールの導入と活用推進
エンタープライズにおける開発ツールの導入と活用推進
Namespace API を用いたマルチテナント型 Web アプリの実践
Namespace API を用いたマルチテナント型 Web アプリの実践
初心者向けSpigot開発
初心者向けSpigot開発
Pythonを始めよう
Pythonを始めよう
Visasq
Visasq
Kobe.py 勉強会 minecraft piスライド
Kobe.py 勉強会 minecraft piスライド
Hour of-code-2016冬-シンポジウム
Hour of-code-2016冬-シンポジウム
Minecraftと連携するSlackちゃんという会話Botを作った話
Minecraftと連携するSlackちゃんという会話Botを作った話
Viewers also liked
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?
Takuya Ueda
エキスパートGo
エキスパートGo
Takuya Ueda
AWSクラウドデータストレージ総論
AWSクラウドデータストレージ総論
都元ダイスケ Miyamoto
スマートスピーカー向けアプリのUX設計のコツ_UX JAM 21
スマートスピーカー向けアプリのUX設計のコツ_UX JAM 21
Miyachi Toshimitsu
検証にもとづくビッグデータの分析に最適な環境とは
検証にもとづくビッグデータの分析に最適な環境とは
Hortonworks Japan
Go mobileでモバイルアプリを作ろう
Go mobileでモバイルアプリを作ろう
Takuya Ueda
政府におけるオープンデータの取組
政府におけるオープンデータの取組
okfjevent
うしちゃん WebRTC Chat on SkyWayの開発コードw
うしちゃん WebRTC Chat on SkyWayの開発コードw
Kensaku Komatsu
Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2
Norito Agetsuma
Go静的解析ハンズオン
Go静的解析ハンズオン
Takuya Ueda
Static Analysis in Go
Static Analysis in Go
Takuya Ueda
goパッケージで型情報を用いたソースコード検索を実現する
goパッケージで型情報を用いたソースコード検索を実現する
Takuya Ueda
粗探しをしてGoのコントリビューターになる方法
粗探しをしてGoのコントリビューターになる方法
Takuya Ueda
条件式評価器の実装による管理ツールの抽象化
条件式評価器の実装による管理ツールの抽象化
Takuya Ueda
HTTP2 RFC 発行記念祝賀会
HTTP2 RFC 発行記念祝賀会
Jxck Jxck
Mobile Apps by Pure Go with Reverse Binding
Mobile Apps by Pure Go with Reverse Binding
Takuya Ueda
Go1.8 for Google App Engine
Go1.8 for Google App Engine
Takuya Ueda
Goにおける静的解析と製品開発への応用
Goにおける静的解析と製品開発への応用
Takuya Ueda
静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話
静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話
Takuya Ueda
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
Akihiko Horiuchi
Viewers also liked
(20)
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?
エキスパートGo
エキスパートGo
AWSクラウドデータストレージ総論
AWSクラウドデータストレージ総論
スマートスピーカー向けアプリのUX設計のコツ_UX JAM 21
スマートスピーカー向けアプリのUX設計のコツ_UX JAM 21
検証にもとづくビッグデータの分析に最適な環境とは
検証にもとづくビッグデータの分析に最適な環境とは
Go mobileでモバイルアプリを作ろう
Go mobileでモバイルアプリを作ろう
政府におけるオープンデータの取組
政府におけるオープンデータの取組
うしちゃん WebRTC Chat on SkyWayの開発コードw
うしちゃん WebRTC Chat on SkyWayの開発コードw
Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2
Go静的解析ハンズオン
Go静的解析ハンズオン
Static Analysis in Go
Static Analysis in Go
goパッケージで型情報を用いたソースコード検索を実現する
goパッケージで型情報を用いたソースコード検索を実現する
粗探しをしてGoのコントリビューターになる方法
粗探しをしてGoのコントリビューターになる方法
条件式評価器の実装による管理ツールの抽象化
条件式評価器の実装による管理ツールの抽象化
HTTP2 RFC 発行記念祝賀会
HTTP2 RFC 発行記念祝賀会
Mobile Apps by Pure Go with Reverse Binding
Mobile Apps by Pure Go with Reverse Binding
Go1.8 for Google App Engine
Go1.8 for Google App Engine
Goにおける静的解析と製品開発への応用
Goにおける静的解析と製品開発への応用
静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話
静的解析とUIの自動生成を駆使してモバイルアプリの運用コストを大幅に下げた話
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
Similar to メルカリ カウルのマスタデータの更新
docomo Developer Supportを活用しよう
docomo Developer Supportを活用しよう
Shinya Nakajima
楽天の中のわたしと勉強会
楽天の中のわたしと勉強会
Rakuten Group, Inc.
勉強会カンファレンス2012
勉強会カンファレンス2012
Hiro Yoshioka
勉強会カンファレンス2011、企業と勉強会
勉強会カンファレンス2011、企業と勉強会
Hiro Yoshioka
Microsoft MVP x Passion for community
Microsoft MVP x Passion for community
Rie Moriguchi
「アジャイル型開発におけるプラクティス活用リファレンスガイド」の勘所と活用方法
「アジャイル型開発におけるプラクティス活用リファレンスガイド」の勘所と活用方法
toshihiro ichitani
【schoo WEB-campus】なぜ、組織にデザインは必要なのか? 先生:菊池宏子
【schoo WEB-campus】なぜ、組織にデザインは必要なのか? 先生:菊池宏子
webcampusschoo
グリーで行われている勉強会とその特徴 ✕ 勉強会を主催してみた話
グリーで行われている勉強会とその特徴 ✕ 勉強会を主催してみた話
gree_tech
勉強会勉強会、DevLOVE関西
勉強会勉強会、DevLOVE関西
Hiro Yoshioka
「リアルISUCON」としてのモバイルオンラインゲーム開発
「リアルISUCON」としてのモバイルオンラインゲーム開発
KLab Inc. / Tech
「KPTの理論と実践」プロジェクトへの「ふりかえりカイゼン」の導入で学んだこと
「KPTの理論と実践」プロジェクトへの「ふりかえりカイゼン」の導入で学んだこと
ESM SEC
コミュニティ活動と企業の相互作用 ~コミュニティへの貢献と組織活動への還元~
コミュニティ活動と企業の相互作用 ~コミュニティへの貢献と組織活動への還元~
Masahiro Hidaka
私の熱いアジャイル活動、アジャカツ!始まります フフッヒ
私の熱いアジャイル活動、アジャカツ!始まります フフッヒ
You&I
Drupal on ibm_20191207
Drupal on ibm_20191207
Yasushi Osonoi
Bot frameworkでdocomo Developer Supportを活用しよう
Bot frameworkでdocomo Developer Supportを活用しよう
Shinya Nakajima
勉強会への一歩を踏み出すために
勉強会への一歩を踏み出すために
Akihiko Horiuchi
kintonecafefukushima-vol1-20161001
kintonecafefukushima-vol1-20161001
kintone papers
ふりかえりワークショップ@オープンラボ備後
ふりかえりワークショップ@オープンラボ備後
Shinsuke Abe
社内勉強会開催の足跡
社内勉強会開催の足跡
Ruketa
5th長崎QDG事例セッション2「集成塾 ~進化するエンジニアの自己研鑽~」
5th長崎QDG事例セッション2「集成塾 ~進化するエンジニアの自己研鑽~」
Yuta OGAWA
Similar to メルカリ カウルのマスタデータの更新
(20)
docomo Developer Supportを活用しよう
docomo Developer Supportを活用しよう
楽天の中のわたしと勉強会
楽天の中のわたしと勉強会
勉強会カンファレンス2012
勉強会カンファレンス2012
勉強会カンファレンス2011、企業と勉強会
勉強会カンファレンス2011、企業と勉強会
Microsoft MVP x Passion for community
Microsoft MVP x Passion for community
「アジャイル型開発におけるプラクティス活用リファレンスガイド」の勘所と活用方法
「アジャイル型開発におけるプラクティス活用リファレンスガイド」の勘所と活用方法
【schoo WEB-campus】なぜ、組織にデザインは必要なのか? 先生:菊池宏子
【schoo WEB-campus】なぜ、組織にデザインは必要なのか? 先生:菊池宏子
グリーで行われている勉強会とその特徴 ✕ 勉強会を主催してみた話
グリーで行われている勉強会とその特徴 ✕ 勉強会を主催してみた話
勉強会勉強会、DevLOVE関西
勉強会勉強会、DevLOVE関西
「リアルISUCON」としてのモバイルオンラインゲーム開発
「リアルISUCON」としてのモバイルオンラインゲーム開発
「KPTの理論と実践」プロジェクトへの「ふりかえりカイゼン」の導入で学んだこと
「KPTの理論と実践」プロジェクトへの「ふりかえりカイゼン」の導入で学んだこと
コミュニティ活動と企業の相互作用 ~コミュニティへの貢献と組織活動への還元~
コミュニティ活動と企業の相互作用 ~コミュニティへの貢献と組織活動への還元~
私の熱いアジャイル活動、アジャカツ!始まります フフッヒ
私の熱いアジャイル活動、アジャカツ!始まります フフッヒ
Drupal on ibm_20191207
Drupal on ibm_20191207
Bot frameworkでdocomo Developer Supportを活用しよう
Bot frameworkでdocomo Developer Supportを活用しよう
勉強会への一歩を踏み出すために
勉強会への一歩を踏み出すために
kintonecafefukushima-vol1-20161001
kintonecafefukushima-vol1-20161001
ふりかえりワークショップ@オープンラボ備後
ふりかえりワークショップ@オープンラボ備後
社内勉強会開催の足跡
社内勉強会開催の足跡
5th長崎QDG事例セッション2「集成塾 ~進化するエンジニアの自己研鑽~」
5th長崎QDG事例セッション2「集成塾 ~進化するエンジニアの自己研鑽~」
More from Takuya Ueda
静的解析を使った開発ツールの開発
静的解析を使った開発ツールの開発
Takuya Ueda
マスター・オブ・goパッケージ
マスター・オブ・goパッケージ
Takuya Ueda
オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選
Takuya Ueda
Gopher Fest 2017参加レポート
Gopher Fest 2017参加レポート
Takuya Ueda
Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析
Takuya Ueda
Goでwebアプリを開発してみよう
Goでwebアプリを開発してみよう
Takuya Ueda
GAE/GoでWebアプリ開発入門
GAE/GoでWebアプリ開発入門
Takuya Ueda
GAE/GoでLINE Messaging API を使う
GAE/GoでLINE Messaging API を使う
Takuya Ueda
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
Takuya Ueda
More from Takuya Ueda
(9)
静的解析を使った開発ツールの開発
静的解析を使った開発ツールの開発
マスター・オブ・goパッケージ
マスター・オブ・goパッケージ
オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選
Gopher Fest 2017参加レポート
Gopher Fest 2017参加レポート
Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析
Goでwebアプリを開発してみよう
Goでwebアプリを開発してみよう
GAE/GoでWebアプリ開発入門
GAE/GoでWebアプリ開発入門
GAE/GoでLINE Messaging API を使う
GAE/GoでLINE Messaging API を使う
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
Recently uploaded
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
Tetsuya Nihonmatsu
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
Matsushita Laboratory
2024 04 minnanoito
2024 04 minnanoito
arts yokohama
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
Sadao Tokuyama
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf
Ayachika Kitazaki
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
ssuser539845
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor
arts yokohama
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
arts yokohama
What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
2024 03 CTEA
2024 03 CTEA
arts yokohama
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
Shumpei Kishi
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
ssuser370dd7
Recently uploaded
(12)
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
2024 04 minnanoito
2024 04 minnanoito
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?
2024 03 CTEA
2024 03 CTEA
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
メルカリ カウルのマスタデータの更新
1.
The Go gopher
was designed by Renée French. The gopher stickers was made by Takuya Ueda. Licensed under the Creative Commons 3.0 Attributions license. メルカリ カウルの マスタデータの更新 2017年11月14日(火) @golang.tokyo #10
2.
自己紹介 上田拓也 @tenntenn 所属 コミュニティ活動 & Go ビギナーズ Go Conference 上田拓也 @tenntenn 2
3.
ソウゾウ エキスパートチーム 技術をアウトプットするところに技術は集まる ■ エキスパートチームとは? ●
50%以上の時間を技術コミュニティへの貢献に充てる ■ エキスパートチームの役割 ● 社内に新しい技術を取り取り込む ● 社外のコミュニティなどを通じて社会へ還元する ■ エキスパートチームの活動 ● カンファレンス・勉強会の開催/運営 ● 対外的な講演活動 ● 執筆、雑誌への寄稿、インタビュー ● 社内外での担当技術の普及推進 @tenntenn 担当:Go・GCP @mhidaka 担当:Android メンバー 3
4.
アジェンダ ■ メルカリ カウルのマスタデータ ■
大きなファイルを処理する ■ バイト列を変換する 4
5.
メルカリ カウルのマスタデータ 5
6.
Google App Engineを採用 6 https://goo.gl/ZzHDoW
7.
メルカリ カウルのマスタデータ 7 ■ 製品のカタログ情報 ●
本、CD・DVD、ゲーム ● 外部のデータを利用している ■ 毎日の更新バッチにて更新している ● データ提供元から毎日データをバッチで取得している ● データの提供形式はデータの種類によって違う ○ JSONやTSVなど ■ Cloud SQL (MySQL)にて管理 ● スケールする必要のない低いマスタデータはRDBで管理 ● スケールする必要のあるデータはCloud Datastoreで管理
8.
マスタデータ更新の例 8
9.
大きなファイルを分割して処理する 9
10.
マスタデータの更新 10 ■ TSV形式 ● 1行がRDBの1レコードを表す ●
大きいものは1ファイルが50MB以上 ■ Google Cloud Storage(GCS)に保存 ● 1日1回データ提供元から取得したデータをGCSに保存 ● 1日あたり十数個のTSVがGCS上に置かれる ■ Google App Engine(GAE)のcronジョブで更新 ● 定期的にTSVを取得し、RDBへデータを更新する ※ すべてのマスタデータがこうなっているわけではない ID 製品名 発売日 発売元 001 ほげ 2017年11月14日 会社A 002 ふが 2017年11月13日 会社B
11.
大きなファイルを扱う問題点 ■ URL Fetchの制限 ●
Google Cloud StorageにURL Fetch経由で接続 ● 32MB以上のファイルを一気に読めない ■ 分割して処理する必要がある ● どのように分割するのか? ● 一度メモリ上に確保して分割しても意味がない ● 固定長で分割していくしかない 11
12.
大きなファイルを処理する 12 ■ Task Queueを使う ●
更新順序に決まりがない ● 不要な外部キー制約を外す ● 冪等性を担保する ■ オフセットを指定して読み込む ● Google Clous StrageのRangeReaderの機能を使う ● 固定長に分割して処理する
13.
Task Queueによる処理 13
14.
TSVを分割する方法 14 ■ 固定長で分割する ● RDBにいれるデータなので1行のサイズの最大がおおよそ分かる ●
1レコードの最大サイズ+バッファで分割する ■ 1行ずつ処理する ● 固定長で分割するので行をまたぐ可能性がある ● 固定長に分割する際に若干被るように分割する ● 改行がくるまでバッファ分をはみ出て処理する ● 頭の部分は改行がくるまで読み飛ばす 001tほげt2017年11月14日t会社An 002tふがt2017年11月13日t会社Bn ...
15.
バイト列を変換する 15
16.
マスタデータの変換 16 ■ 変換の必要性 ● データ提供元の形式がUTF-8とは限らない ●
アプリ上で表示できるものとは限らない ○ 外字などを利用している場合 ● データ提供元のデータを改変して保存するわけにはいかない ○ 実行時に動的に変換する必要がある
17.
文字コードの変換 17 ■ x/text/encoding/japaneseを使う ● SJISやEUP-JPなどの文字コードに対応 func
main() { dec := japanese.ShiftJIS.NewDecoder() r := transform.NewReader(os.Stdin, dec) io.Copy(os.Stdout, r) } $ echo "ごーふぁー" | nkf --sjis | go run sjis.go ごーふぁー
18.
Reader x/text/transfomを用いる ■ transform.Transformerインタフェース ● ReaderとWriterを提供している ●
既存のReaderとWriterをラップし、間で変換を行う ● x/transform/encoding.Encoderも実装している 18 Reader Transformer Writer Transformer Writer Read Write
19.
Transformerを実装する ■ 実装はなかなか難しい ● 出力と入力で長さが違うかもしれない ●
出力と入力のバッファのサイズが足りないかもしれない ● EOFがくるかもしれない ● テストをしっかり行おう 19 type Transformer interface { Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) Reset() }
20.
詳しくはAdvent Calendarで!! 20
21.
バイト列の置換 ■ Replacer ● https://godoc.org/github.com/tenntenn/text/transform ●
Transformerを実装 ● 任意のバイト列を任意のバイト列に変換可能 21 func ExampleReplaceTable() { t := ReplaceStringTable{ "Hello", "Hi", "World", "Gophers", } r := transform.NewReader(strings.NewReader("Hello, World"), ReplaceAll(t)) io.Copy(os.Stdout, r) // Output: Hi, Gophers }
22.
まとめ 22 ■ 大きなファイルを処理する ● うまく分割し、並列に処理してやる ●
途中で変更するのは大変なので先にやっておくと良い ■ バイト列を変換する ● x/text/transformパッケージを用いる ● transform.Transformerの実装は難しい ● テストをしっかり行おう
23.
Thank you! twitter: @tenntenn Qiita:
tenntenn connpass: tenntenn 23
Download Now