golangに関するPockeのブックマーク (59)

  • 【Golang】公開鍵と共通鍵で暗号化する【rsa, aes, pem, x509, cipher】 - くどはむと猫の窓

    前回のプログラムを改良してサーバ/クライアントが送信するメッセージを暗号化してみました。 【Golang】jsonの内容をデコードする - くどはむとの窓 前回までに作ったプログラムはクライアントが送ったメッセージに" too!"を付けてサーバが送り返すプログラムでした。この通信はTCP通信なので経路上を流れるメッセージは簡単に除くことができます。 試しにクライアントから「hoge」というメッセージを送り、WireSharkを使ってサーバ側が開いているポート番号でやりとりされる内容を覗いてみます。 2つの画像の右下にクライアントから送られた「hoge」とサーバから返された「hoge too!」の文字があります。 このようにTCP通信でやりとりされるメッセージは外部から簡単に見ることが可能です。 そこで今回はこのメッセージを暗号化し、第3者からは簡単に見ることができないようにしてみました。

    【Golang】公開鍵と共通鍵で暗号化する【rsa, aes, pem, x509, cipher】 - くどはむと猫の窓
    Pocke
    Pocke 2016/04/29
  • 中規模APIサーバー開発で得た知見

    中規模APIサーバー開発で得た知見 第2回 関西golang勉強会 21 January 2016 Yusuke Hatanaka (a.k.a Hatajoe) Software Engineer, Clover Lab.,inc. 中規模? $ find . -name "*.go" | wc -l 449 $ find . -name "*.go" | xargs cat | wc -l 81114 2 使用している主なパッケージ zenazn/goji jinzhu/gorm gocql/gocql garyburd/redigo naoina/migu これらをラップした内製フレームワークを使用 3 内製フレームワーク app ├── common ├── controllers ├── db │   ├── cassandra │   ├── fluentd │   ├── m

    Pocke
    Pocke 2016/01/27
  • sync.Pool で楽して高速化 - 隙あらば寝る

    golang には sync.Pool というライブラリがある。 同じ処理を何度も実行 都度メモリ割り当てが発生 するような場合にサクッとパフォーマンスを向上させられるので紹介する。 メモリ割り当ての処理と、メモリ解放のために動く gc の実行時間を削ることでパフォーマンスを上げることができる。 話を単純にするために以下の仕様で関数を作るとする。 入力: string 出力: 入力を n 回繰り返し、[]byte として返す n はグローバル変数、適当に調整する バージョン1 func func1(in string) (out []byte) { buf := &bytes.Buffer{} for i := 0; i < n; i++ { buf.WriteString(in) } out = buf.Bytes() return } bytes.Buffer を作って string

    sync.Pool で楽して高速化 - 隙あらば寝る
  • golangのコンパイル時間について

    ここ1週間ぐらい前から、go言語でコードを書き始めた初心者です。 質問は、"go run"や"go buiold/install"などのコンパイル時間を短くする方法(作法)を知りたく質問しました。 少し現状を記しておきます。 現在goを使って、プログラムを書いています。 説明が分かりにくくなりますので、ここではmain.goとmypackage.goの2つファイルを作成している状況を仮定します。main.goにはfunc main()があり、mypackage.goにはその他のfuncを書いています。 自分の行いたいことに対し、goの標準的なlibraryが使えないため、自分でfuncを多数作成し、それをまとめたファイル(mypackage.go)を作成しています。それをmain.goの中でimportで呼び込んで、プログラムの動作("go run main.go")を確認しています。 こ

    golangのコンパイル時間について
    Pocke
    Pocke 2015/08/27
  • ビルドする際にバージョン情報を埋め込む - Qiita

    Golangのアプリケーションはビルドした状態で各サーバにデプロイするのが一般的だと思うが、どのバージョンがデプロイされているのか確認したくなる。ビルドする際にバージョン情報を埋め込めると良い。 リンク時に変数を指定する まずはバージョンを表示できるようにコードを追加しよう。-versionオプションが指定されたらバージョン番号をプリントして出力するようにする。 package main import ( "flag" "fmt" ) var version string var show_version = flag.Bool("version", false, "show version") func main() { flag.Parse() if *show_version { fmt.Printf("version: %s\n", version) return } // ...

    ビルドする際にバージョン情報を埋め込む - Qiita
    Pocke
    Pocke 2015/08/25
  • Golang Reverse Proxy - r7km/s

    単一ホスト用のリバースプロキシを実装する net/http/httputilで、HTTP用のReverse Proxyを実装するためのライブラリが提供されている。 下記のコードで、http://127.0.0.1:3000 から http://127.0.0.1:9292 にHTTPリクエストを委譲するReverse Proxyが動作する。 httputil.NewSingleHostReverseProxyはhttputil.ReverseProxyのインスタンスを返す。 このインスタンスはhttp.Server互換の (.ServeHTTPメソッドに呼応できる) オブジェクトであるため、 http.Serverを利用してHTTPサーバを動作させられる。 // main.go package main import( "net/http" "net/http/httputil" "net

    Pocke
    Pocke 2015/07/22
  • Golang で Shared Library を出力する。 - Qiita

    Go 1.4 で android に対応していたのでもしかしてそろそろできるんじゃないかなぁとか思いながら githubgo レポジトリを眺めていたら Go 1.5 から buildmode なんていうオプションが追加されていて、そこに c-shared なるものががが。 これは間違いないだろうと試してみました。 (ちなみに試すためには Go 1.5 が必要なので git clone して Go 1.4 でビルドしてください。記事では Go 1.5 の準備は割愛します。) サンプルコードは gist にも上げておきました。 package main import ( "C" "log" ) //export fib func fib(n int) int { if (n < 2) { return n } return fib(n - 2) + fib(n - 1) } func

    Golang で Shared Library を出力する。 - Qiita
    Pocke
    Pocke 2015/07/14
  • テストのためのIO抽象 - Qiita

    Help us understand the problem. What is going on with this article?

    テストのためのIO抽象 - Qiita
    Pocke
    Pocke 2015/07/07
  • Go言語のDependency/Vendoringの問題と今後.gbあるいはGo1.5

    Go言語のDependency/Vendoringは長く批判の的になってきた(cf. “0x74696d | go get considered harmful”, HN).Go1.5からは実験的にVendoringの機能が入り,サードパーティからはDave Chaney氏を中心としてgbというプロジェクベースのビルドツールが登場している.なぜこれらのリリースやツールが登場したのか?それらはどのように問題を解決しようとしているのか?をつらつらと書いてみる. Dependencyの問題 最初にGo言語におけるDependecy(依存解決)の問題についてまとめる.Go言語のDependencyで問題なのはビルドの再現性が保証できないこと.この原因はimport文にある. Go言語で外部パッケージを利用したいときはimport文を使ってソースコード内にそれを記述する.このimport文は2通りの

    Pocke
    Pocke 2015/06/30
  • Creating a simple TCP server in Go (Example)

    package main import ( "fmt" "net" "os" ) const ( CONN_HOST = "localhost" CONN_PORT = "3333" CONN_TYPE = "tcp" ) func main() { // Listen for incoming connections. l, err := net.Listen(CONN_TYPE, CONN_HOST+":"+CONN_PORT) if err != nil { fmt.Println("Error listening:", err.Error()) os.Exit(1) } // Close the listener when the application closes. defer l.Close() fmt.Println("Listening on " + CONN_HOST

    Creating a simple TCP server in Go (Example)
    Pocke
    Pocke 2015/06/29
  • Go言語でコマンドラインオプションをさくっと設定ファイル対応させるライブラリをつくった

    Goでコマンドラインオプションのあるツールを提供していると設定ファイルに定義できるようにしてほしいという要望が来ますが、意外とオプションと設定ファイルで定義が冗長になったりして煩わしいのでライブラリにしてみました。 conf+flagでconflagです。 いつものコードに 3行 追加するだけでコマンドラインオプションを設定ファイルに書いておけるようになります。 使い方 以下のような感じで、flag.Parse()を実行する前に、設定ファイルからflagに設定する値を呼び出すコードを追加します。 // フラグを定義します var procs int flag.IntVar(&procs, "procs", runtime.NumCPU(), "GOMAXPROCS") // コマンドラインオプションを解析する前に設定ファイルからフラグに値を設定します if args, err := con

    Go言語でコマンドラインオプションをさくっと設定ファイル対応させるライブラリをつくった
    Pocke
    Pocke 2015/06/29
  • Golang で心を無にしてコードを書く // Speaker Deck

    LINE Developer Meetup #11 での LT スライド。Golang の語り尽くされたであろう、単純さについて入門的にふれる話。 6/22 19:00 宮崎開催! LINE Developer Meetup #11 - connpass http://connpass.com/e…

    Golang で心を無にしてコードを書く // Speaker Deck
    Pocke
    Pocke 2015/06/25
  • Go言語でActiveRecordライクなORMをつくった

    Goで DataMapperじゃなく、ActiveRecordライクにDB操作したいと思ってつくってみました。 go/parserとgo/astでソースを解析、個々の構造体ごとにARなコードを生成します。 argen ActiveRecord** Gen**eratorでargenです。 クイックスタート テーブルを表す構造体に+ARアノテーションをマークします。

    Go言語でActiveRecordライクなORMをつくった
    Pocke
    Pocke 2015/06/21
  • goyaccで構文解析を行う - Qiita

    go toolにはyaccというものがある。 これはunixの言語処理系で広く使われるyaccというパーサジェネレータのGoバージョンである。 稿はその使い方を説明するチュートリアルである。 対象読者 goyaccを使う - Qiitaという記事があって、これはgoのyaccを使って簡単な言語の構文解析をして使い方を説明している。 しかし、yaccについての基的な説明が完全ではなく(例えば%%とか)、yaccを触ったことがない人には若干難しい。 従って、私のようなGoの文法は理解しているがyaccを使ったことがない人向けにごく簡単な使い方を説明する。 参考資料 yacc - The Go Programming Languageが公式のドキュメントっぽいが、これもyaccの文法自体は他に任せている。 RHGの速習yaccがとても参考になると思う。 稿はあくまで取っ付き易いチュートリア

    goyaccで構文解析を行う - Qiita
  • golang で HTTP Server を停止する方法 - Qiita

    個人的に嵌ったので、覚え書きです。 間違っていたら教えて下さい…。 Go を始めてから2週間ほど経ちました。 Go を書いていると心が満たされます。 問題 http.Server さて、 Go 言語で最もシンプルな HTTP Server の実装は以下の通りだと思います。 package main import ( "fmt" "net/http" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Hello, world.") }) http.ListenAndServe(":8080", nil) } package main import ( "io/ioutil" "net/http" "testing" ) func TestSe

    golang で HTTP Server を停止する方法 - Qiita
    Pocke
    Pocke 2015/06/14
  • Go コードのレビュー時によくされるコメント - GRACEFULEXIT

    CodeReviewComments から Go コードのレビュー時によくされるコメントについて。 gofmt gofmt またはそのスーパーセットである goimports を実行すること。goimports は gofmt に加えて import 行の修正も行う。 コメント文 http://golang.org/doc/effective_go.html#commentary を参照。宣言に対するコメントは少し冗長に見えるかもしれないけど完全な文にする。そうすれば godoc できれいに整形される。次のように説明するものの名前から始めピリオドで終える。 // A Request represents a request to run a command. type Request struct { ... // Encode writes the JSON encoding of re

    Pocke
    Pocke 2015/06/11
  • Go言語で API サーバーを開発する | カメリオ開発者ブログ

    こんにちは!白ヤギの開発者、森です。 白ヤギではいま API サーバーを Go 言語で開発しています。 皆さんも Go の話題をよく見聞きするようになっていると思います。今回は白ヤギの業務でどんな風に Go を使って開発しているかの一端を紹介します。 余談ですが、先日、大学の先生とお話ししたときにこんな話を伺いました。その先生は学生にプログラミングを教えているそうですが、何割かの学生は及第点に届かないそうです。しかし、そういった学生がプログラミングの素養がないかというとそういう訳ではなく、プログラミングを学ぶ上でその学生にとって何が理解を促すのかが違うだけなのだと仰っていました。教える側として全ての学生が習得できるプログラミング教育というのを見つけられていないのが悔しいといった話をされていました。 何かを学ぶというのを一般論では語るのは難しいということかもしれません。そのため、私はこうい

    Go言語で API サーバーを開発する | カメリオ開発者ブログ
  • golang勉強会でGo製ツールの配布方法について話してきた

    golang勉強会でGo製ツールの配布方法について話してきた “Ship your CLI tool built by golang to your user #golangstudy” “Golang勉強会”で発表してきた.Go言語で作成したツールをクロスコンパイルして,複数プラットフォームに配布する方法について話してきた.自分がGoをはじめた理由の一つがクロスコンパイルによる配布のしやすさであり,いろいろ実践したりそれ用のツールを作ったりしてきたのでそれをまとめた. 以下の視点で話したつもり, 自動化により開発者の負担を減らす ユーザがツールを使うまでの負担を減らす “わかりやすいREADME.mdを書く”にも似たようなことを書いたけど,自分のような無名なエンジニアの作ったツールであってもユーザに使ってもらうには,2点目のような視点を大切にしないといけないと思う. 発表は以下の記事をも

    Pocke
    Pocke 2015/06/10
  • CI-as-a-ServiceでGo言語プロジェクトの最新ビルドを継続的に提供する

    CI-as-a-ServiceでGo言語プロジェクトの最新ビルドを継続的に提供する Go言語で作成したツールのリリース方法について,最近実践していることを書く. リリースは,ローカルから人手で行っている.具体的には,自分のローカル環境でクロスコンパイルし,セマンティック バージョニングによるタグをつけ,CHANGELOG.mdを丁寧に書いた上でリリースをしている.クロスコンパイルにはmitchellh/gox,リリースには自分で作成したtcnksm/ghrを使っている(ghrについては,“高速に自作パッケージをGithubにリリースするghrというツールをつくった”を参考). その一方で,開発中の最新のビルドも提供するようにしている.例えば,こんな感じで,Pre-Releaseとして提供している.Go言語での開発なので,go getしてくださいと言える.しかし,環境によってビルドが失敗する

    Pocke
    Pocke 2015/06/10
  • Running gocode under dependency manager

    Pocke
    Pocke 2015/06/08