Go

go goroutine入門

Go

「tour of go」の goroutineやってみた。goroutineを使うと別スレッドで処理をおこなえる。むずかしい話ではないとは思うけど自分なりにちゃんと読んだので理解した内容をメモしておく GoroutinesとChannels https://tour.golang.org/concurrency/1 https://…

【go】echoでapiサーバーを実装するときに最低限必要そうなことをまとめておく

以前にgoでのapiサーバーの実装を調べたけどすでに色々忘れかけてるので手順などまとめておく。使おうと思った理由としては以下の要件が厳しめで、phpとかでは厳しいと思ったため。 ・レスポンスの高速化 ・APIサーバー数の最小化あと、時間が空くと環境作っ…

【Go】Echo JsonにTemplateから生成したHTMLを埋め込んで返す

今回やりたかったことは以下。 ・HTMLのテンプレートを変数等に定義しておく。 ・テンプレートを元に動的な部分をHTMLに埋め込む。 ・生成したHTMLをJSONにいれてレスポンスとして返す。 package main import( "net/http" "github.com/labstack/echo" ) // V…

glideでlogrusのインストールエラー対応

Go

glideでgorm入れようとしたら突然logrusのエラーが。。。 [ERROR] Update failed for github.com/Sirupsen/logrus: The Remote does not match the VCS endpoint [ERROR] Could not update packages: The Remote does not match the VCS endpoint意味わから…

【Go】Echo アプリログ出力処理(複数ファイルへ)

実際使おうとすると調べる内容が細かい。。けどメモ。 logrusというのを使ってみる。ローテションはとりあえず考えない。log/log.go package log import ( "os" "fmt" "github.com/Sirupsen/logrus" ) var AppLog = logrus.New() var AppLog2 = logrus.New()…

【Go】Echo InternalServerErrorとNotFoundエラーを発生させる

こんなことできるのかmain.go package main import ( "net/http" "github.com/labstack/echo" ) func main() { e := echo.New() e.GET("/users", func(c echo.Contet) error { // エラーを返す return echo.NewHTTPError(http.StatusInternalServerError, "S…

【Go】Echo エラー処理を実装する

apiサーバーの実装でとりあえずのエラー処理中。とりあえず以下をハンドリングするような想定で。 ・ビジネスエラー ・システムエラー ・404エラー ・その他サーバーエラーディレクトリ構成はこんな感じ $ tree -L 3 . └── app ├── controller │ └── traking…

【Go】Echo Controllerを別Packageに分割する

細かい話だけどecho的には特にルールは決まっていなそう。main.go package main import ( "github.com/labstack/echo" "app/controller" ) func main() { e := echo.New() e.GET("/members", controller.GetMember()) e.POST("/members", controller.PostMem…

【Go】Echo JSONを返す

echoでjsonを返すサンプル package main import( "net/http" "github.com/labstack/echo" ) // レスポンスを表す構造体を定義 type Member struct { Id int `json:"id"` Name string `json:"name"` } func main() { e := echo.New() e.GET("/members", func(…

macにgoをインストールする手順メモ

Go

1台のPCで複数バージョンのGoを使用したいのでgvm(Go Version Manger)を使用する。https://github.com/moovweb/gvm ドキュメントどおりにやったらすんなり入った。Mac使ってるので「Mac OS X Requirements」のコマンド実行準備 $ brew update $ brew install…

【Go】Echoで404ページと500ページを表示

Echoを使っていてデフォルトのままで存在しないURLにアクセスするとNotFoundのJSONがレスポンスとして返される。 今回はAPIでなくてサイトを作りたかったのでHTMLを返したかった。ちょっとやり方がわからなかったので今回は以下のように対応した。Echoで定義…

【Go】Echoでのテンプレート(html/template)の使い方メモ

はじめに Echoでテンプレートの使い方を調べたのでメモ。今回やりたかったことはそんな多くなくて ・URLによってテンプレートを振り分けたい ・ヘッダー等の共通テンプレートを使いまわしたい 実装 まずはメインの処理server.go package main import( "net/h…

【Go】ログ出力先をファイルに変更 - echo logger

Go

マニュアルにあったとおりだけどメモメモ package main import ( "os" "net/http" "github.com/labstack/echo" "github.com/labstack/echo/middleware" ) func main() { e := echo.New() fp, err := os.OpenFile("/path/to/log", os.O_RDWR|os.O_CREATE|os.O…

【Go】gormで実行したsqlをファイルへログ出力する方法メモ

Go

開発時またはリリース後もしばらくはSQLは全てログに残しておきたいのでそのやり方を調べたのでメモ。http://jinzhu.me/gorm/advanced.html#logger ドキュメントにそれっぽいのがあった package main import ( "log" "os" "github.com/jinzhu/gorm" _ "githu…

【Go】dbrでinsertしてlast_insert_idを取得する

Go

dbrを使ったdb処理でinsertしてオートインクリメント値を取得したいということ。 READMEみてもよくわからなかったけど、コードみたらLastInsertIdというのがあった。 package main import ( "fmt" "strconv" _ "github.com/go-sql-driver/mysql" "github.com…

【Go】stringをtime.Timeに変換(日時文字列→時刻)

Go

今回やりたかったことはMySQLのdatetime型のカラムから取得した値をGoの時刻型に変換したかったということ。 なかなかうまくいかず以下にたどり着いた date := "2016-12-22 23:01:00" layout := "2006-01-02 15:04:05" t, _ := time.Parse(layout, target) f…

【Go】設定ファイルなどを非公開にして無料Githubでプロジェクト管理する

はじめに Githubのアカウントは持ってたけどコード管理したりはしてなかった。 で、今回試しに使ってみようかと思った。 個人用途なので無料のパブリックなレポジトリで。基本的にコードの中身は見られても問題ないけどアカウントやファイルパスなどは公開し…

【Go】Twitter Search APIを使ってみる

Go

はじめに やりたいことはキーワードでtwitterの投稿を取得してくるだけちょっとだけプログラムいじった箇所は以下 ・1回で取得できる件数の上限(100件)が決まっているので複数回取得するようにする ・タイムゾーンをJSTに パッケージ 今回使ったパッケージは…

【Go】direnvとglideで開発環境構築してパッケージ管理

Go

はじめに 開発始めようとして以下が問題があったので整理しておく。前提条件としては以下 ・複数人での開発で各々のPCで開発を想定 ・コードはgitで管理で、サードパーティのパッケージをどう管理するかとういのが問題点でした。 そのままやると$GOPATH以下…