Upgrade to Pro — share decks privately, control downloads, hide ads and more …

細かすぎて伝わらないGo小ネタ集

 細かすぎて伝わらないGo小ネタ集

\非公式/ Go Conference 2022 Spring スポンサー企業4社 アフタートーク
登壇資料
https://andpad.connpass.com/event/243953/

細かすぎて伝わらないGo小ネタ集
アンドパッド tomoki harada

8847086af047cbf895ab3277b59529fe?s=128

ANDPAD inc

April 28, 2022
Tweet

More Decks by ANDPAD inc

Other Decks in Technology

Transcript

  1. The original author of Go gopher is Renée French. This

    Gopher was made by tomoki harada.
  2. はじめに

  3. これから発表する内容は 個人の見解であり 所属する組織の公式見解で はありません

  4. 細かすぎて伝わらない Go小ネタ集 ANDPAD inc. tomoki.harada (tomtwinkle)

  5. None
  6. 建設業界などの ホワイトボード を置き換える

  7. なのですが

  8. 理想:SaaSを使って業務を DX、データはSaaSで完結 現実:既存の業態でも扱えるよ うにカスタマイズ

  9. よくある要望 「Excelで出力」

  10. 1つ目

  11. None
  12. https://xuri.me/excelize/ja/

  13. https://github.com/qax-os/excelize

  14. Intex値からExcelカラム名 に変換するhelperを用意

  15. よし準備は万端だ

  16. 我々が想像するExcel

  17. None
  18. 実際に要望されるExcel

  19. None
  20. 背景の罫線は消して 欲しい セル結合 レコードのgroup毎に columnを表示する columnが途中か ら縦で現れる 案件毎に背景色 を変えたい セル結合

    列ごとに変わる幅 出力したい表現が1次元 増えてる!! セル結合 外枠の罫線の太さ を変えたい
  21. Excelのレイアウトと値の出 力を分けて考える

  22. None
  23. None
  24. それぞれのパーツを整理し て個別にレンダリング処理 を実装しよう

  25. group header component group records component item header compo nent

    item records component calendar header component outer frame component
  26. 実は2つ注意点があります

  27. 1つは外枠の罫線について の注意点

  28. None
  29. 出来上がったレイアウトがこ ちら

  30. None
  31. None
  32. 想定するレイアウト

  33. None
  34. どうすべきか

  35. None
  36. StreamWriterの問題

  37. https://xuri.me/excelize/ja/stream.html

  38. https://xuri.me/excelize/ja/performance.html

  39. レイアウトと値の書き込み 分離したのも StreamWriterを使用した かったからですが……

  40. Styleが複雑すぎる場合 StreamWriterで値が書き 込めません。 2020/09/14時点の情報です。最新版では未確認。

  41. 詳しいExcelizelianの人教 えて下さい><

  42. 2つ目

  43. 「データ出力」

  44. None
  45. encoding/csv あるし CSV出力は余裕でしょ

  46. 「CSVはExcelで読みたい のでShift-JISで出力お願 い!」

  47. x/text/transform#Transformer で、簡単に行けるな……?

  48. UTF-8 -> Shit-JIS

  49. https://go.dev/play/p/4KBqmrB_qdD

  50. https://teratail.com/questions/106106

  51. とある日

  52. 「極々稀にコケるFlaky Testあるので直そう」

  53. どうも4096byte付近で文 字化けが発生しているらし い

  54. あっ

  55. https://cs.opensource.google/go/go/+/master:src/bufio/bufio.go;l=19

  56. • csv writerはbufioに依存 • default buffer size = 4096 •

    rune writerに渡されるbyte 配列は4096byteで途切れる
  57. マルチバイト文字が分断さ れた場合に変換可能かどう か判断出来ない

  58. 解決策

  59. • buffer sizeを指定する

  60. https://cs.opensource.google/go/go/+/master:src/encoding/csv/writer.go;l=37 buffer sizeを指定で きない

  61. • csvに変換してからShift-JIS に変換する

  62. https://github.com/golang/go/issues/51746

  63. • tranform.Transformerを自 作する

  64. 作りました https://github.com/tomtwinkle/garbledreplacer

  65. None
  66. None
  67. 学び x/text/transform便利 だけどかなり癖つよ

  68. None
  69. 群雄割拠のSaaS No1であり続けるために 泥臭いきめ細かな対応 を心がけていきたい所存です

  70. ご清聴 ありがとうございました