\非公式/ Go Conference 2022 Spring スポンサー企業4社 アフタートーク 登壇資料 https://andpad.connpass.com/event/243953/
細かすぎて伝わらないGo小ネタ集 アンドパッド tomoki harada
The original author of Go gopher is Renée French.This Gopher was made by tomoki harada.
View Slide
はじめに
これから発表する内容は個人の見解であり所属する組織の公式見解ではありません
細かすぎて伝わらないGo小ネタ集ANDPAD inc.tomoki.harada (tomtwinkle)
建設業界などのホワイトボードを置き換える
なのですが
理想:SaaSを使って業務をDX、データはSaaSで完結現実:既存の業態でも扱えるようにカスタマイズ
よくある要望「Excelで出力」
1つ目
https://xuri.me/excelize/ja/
https://github.com/qax-os/excelize
Intex値からExcelカラム名に変換するhelperを用意
よし準備は万端だ
我々が想像するExcel
実際に要望されるExcel
背景の罫線は消して欲しいセル結合レコードのgroup毎にcolumnを表示するcolumnが途中から縦で現れる案件毎に背景色を変えたいセル結合列ごとに変わる幅出力したい表現が1次元増えてる!!セル結合外枠の罫線の太さを変えたい
Excelのレイアウトと値の出力を分けて考える
それぞれのパーツを整理して個別にレンダリング処理を実装しよう
group header componentgroup records component itemheadercomponentitem records componentcalendar header componentouter frame component
実は2つ注意点があります
1つは外枠の罫線についての注意点
出来上がったレイアウトがこちら
想定するレイアウト
どうすべきか
StreamWriterの問題
https://xuri.me/excelize/ja/stream.html
https://xuri.me/excelize/ja/performance.html
レイアウトと値の書き込み分離したのもStreamWriterを使用したかったからですが……
Styleが複雑すぎる場合StreamWriterで値が書き込めません。2020/09/14時点の情報です。最新版では未確認。
詳しいExcelizelianの人教えて下さい><
2つ目
「データ出力」
encoding/csvあるしCSV出力は余裕でしょ
「CSVはExcelで読みたいのでShift-JISで出力お願い!」
x/text/transform#Transformerで、簡単に行けるな……?
UTF-8 -> Shit-JIS
https://go.dev/play/p/4KBqmrB_qdD
https://teratail.com/questions/106106
とある日
「極々稀にコケるFlakyTestあるので直そう」
どうも4096byte付近で文字化けが発生しているらしい
あっ
https://cs.opensource.google/go/go/+/master:src/bufio/bufio.go;l=19
● csv writerはbufioに依存● default buffer size = 4096● rune writerに渡されるbyte配列は4096byteで途切れる
マルチバイト文字が分断された場合に変換可能かどうか判断出来ない
解決策
● buffer sizeを指定する
https://cs.opensource.google/go/go/+/master:src/encoding/csv/writer.go;l=37buffer sizeを指定できない
● csvに変換してからShift-JISに変換する
https://github.com/golang/go/issues/51746
● tranform.Transformerを自作する
作りましたhttps://github.com/tomtwinkle/garbledreplacer
学びx/text/transform便利だけどかなり癖つよ
群雄割拠のSaaSNo1であり続けるために泥臭いきめ細かな対応を心がけていきたい所存です
ご清聴ありがとうございました