最近、embulkをいじる機会があって、色々と思うところがあったので書いておく。 今回わたしが使ったケースではembulkのINPUTはバッチが作ったJSONL形式のファイルで、OUTPUTがMySQLのDBである。 OUTPUT先のDBのデータはAPIから専ら参照用に作られ、APIがその…
Goはヌルポしないという事実に驚愕してしまった もう言いたいことはタイトルがすべてなのだが、Goはnilからメソッドを呼んでもnil ponterでパニックになったりしない。以下のGoのプログラムでmain()関数のローカル変数fはnilだが、f.IsNull()などのメソッド…
Pythonにもblackというgofmtみたいなコードフォーマッターがあった Goを書いていると、gofmtコマンドを叩くとインデントやTrailing whitespaceなどを勝手に直してファイルを書き換えてくれる。 わたしがPythonを使ってきてGoを覚え始めたときにこれは便利だ…
目次 mapの競合状態とは何か? どうしたらいいのか? sync.RWMutexを使う 共有ロックと排他ロック sync.Mapを使う atomic.Valueを使う ロックとCompare and swap さいごに 感想 mapの競合状態とは何か? GoのmapはあるgoroutineでReadしているときに別のgoro…
NULLを許可する列をScanするときは要注意 database/sqlでMySQLのデータを取得するとき、NULLを許可する列の扱いがちょっと要注意だった。まず、こういうNULLを許すテーブルにデータを入れる。 CREATE TABLE `students` ( id INT PRIMARY KEY, active TINYINT…
エンジニアをやっているとコードレビューをしたり受けたりすることが日常的ですが、レビューは人間関係に絡むのでお悩みの職場も多いのではないでしょうか。そんな中、ぼやっと思ったことをここに書いておきます。 人間関係が浅いうちはレビューコメントにタ…
Goのmapやスライスを操作するコードを書いていて、やたらとレビュー指摘をもらったのでここにダメな操作と大丈夫な操作をメモしておく。例えば、こういうコードは余計なことをしているので直しなさいという指摘をもらった。 package main import "fmt" func …
docker-compose.ymlを適当に書いてPythonを動かすDockerコンテナを作りたいなと思い、docker-compose.ymlとDockerfileを揃えたが docker-compose up してもプロセスが終わってしまう。 $ docker-compose build ... Successfully built 95a7c527a5d9 Successf…
Caret requirements (キャレット要件) poetryのpyproject.tomlでPythonパッケージのバージョンを指定する記号の意味がよくわからなくて調べた。特に頻出して意味がわからなかったのが [tool.poetry.dev-dependencies] coverage = "^4.5" flake8 = "^3.5"この…
データコンバートは楽しい この度データコンバートの仕事が来たので、そのときに行ったチューニングのことをここにメモしておく。 データコンバートの仕事は何度か経験があるが、チューニングに結構頭を使う仕事なので好きな方だ。 さて、前置きはほどほどに…
こんばんは。皆さんは老害が嫌いですか? 今日は老害になりたくない人のために、わたしが見つけた老害化しているかどうか確かめる基準をご紹介します。 相手に言葉合わせをさせる それは、「相手に言葉合わせをさせていたら危ない」という基準です。 誤解し…
見切れててよくわかりません 真っ白な徳利の口がカツヒコの鼻にかかっている様が富士の日の出に匹敵する景観です ほおをつまんで難しい顔をしている 遠藤周作でないことは脇にある徳利から明らかだ 小指を立ててビールを飲む それがまちやスタイル
一年前は、自分が必要だった 一年前に転職してきたときは、自分が必要とされている実感があった。 あの頃は積み上がったPython3とGoのコードベースをハンマーで叩き割り、火炎放射を放ち、焼畑に種を蒔き、苗を育てる段階だった。 ジョブキューに詰まるバッ…
Goのassertを使って「だいたい結果は100」みたいなテストしたいときはassert.InEpsilon。
Goにはimageという画像を処理するライブラリがあるので(やり方を知っていれば)簡単に絵が描ける。 わたしは知見が無く丸一日かかってしまた・・
この記事のソースコードはこちら ユニットテストを追加する頃合いに 文字列とファイルに対応した文字数カウント機能を作ったところで、これらのユニットテストを作る頃合いになってきた。 また、リクエストを受け取ってレスポンスに書き込むハンドラ関数のテ…
ファイルを読み込んで文字数を数える機能を追加する。 bufio.Reader.ReadRune()を使って対処。
はじめてのwebアプリのバグを直したところで、今度はJSONで結果を返す機能も追加してみる。 json.Marshalは構造体の公開フィールドしか出力してくれないので注意。
文字数カウントのwebアプリは、以下のバグがあるので直す。
Goも基本的な構文をだいたい覚えたので簡単なwebアプリを作ってみる。
Pythonで「ほっけ」という漢字をprintに渡すとどうなるか試した。 「ほっけ」はサロゲートペアの文字である。 Python2は寛容に処理してくれるが、Python3は原則としてサロゲートペアを許さないので、エラーオプションに許可するよう指定する。
Goは文字をUnicodeコードポイントで扱い、runeというデータ型を用意している。 unicode/utf8モジュールを使うとサロゲートペアが含まれる文字列でも安全に処理できる。
「2016年版Goのベストプラクティス」という記事を読んでいてgo installを使うことが推奨されていることを知った。
Goのプログラムを見ていて、何年ぶりか分からないくらい久しぶりにラベル付きbreakを見かけたので、せっかくなので試した。
Goで実行環境のメモリ使用量を調べるときはruntime.MemStatsが使える。 また、pprofモジュールを使うとより視覚的なビューを利用できる。
ポインタのことがやっと分かってきた感ある
ポインタのことがどうしても分からないのでまた考えてみたが、単純に「ポインタを使うと同じものを指す」とだけ覚えておけば良いんじゃないかと思うようになった。
ポインタがわからない。代入と関数を使った場合で色々試して(ちょっとは)理解を深めた。
GoでPythonのargparseみたいなサブコマンドを処理したい場合はflag.NewFlagSetというやつを使えば良いらしい。 Goでのやり方はこのページでドン!なんだけど。忘れないようにメモ。 [http://blog.ralch.com/tutorial/golang-subcommands/:title]
『プログラミング言語Go』のスピナー 予約語「go」を使うとメインgoroutineと別のgoroutineで動かせる 『プログラミング言語Go』の「ゴルーチンとチャネル」という章を読んでいて、メインルーチンの処理中にスピナーを回すサンプルコードが出てきたので自分…