Goのデフォルトパッケージのnet/httpでmiddlewareを定義し、 Railsで言うbefore_actionやCakePHPで言うbeforeFilter の処理を自前で実装してみます。 パターン 1 ダックタイピングによる実装。 http.Handleはhttp.HTTP(w http.ResponseWriter, r *http.Request)を 引数で受け取るのでw http.ResponseWriter, r *http.Request を受け取るメソッドを定義しておけばあとはダックタイピングで勝手にcallしてくれる。 package main import ( "fmt" "net/http" ) type HandlerProvider struct {} /*-------------------------------- * ダックタイピングで勝手にcal
Property Based Testing とは Property Based Testing は入力値を大量にかつランダムに生成し、テストコードが性質を満たしているかどうかを検証するテスト手法です。 ScalaCheck + ScalaTest で Property-Based Testing する(classmethod.jp) Property Based Testingでドメインロジックをテストする(gakuzzzzさん) testing/quick はやや物足りない Goの標準ライブラリにも似たような機能として testing/quick が用意されています。 Gopher Academy Blog に詳しく説明が書かれていました 。 ランダムな値を生成するといっても、実際には「0以上のintが欲しい」のような、一定の条件を満たした値が欲しいはずです。testing/quick
こんにちわ 外で作業するときに使用しているMacBookのパワーが足りなくてブラウザがもっさりしているので、 Qiitaの記事を探したり見たりするのをターミナルでできたら、作業スピード上がりそうじゃない?と思ったので作りました。 こんな感じです。 できること 記事の検索 入力したキーワードがタイトルに含まれている記事一覧を表示します。 今はまだ検索条件を指定できないが、これからできるようにしていく予定です。 検索結果の絞り込み 検索結果から更にキーワードによる絞り込みができます。 記事閲覧 browserを開いて閲覧するか、ターミナルに出力して閲覧するかを選択できます。 browserの場合はデフォルトブラウザが開きます。 terminalの場合は標準出力になります。 ただし、ブラウザで開くのはWindowsとMacのみ対応しています。 それ以外のOSは手動で開くか、terminalで見る
gormの使い方を自分向けにまとめました。適宜追加していきます。 基本的にこれがわかってたらなんとかなる。 そして大体公式ドキュメントに書いてあります! 以下のようなデータを用意して色々操作してみたいと思います。 # 初期状態 mysql> select * from persons; +----+------+-----+-------+---------------------+---------------------+ | id | name | age | hobby | created_at | updated_at | +----+------+-----+-------+---------------------+---------------------+ | 1 | A | 20 | NULL | 2018-10-04 11:13:35 | 2018-10-04 11:
なぜまとめようとお思ったか 最近PythonよりGolangを使うことが多くなったので 節目としてこの二つの感想にを書こうと思った この記事は主観的な感想に過ぎません python 一言で....私の大好きな言語 どんな言語? 言語自体の文法はとてもシンプルで,初心者にとっつきやすい言語だと思う. またかっこでくくるのではなくブロックはインデントで表現する どんなところで有効だと考える? pythonは何でも無難に問題の解決を行うことができる言語だと思う web,機械学習,etc....シンプルな言語ゆえどの場面でも候補の一つとして挙げられる まとめ 簡単にマスターできる言語かというとそうでもないような気がする. ある程度使えるようになるとリスト内包表記を勉強しなければいけなくなるし,ライブラリが豊富であるためライブラリの勉強もやらないといけない. 始めやすいしとても奥が深い言語だと思う.
事象 いつもコードを書く時に見た目がスッキリするので画面表示と内部の処理を別のメソッドで書いていたのですが Cookieを使用する際にsetCookieの後http.redirectを使用したらCookieが登録できていなかったというものです。 ダメだったコード main.go package main import ( "html/template" "net/http" ) func main(){ server := http.Server{ Addr: "localhost:8080", } http.HandleFunc("/set", setCookie) http.HandleFunc("/cookieComp", cookieCompleteHandler) server.ListenAndServe() } func setCookie(w http.ResponseWr
挨拶 最近Goで仕事してますが抽象化の方法がようわからんのでぼちぼち調べている感じ。 インタフェース・構造体・埋込 Goの基本的な抽象化機構としてはまあこの辺ですよね。 インタフェースといろんな実装型を定義してロジックに渡してみる例。 https://goplay.space/#SWC6a5AjSqy インタフェースと構造体の埋め込みの例。Goは継承なしオブジェクト指向スタイルだそう。 親から子は見えないけど子から親は見えるので、親のフィールドは見えるし関数も呼べる。 https://goplay.space/#5wCOnPZv2i6 インタフェースで型を隠蔽する例。インタフェースだとメソッドを呼ぶ以外の操作ができなくなる。 https://goplay.space/#hzhrlUoptug 構造体といえば、型として定義した構造体と無名の構造体は可換(なんかに使える?)。ただし:=で単に代
セミコロンなし 型は後置 多値返却できる 型推論 上記のvar m string = "Hello, world"はm := "Hello, world"とも書ける 標準のパッケージや言語仕様による機能が便利 HTTP、TCP、UDP、正規表現等を扱うパッケージが標準で用意されている Packages - The Go Programming Language goルーチンと呼ばれる軽量スレッド実行機能により並行処理が簡単に行える package main import ( "fmt" "time" ) func readword(ch chan string) { fmt.Println("Type a word, then hit Enter.") var word string fmt.Scanf("%s", &word) ch <- word } func timeout(t ch
最近Goを使っているのだが、Goではインデントにタブ(4スペース前提)を使うことが推奨される。 GitLab、Githubではタブは8スペースで表示される つらい Githubのタブが8文字で見にくいのでextensionで解決という記事でGithubでは ts=n を入れるとタブ幅を変更できることを知った でも手動でパラメータ付けるのは辛い じゃあブックマークレットでやればいいじゃん これと同じ発想 => BitbucketやGitHubで、ブラウザで差分表示する時に空白を無視するブックマークレット でも今のプロジェクトで使ってるのはGitLabで、GitLabでは ?ts=n パラメータは効かない やっぱりつらい でも、せっかく作ったし、いずれGithubでGo使うこともあるかもしれないし公開しておく。 4スペースに変更するブックマークレットはこちら(他のスペース幅にする場合は2箇所の
結論 こんな感じでccsvというCUIコマンドを作りました。Linux,windows,(多分MacOSも)版があります。 置き場 GitHubに置いてあります。 https://github.com/nak1114/ccsv/releases きっかけ VScodeのRainbow CSVという拡張を見て、CUIでもあったらいいんじゃないかという話を聞いて、Goを久しぶりに使ってみようという目的で作ってみました。 コード CSVファイルの操作もカラーで表示するのもLibがあるので組み合わせるだけでできてしまいました。 特に工夫は無いですが、CSVの読み込みは一行毎にすれば大きなファイルで軽くなるのでしょうか。 package main import ( "encoding/csv" "flag" "fmt" "log" "os" "github.com/fatih/color" ) //
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? はじめに 先日、プログラミング言語別年収ランキング2018という記事を見まして、Go言語が1位でした。今後はGo言語の需要が増えそうなので、今更ですが学習していきたいと思います。 今回はGo言語の所感と、Go言語のインストールと、IDE環境をインストールして開発環境を構築します。 環境はWindows10環境です。 Go言語? 最初にGo言語のソースコードを見たとき、シンプルに記述出来て良さそうと思ったのですが、よく見るとC言語なのどの、手続き型プログラミングでした。 手続き型プログラミングは苦手意識が有り、その理由として自動でやってく
追記 ちゃんと呼び出せるように直っとる。Golangえらい。 概要 Goで関数を返す関数を返す関数を返す...関数を定義し、無限に呼び出してみる。 想定では基本的に必ず最後まで呼び出せるはずだったが、結果的に途中でエラーになった。 序文、及び動機 理屈で言えば高階関数はコールスタックを消費しないので、どこまでも深く定義して呼び出せる。 ただしGolangの場合クロージャになり親の関数内の状態を保存するのでメモリを食うとか何かは起きるであろう。 ということが、なんとなく気になったのでやってみた、という話である。 やったこと 高階関数自体はワンライナーで生成した。高階関数を呼び出す部分(最下部)は(A)関数を呼び出して(B)取得した値が関数だったらAに戻るというコードになっている。 結果 OSXのgo version go1.11 darwin/amd64で試したところ、理由は不明だが100を
TL;DR go generate で使うものや linter などの開発用ツールもバージョン固定したいよね gex を使えば簡単にできるよ 独自の管理機構を持たない(dep / Modules に任せる)から既存のワークフローへの導入も楽だよ 依存管理ツールと開発用ツール Go における依存管理ツールは現状,dep が広く使われています.また,Go 1.11 からは Experimental ですが Modules も利用可能になっています(Modules については『Go 1.11 の modules・vgo を試す - 実際に使っていく上で考えないといけないこと』という記事で軽く感想を書いたので,よければそちらも御覧ください). これらの依存管理ツールはコード中で import するパッケージをいい感じに管理・バージョンロックをしてくれます. 開発用ツールの管理 一方で,開発時に利用
2019/08/17 更新 Githubが公式にサポートしたようです。 Managing the automatic deletion of branches リリースして1年も経っていませんが、本体に必要とされる機能をBotとして作ることができて良い経験になりました。これをキッカケにまた何か作りたいと思います。 ちゃんとブランチ消してますか? あなたはGitHubでPRをマージした後、きちんとブランチを削除していますか? GitHubにはマージ後に「Delete branch」ボタンを表示してくれるんですけどね なーんか押すの忘れちゃうんですよね ついにはよく共同で開発している@chaspyに「運用変える?」と言われてしまう始末…ごめんなさい 「自動で消す方法なんてすぐ見つかるでしょ」と検索してみるもなかなか見つからず。 20,30分探しても有効な情報が見つけられなかったので、「作ろう」
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く