タグ

ブックマーク / qiita.com/taizo (11)

  • contextの使い方 - Qiita

    Go1.7で golang.org/x/net/context が 標準ライブラリに入るようなので改めて使い方のメモ。 変数の管理 ctx := context.Background() ctx = context.WithValue(ctx, "Foo", 1) ctx = context.WithValue(ctx, "Bar", 2) fmt.Println(ctx.Value("Foo").(int)) // 1 よくあるやつ。値を代入するたびに新しいcontextが生成される。 なので、乱暴に値を上書かない限りはあまり状態を気にしなくていい。 TimeoutとCancel func WithCancel func WithDeadline func WithTimeout はキャンセルを取り扱う。 WithTimeout, WithDeadline は特定時間になったタイミングで

    contextの使い方 - Qiita
  • GoとDockerとMicroservices 最初の一歩 - Qiita

    この記事は Go その2 Advent Calendar 2015 10日目の記事です。 今回はgodockerを使ってMicroserviceっぽく、ウェブアプリケーションを作っていく時のさわりの部分を書いてみました。 Microservice Hello World macdocker toolboxインストールして、docker-machine start devとdocker-machineを立ち上げた後から。 Hello Worldを返すウェブサーバーのdockerイメージを用意してみます。 package main import "net/http" func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Hello World"))

    GoとDockerとMicroservices 最初の一歩 - Qiita
  • Goのsyncパッケージで相互排他ロックを行う - Qiita

    syncパッケージには、相互排他ロックがあります。 これを使うと意図的に処理にブロックを入れることが出来て goroutineのチャンネルのやりとりのウェイトのようなことが実装出来ます。 Mutex型 相互排他ロック。 使わない場合 package main import ( "fmt" "time" ) func main() { c := make(chan bool) for i := 0; i < 5; i++ { go func(i int) { time.Sleep(500 * time.Millisecond) fmt.Println(i) c <- true }(i) } for i := 0; i < 5; i++ { <-c } } package main import ( "fmt" "sync" "time" ) func main() { m := new(sy

    Goのsyncパッケージで相互排他ロックを行う - Qiita
  • AWS SDK for Goを使ってS3にファイルアップロード - Qiita

    https://github.com/awslabs/aws-sdk-go aws公式のsdkになるaws-sdk。 取り急ぎ、ファイル一覧取得と、ファイルのアップロードの2つだけ確認してみた。 ファイル一覧取得 package main import ( "fmt" "github.com/awslabs/aws-sdk-go/aws" "github.com/awslabs/aws-sdk-go/gen/s3" ) func main() { accessKey := "<AWS_ACCESS_KEY_ID>" secretKey := "<AWS_SECRET_ACCESS_KEY>" bucket := "<bucket>" creds := aws.Creds(accessKey, secretKey, "") cli := s3.New(creds, s3.BucketLoca

    AWS SDK for Goを使ってS3にファイルアップロード - Qiita
  • Goでwebサーバー作るときに考えたこと - Qiita

    Goでwebサーバーを作るときに考えたことをまとめておきます。 dockerコンテナで動かす場合を少し考慮してます。 フルスタックフレームワークか軽量系フレームワークか 最初に突きつけられる問題です。 フルスタックフレームワーク revel beego 軽量系フレームワーク goji negroni どんなフレームワークもそうですが、フルスタックなフレームワークならば、 その道に乗っかることで余計なことを考えずにすみます。 だけどその道から外れることをする場合に苦労が伴います。 golangの場合、Go初心者ならばフルスタックでもいいけれど、 ある程度Goに慣れてくると標準のライブラリといくつかのライブラリを使うだけで webサーバーを作る場合、十分な場合があります。 前にrevelを使っていたときは、最初はrevelの機能を使っていたけれど、途中で他のライブラリを使ったほうが楽なんじゃな

    Goでwebサーバー作るときに考えたこと - Qiita
  • capistrano3のデプロイを把握する - Qiita

    結局Node.jsアプリケーションのデプロイはどうすればいいの? で 色々node.jsアプリのデプロイを考えたのですが、 やっぱりcapistranoが結構使いやすい気がしてきました。 デプロイ対象でリポジトリから直接ソースコードを落とせるならば デプロイ専用のリポジトリを作成して、それをCIで実行するようにすればいいわけです。 capistrano3では、基的なデプロイタスクがあり、 それに独自のタスクを追加することで、様々な状況に対応しています。 どのようなタスクが実行されているかを把握できれば、柔軟にデプロイ設定が出来ます。 capistrano3をまず使ってみる --dry-run で動くこと確認 $ gem install capistrano $ cap install mkdir -p config/deploy create config/deploy.rb creat

    capistrano3のデプロイを把握する - Qiita
  • JSON Schemaを上手く運用出来そうなprmdとその周りのお話 - Qiita

    最近APIのバリデーションを行うのにJSON Schemaを使おうという話をよく聞くのですが じゃあやってみようとすると、単体のJSONのバリデーションを行うことは出来るけれど それが実際の運用に適用できるようにするためには、 それなりに考えなくてはいけないようです。 JSON Schemaって? JSON Schemaは、文字の通りJSONのスキーマ定義を明確にするものです。 2014/09/07現在、IETFにdraft v4が3つに分割されて公開されています。 JSON Schema Core JSON Schema Validation JSON Hyper-Schema それで、単体のJSONファイルの確認ならばCoreだけで十分なのですが WebサービスAPIを管理しようとなると、 JSON Hyper-Schemaのほうで定義されているlinksを使って、ひとつのURIに対

    JSON Schemaを上手く運用出来そうなprmdとその周りのお話 - Qiita
  • Goを勉強しはじめた時にたどり着いたリンク集 - Qiita

    1ヶ月くらいGoの勉強をしたときにたどり着いたリンク集。 (適時追加中) ページ A Tour of Go - 最初にここ。ただし、量と途中のエクササイズの問題の分かりにくさで、最初から全てを理解するのは大変。 go-wiki tips的な Golang JP - Google+のコミュニティ build web application with golang - Goでウェブサービスを開発する場合の説明。 Go言語での構造体実装パターン - 構造体の使い方 Go Language Patterns - 『You should have already read the Go Tutorial and Effective Go. This site is the next step.』 スライド Go For Perl Mongers - YAPC::Asia TOKYO 2014のプレゼ

    Goを勉強しはじめた時にたどり着いたリンク集 - Qiita
  • Revelの主な処理の流れ - Qiita

    Go製フレームワークRevelの処理の流れです。 ざっくりとした処理の流れの話です。 以下、社内勉強会用資料。 revelの主な処理の流れ http://revel.github.io/manual/concepts.html Play Frameworkを参考に作っている。 基的にはMVC。 revel アプリの作成方法 revel アプリケーションの作成 $ revel new sample ~ ~ revel! http://revel.github.io ~ Your application is ready: /Users/username/.go/src/sample You can run it with: revel run sample . ├── app │   ├── controllers │   │   └── app.go │   ├── init.go │ 

    Revelの主な処理の流れ - Qiita
  • Go言語でhttpサーバーを立ち上げてHello Worldをする - Qiita

    package main import ( "fmt" "net/http" ) func handler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, World") } func main() { http.HandleFunc("/", handler) // ハンドラを登録してウェブページを表示させる http.ListenAndServe(":8080", nil) } ServeHTTPを使う 既存のstructや型に対して、ServeHTTPメソッドを用意することで http.Handleに登録出来るようにする package main import ( "fmt" "net/http" ) type String string func (s String) ServeHTTP(w http

    Go言語でhttpサーバーを立ち上げてHello Worldをする - Qiita
  • 結局Node.jsアプリケーションのデプロイはどうすればいいの? - Qiita

    node.js アプリケーションのデプロイをする時の選択肢が あまりにもありすぎて、結局どうすればいいのよ?ってなったので、 いったん基礎からまとめてみます。 デプロイとは何か? アプリケーションのデプロイは大きく2つのフェーズに分かれます。 ファイルを所定の場所に置く 置かれたファイルの再ローディング 文章にするならば『ファイルを各サーバーの所定の場所におき、それらのファイルを再度ロードをする。』になると思います。 Webアプリケーションの場合 ファイルを所定の場所に置く前にテストを走らせたり 置いた後に静的ファイルを生成したりと、この2つの前後にはもっと色々なフェーズがありますが、 デプロイのタスクは、大きく分けてこの2つになります。 ファイルを所定の場所に置く サーバーにファイルを置く作業は、以下のような方法があります。 FTP tar などで圧縮scpで転送して解凍 rsync g

    結局Node.jsアプリケーションのデプロイはどうすればいいの? - Qiita
  • 1