Lapis Lazuli

technical blog for web developer

GO

【Go】エラー処理にxerrorsを使う

GO

Goでエラー処理する事は頻繁に出てくると思います。 使われるのは大体標準パッケージのerrorsを使う事が多いと思いますが、Goには準標準パッケージとしてxerrorsがあります。 最近使ってみたら良かったので、今回はxerrorsについて書いていきます。 何がメリ…

【Go】ロジックより型から読み取れるようにする

GO

最近、コードレビューで突っ込まれて「なるほどな〜」と思った事があります。 今まであまり意識したことは無かったのですが・・・型からコードの意味を読み取れるようにする。ということです。 熟練のエンジニアの方からしたら「当然だろ」と思われるかもし…

【Go】newは(ほぼ)構造体にしか使わない

GO

goでmakeと並んで使うnew。 makeは参照型のみでしたが、makeと違ってあらゆる型に使えます。 対象のポインタを取得するのに使う訳ですが、実際の開発用途としては構造体にしか使いません。理由としては、構造体を値型のまま宣言して使う事がないからです。 n…

【Go】GoはORMを使わないのが普通

GO

4月になって新職場で仕事を開始して、Goでゴリゴリとコードを書いています。 その中で発見したことが一つあります。 GoはSQL直接書く。 以前、初めてGoで開発していた時には「さすがに標準のdatabaseパッケージでSQL直書きはな・・・」と思い、普通にgormを…

「プログラミング言語Go完全入門」を読んで

GO

5月末までで限定公開されている「プログラミング言語Go完全入門」を一通り読んでみました。tech.mercari.comGo界隈では有名な方(何度かgolangtokyoでお会いになりました)が作成したスライドになります。 読んだ感想なのですが、一言で言うと、体系的にまと…

【Go】テンプレートを使いこなす

GO

久しぶりプログラミングの記事を。 結構Goの記事書いたなと思っていたのですが、標準パッケージの一つであるtemplateについては触れて来なかったなと。 なので今回はtemplateについて。 template 文字通り、テンプレートを読み込んでフロント側に渡す機能を…

【Go】contextの使い方を学ぶ

GO

今回は久しぶりにGoについての話を。 Goにはcontextという、android開発でよく使われるものと全く同じ名前のパッケージがあります。 直訳すると文脈という意味なのですが・・・正直何のこっちゃと感じると思います。 contextの機能 概要は公式ドキュメントに…

【Go】interfaceの使い所

GO

最近interfaceについて詳しく使う機会があったので、今回はinterfaceについて。 interfaceとは 以前もちょこっと書いたけど何でも入る型です。自分の場合はjson.Marshalするときによく使います。というかここでしか使ったことがありませんw mapの値の型をin…

【Go】rune型という見慣れない型

GO

以前、謎のrune型に遭遇しました。 ルーンと読むのですが、名前がカッコいいので印象に残りましたw それは文字列を操作していた時に起こった runeを初めてみたのはfor rangeで文字列を取り出していたときです。 mojiretu := "abcdefgh" for _, v := range m…

【Go】スライスの仕組みを学ぶ

GO

普段何となく使っていたスライスですが、今回はその仕組みを詳しく勉強してみました。 スライスとは 簡単に言うと、いわゆる可変長配列です。他言語だとListが近いイメージでしょうか。 ここらへんは以前の記事を参照してもらえると幸いです。 スライスの挙…

【Go】配列を検索する

GO

GoではPHPのin_arrayみたいな一発で配列にあるかどうか判別する関数は存在しません。 なので普通に書いて実装していくことになります。 list := []int{0, 1, 2, 3} target := 1 for _, v := range list { if v == target { //一致したときの処理 } } 単純にf…

【Go】Goで競技プログラミング(sortパッケージ)

今回はsortパッケージを使ったのでsortに関して。 ひたすらsliceをsortしたいときにおすすめ。 sliceのソート sortパッケージは主に型に応じたソート関数が用意されています。 sort.Ints sort.Strings sort.Float64s これを使うだけで昇順にソート完了。これ…

【Go】Goで競技プログラミング(bufio.Scannerを使って入力を取得)

bufioを使う理由 前回はScanを使って入力の取得を行いましたが、今回はbufioを使う方法を書きたいと思います。 bufioは一言で言うと、一行ずつ入力を取得する関数です。 Scanと似ていますが、こちらのほうが負荷が低いので早く実行出来ます。 少ない桁数なら…

Goで競技プログラミングを戦う

競技プログラミングで他の言語を使う 競プロをかじったことのある人には周知の通り、C++が主流になっていて、AtCoderも上位ランクはC++ばかりです。 では他の言語はダメなのかと言われると、少なくとも高位の、それこそ赤とかにならない限りは問題ないと考え…

【Go】Goで競技プログラミング(標準入力について)

競技プログラミングでのGo 前回に続き、Goで競技プログラミングを攻略しているので、競プロをやってる人にはおなじみの標準入力から文字列を取得する方法を書きます。 僕はGoで書いているのでGoのやり方になりますが、Goは他の言語に比べると文字列を扱う機…

【Go】正規表現の使い方

GO

今回はGoの正規表現の扱いについてです。 Goにも他の言語と同様、正規表現を扱うパッケージのregexpというものが標準で組み込まれています。 import "regexp" これで準備完了です。 文字列のマッチングを行う 正規表現を使うシーンで一番多いのがこれだと思…

【Go】jsonを扱う

GO

今回はJSONの扱いについて。大体どの言語にもJSONを扱う関数があるのですが、Goにもちゃんと標準パッケージ内にあります。 まずはパッケージをインポートしておきましょう。 import ( "encoding/json" ) デコード jsonのデコードは超簡単 json.Unmarshal([]b…

【Go】Go言語が2番目の言語に最適な理由

GO

Goの記事多い気がしますが、今回もGoです。 今回はGoが2番めに手を出すのにいいなーと思ったので記事を書きました。 なぜ2番目? ってこのタイトルで思ったのではないでしょうか。 何故かというと、Web初心者とかが最初に手を出す言語ではないからです。 私…

Goは動的と静的言語両方の長所をもってると思う点

GO

Goの記事多めですが、今回もGoでいきます。 晴れて仕事で一通り開発が終わったので、今回はGoにに関して振り返ってみようと思います。 言語仕様がシンプル 一番印象に残ったのは、とにかく言語仕様がシンプルだなと。 クラスもないし、継承もないです。 行末…

【SQL】大量のinsert処理DBに投げたときに時間を短縮する方法

それは突然起きた・・・ こんにちはユウスケです。 ちょっと前に、大きめのCSVをDBにインポートする処理を仕事で作りました。 処理自体はGoでCSVを1行ずつ読み取ってデータベースにinsertするというシンプルなものでしたが・・・とてつもなく遅いという問題…

【Go】デプロイしたときにnet/httpでハマったこと

最近GoでAWSにデプロイしてハマったのでそのときの事を。 サーバー起動でハマる まずGoでWebサーバーを立てるときは、net/httpパッケージを使うと思います。 他のルーティングを行うパッケージを使っていても基本的なしくみは同じです。 私の開発環境(mac)…