はじめに Goにおける型によってSQLインジェクションを防ぐ方法という記事でsafesqlというライブラリで行っているGoの型をうまくつかってSQLインジェクションを防ぐ方法を解説しました。 この他にも型を使って何かを制限する方法ということで、本記事では構造体リテラルでフィールド指定を強制する方法について解説します。 構造体リテラル 構造体リテラルは、次のように構造体の値をリテラルで記述したものです。
はじめに この記事は、海外サイトhttps://tutorialedge.net/golang/go-grpc-beginners-tutorial/ の内容をベースに一部修正を加えたものです。この記事を読み進めることでGoでシンプルなgRPCクライアントとサーバーを構築することができるようになります。 ※gRPC公式より抜粋(また、以下の説明でも一部参考にしています。) gRPCとは? gRPCはGoogleによって開発されたRPCフレームワークです。 RPCはRemote Procedure Callの略で、逐語的に訳すと「遠隔手続呼び出し」となります。これはすなわち、「あるプログラムがネットワーク上の異なる場所に配置されたプログラムを呼び出して実行すること」と読み取れます。 公式による定義 サービス定義 多くのRPCシステムと同様に、gRPCはサービスを定義するという考えに基づいてお
本当はGo月Go日に書きたかったけど、ビール飲んで寝てしまったの今日(Go月6日)になりました。 Goのインタフェースは、明示的に実装する必要がなく、インタフェースが定義するメソッドリストをその型が持っていれば、そのインタフェースとして振る舞えます。 構造体に埋め込んだ型が持つメソッドについても、埋込み先の構造体のメソッドの一部としてみなすことができるため、インタフェースの実装の頭数に入れることができます。 インタフェースの実装と埋込みの関係についてはインタフェースの実装パターンという記事に詳しく書いているのでそちらを参考にしてください。 さて、埋込みによって構造体にインタフェース実装させるパターンは思ったよりも使えます。なぜなら、埋込みは単なる匿名フィールドに対して、インタフェースは実装を隠し、型を抽象化ができるからです。このパターンは、共通部分を抜き出して、それを複数の型で使う場合に非
Go 1.13がリリースされ、Go 1.12 時代から Go Modulesを利用していたプロジェクトでは、go.modファイルのGoバージョンを変更したいですね。 go.modファイルはgo mod editで変更を加えることができます。go helpで使用方法を見ると、editing flagsというflagを指定することでどのように変更を加えたいかを指定します。 $ go help mod edit usage: go mod edit [editing flags] [go.mod] Edit provides a command-line interface for editing go.mod, for use primarily by tools or scripts. It reads only go.mod; it does not look up information
Dockerfileとは Dockerイメージの中身を定義する設定ファイルになります. Vagrantを利用した方がある方は,Vagrantfileを思い出して頂くとイメージしやすいかも知れません. 題材 https://github.com/tozastation/gRPC-Training-Golang を使って説明していきます.APIサーバのイメージ作りです. Dockerfileに記載する流れ ベースとなるイメージの指定 プログラムを動作するのに必要なパッケージの導入 ポート開放 プログラム起動コマンド Dockerfile(Multi Stage Build) 以下Dockerfileの例になります. FROMが2箇所あると思います. イメージを2個取得していることになりますが,これには理由があります. golang:latestというイメージの中にはGoの実行環境が入ってる訳だ
概要 go-playground/validatorを用いたバリーデーションパターンをREST APIのリクエストパラメータでよく使われそうなケース別にまとめてみたのでご参考ください。 validatorはプリミティブな変数単位でも使用できますがここではリクエストパラメータを想定した構造体をメインに書いています。 go-playground/validatorとは https://github.com/go-playground/validator バリデーションに特化したgolangのOSS。 バリデーション対象の構造体にvalidateタグを付けてちょっとしたDSLっぽくバリデーション内容が書けるのが特徴的。 チェックできる内容は必須パラメータの有無、数値、文字数の範囲、任意のフォーマット等々。 validateで定義されている予約語についてGoDocを参照 自分でバリデーション用の予
新しめの言語では例外を投げることを推奨しない言語が出てきているように思えるが、そうした言語が例外をどう考え、例外の代わりにどのようなアプローチを奨励しているかを調べてみた。 本稿での「例外」とは、Javaのthrow構文のようにスコープを脱出してcatchされるまでエスカレートされる「投げる例外」のことを指し、エラーを表現したオブジェクト(エラーオブジェクト)については「例外オブジェクト」と呼び区別するものとする。(この2つを同一に扱うと、例外を使わないということは、エラーオブジェクトは使わないの?という話になるため) Go言語 - 例外はコードを複雑にする Go言語では、通常、エラーは戻り値として扱われる。(本当の本当に例外的なエラーのためにpanic, recoverがあるが、ほとんど使われることがないように見受けられる。) 例外がないGoでは、どう呼び出し元にエラーを伝えているかとい
Enterprise Business Rules ビジネスルールの為のデータ構造を持ったオブジェクト。 データの実態を表す場所。 Application Business Rules ビジネスルールを操作する場所。 つまりこのアプリケーションで何ができるかを実践します。 Interface Adapter 外部からの入力、データの永続化、表示を担当する場所 Frameworks & Drivers Webフレームワーク、DB操作の実際に担うソース、 フロントエンドのUIなどがここに所属しています。 外側のレイヤーの要素を直接参照してはならない 上記の図におけるこの矢印は依存を表しており、 内側のレイヤーから外側のレイヤーの要素への依存を禁じます。 ここでいう依存とは要素(構造体、変数など)への直接参照をさせないということです。 では外側のレイヤー要素を参照せざる得ないは、どうするのでしょ
こんにちはpo3rinです。Vue.js Advent Calender 2018 9日目の記事です。 8日目の記事は vue.js(nuxt.js) の plugin はとても便利 でした。 11月にフリーの案件で Vue.js + Go言語で画像アップロード機能のあるCMSを作りました。Vue.jsでの実装の際には npmモジュールである vue2-dropzone を使うと、Vue.js にとって便利な機能が提供されており、すぐにアップロード機能が作れました。なので今回は Vue.js + Go言語 で画像アップロードを行う機能の実装をハンズオン形式で紹介していきます。 今回は Vue.js のアドベントカレンダーとしての投稿なので、Go言語の実装を飛ばしたい方向けに、Go言語のインストールが不要になるように、すでにDocker環境を用意してあります。せっかくなので今回は Docke
シンデレラがGoで書かれていたら。 という妄想です。 少し長いですがお付き合いください。 TL;DR ソースはここにおいてます https://github.com/lboavde1121/cinderella あらすじ 以下あらすじ。 シンデレラは、継母とその連れ子である姉たちに日々いじめられていた。 あるとき、城で舞踏会が開かれ、姉たちは着飾って出ていくが、シンデレラにはドレスがなかった。 舞踏会に行きたがるシンデレラを、不可思議な力(魔法使い、仙女、ネズミ、母親の形見の木、白鳩など)が助け、準備を整えるが、魔法は午前零時に解けるので帰ってくるようにと警告される。 シンデレラは、城で王子に見初められる。 零時の鐘の音に焦ったシンデレラは階段に靴を落としてしまう。 王子は、靴を手がかりにシンデレラを捜す。 姉2人も含め、シンデレラの落とした靴は、シンデレラ以外の誰にも合わなかった。 シン
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く