golangでrest api (web framework iris and orm gorm)試してみた
golangのweb frameworkはまだスタンダードが決まってないようで候補はいろいろ
この中で最もパフォーマンスがよいといわれているiris試すことに
ormもいろいろあるようですが全部入りのgormを選択
databaseは前回用意したmysqlで以下のようになりました
package main import ( "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/mysql" "github.com/kataras/iris" "time" ) func main() { connectionString := "user:pass@tcp(xxx.arukascloud.io:0000)/db?charset=utf8&parseTime=True&loc=Local" db, err := gorm.Open("mysql", connectionString) if err != nil { panic(err) } db.AutoMigrate(&Article{}) ar := &ArticleResource{db: db} iris.Get("/articles", ar.ArticlesList) iris.Post("/articles", ar.ArticlePost) iris.Get("/articles/:id", ar.ArticlesDetail) iris.Listen(":8080") } type ArticleResource struct { db *gorm.DB } type Article struct { Id int64 `gorm:"AUTO_INCREMENT;primary_key"` Created int64 Title string Content string } func (ar *ArticleResource) ArticlesList(c *iris.Context) { var articles []Article ar.db.Order("id").Find(&articles) c.JSON(iris.StatusOK, articles) } func (ar *ArticleResource) ArticlesDetail(c *iris.Context) { id := c.Param("id") article := Article{} ar.db.First(&article, id) c.JSON(iris.StatusOK, article) } func (ar *ArticleResource) ArticlePost(c *iris.Context) { var json Article c.ReadJSON(&json) article := Article{ Created: time.Now().UnixNano(), Title: json.Title, Content: json.Content, } ar.db.Create(&article) c.JSON(iris.StatusCreated, article) }
3分でクラウドにmysql開発環境を用意する by arukas cloud docker hosting
windows環境でmysql立ち上げるの面倒だなと思っていたらarukasで簡単に用意できるとのことで試してみた
- arukasにアカウント作る
アプリケーション追加ボタンを押して以下の値設定
項目 値 Image mysql Instances 1 Memory 512M Port 3306 ENV MYSQL_DATABASE = db MYSQL_ROOT_PASSWORD = rootpass MYSQL_PASSWORD = pass MYSQL_USER = user 起動ボタン押す
以上でおしまい。やり方分ってれば1分ぐらい?
あとは以下のようにgolangから接続確認
package main import ( "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/mysql" ) type Product struct { gorm.Model Code string Price uint } func main() { db, err := gorm.Open("mysql", "user:pass@tcp(xxx.xxx.arukascloud.io:00000)/db?charset=utf8&parseTime=True&loc=Local") if err != nil { panic("failed to connect database") } // Migrate the schema db.AutoMigrate(&Product{}) // Create db.Create(&Product{Code: "L1212", Price: 1000}) // Read var product Product db.First(&product, 1) // find product with id 1 db.First(&product, "code = ?", "L1212") // find product with code l1212 // Update - update product's price to 2000 db.Model(&product).Update("Price", 2000) // Delete - delete product db.Delete(&product) }
いや便利ですすごく
参考
おじいちゃんが亡くなった 看取りからお葬式まで
おじいちゃんの看取りからお葬式までを行いました。
両親はまだ健在ですが、初めてだらけのことだったので今後のためにログ残したいと思います。
初看取り
5月10日朝6時におなかが痛いということで救急車で病院に付き添いましたが、
腹部大動脈瘤破裂という診断で運ばれてから6時間後にその病院で亡くなりました。
95歳という高齢だったため、積極的な治療はお勧めできないと医者に言われ、痛みを取るだけの対処でした。
治療方針や病名は、医療系ドラマを見ていたためか、ほとんど意味がわかり、その自分にびっくりしました。
私は孫に当たるのですが、妻も子(私の母)も間に合わないということで私が初めて看取りました。
それも医師が瞳孔をライトで調べるというドラマで見たことのある光景でした。
初霊安室
ICUでの医師の死亡確認が済むと病院地下にある霊安室に運ばれ、
病院専属の葬儀社の方がお焼香のセッティングしてくれ、そこで、妻と子を待ちました。
おじいちゃんは生前、ある葬儀社に積み立て金がありそれを使うとのことで、
その葬儀社に連絡し、火葬までその葬儀社に遺体を置いてもらうという段取りになりました。
初葬儀社
葬儀社の車で遺体を霊安室から葬儀社まで運び、お焼香をした後、お葬式の段取りをしました。
50万円の積立金でおさめようとすべてのオプションを安い金額のものにと指定したにもかかわらず、
5万円オーバー&段取り2時間という最低な段取りで(葬儀社の方がぽんこつ極まりなかった)、
なんとかお葬式は5月15日午後1時に決まりました。
この時、5月10日夕方6時、ジェットコースターのような一日でした。
初お骨持ち
5月15日午後1時、火葬場に親族8人のみ集まり、葬儀社の方のナビで葬儀社から運ばれた遺体の棺に花を入れ最後のお別れをしました。
焼かれて出てきた骨の説明などを受け、箸で骨を骨壷に入れ、お骨をおじいちゃんの家まで持ち帰りました。
途中、お骨が意外と重いので地面に下ろそうとしたら父親に止められ、下ろしちゃいけない物と初めて知りました。
残されたおばあちゃんが高齢なので、おじいちゃんが亡くなったことに対する手続き全般を私がすることになったので、それもログとして残したいと思います。
conohaのObject Storage Service触ってみた
今、個人サービスはさくらvps使ってるんですが、conohaに替えようとサイト見てたら
conohaのapi触るとクーポンもらえるとのことでgoの勉強を兼ねてライブラリ書いてみた
とりあえず一番使いそうなObject Storage Serviceのライブラリ
pdevty/conohaswift · GitHub
amazon s3のように独自ドメイン使えないっぽいけど
前面にリバースプロキシ立てれば静的webサイト運用できそう
参考
ConoHa API index
OpenStack API Documentation
Amazon S3による静的Webサイトホスティング
ConoHaオブジェクトストレージ(OpenStack Swift)でWEB公開した超長いURLを短くする方法 - Qiita
polymerに入門してみた
自分のサイトをマテリアルデザインmaterial designで作り直したいと思い
cssフレームワークを探していたらpolymerにたどり着いた
公式サイトのチュートリアル
Getting the starter project - Polymer
をこなして
中の人っぽいのyoutube動画
robdodson/polycasts · GitHub
見て雰囲気つかんで
動画見ながら
Introducing the Polymer Designer tool - YouTube
デザインツール使ってみた
Designer
現時点でバージョンが0.5で重たいとか仕様が変わるとかあるみたいだけど
とりあえず使ってみようと思う
参考
Real-Time Apps with Polymer and Firebase - YouTube
Polymer Polytechnic Codelabs
Introducing the Polymer Designer tool - YouTube
Polymer Polytechnic Speaker Deck - YouTube
robdodson/polycasts · GitHub
Polymer コードラボに参加しました(資料まとめ) - dackdive's blog
golangのwebアプリをherokuにデプロイ①
このスクリーンキャスト通りでいけます。
GopherCasts
ファイルを3つ用意して
lesson10/main.go
package main import ( "flag" "log" "net/http" ) func main() { port := flag.String("port", "8080", "HTTP Port to listen on") flag.Parse() log.Println("Starting Server on", *port) http.HandleFunc("/", handler) log.Fatal(http.ListenAndServe(":"+*port, nil)) } func handler(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Hello World!")) }
lesson10/.godir
lesson10
lesson10/Procfile
web: lesson10 -port=$PORT
あとはherokuにgit pushするだけ
git init git add -A git commit -m "initial commit" heroku create -b https://github.com/kr/heroku-buildpack-go.git git push heroku master heroku open
・・・動かず
heroku logsコマンドでログを確認すると
no web processes running
とのことで
herokuのweb dashboardでdynoを確認すると0だったので1にすると
うごいたー
参考
GopherCasts
Getting Started with Go on Heroku
GoアプリをHerokuにデプロイする - MOL
hugoでブログ①ローカル環境構築
環境は前回で作成済みなので
まずは公式ドキュメント通りにhugoをインストール・・・けどうまくいかず
windows用のバイナリーダウンロードすることに
Releases · spf13/hugo · GitHub
落としたhugo.exeをパスの通っているGOPATH/binに置いて
mkdir /path/to/site
cd /path/to/site
hugo new site .
テーマはこれに決めてたので
vjeantet/hugo-theme-casper · GitHub
mkdir themes
cd themes
git clone https://github.com/vjeantet/hugo-theme-casper casper
あとは最初の記事を書いてサーバー起動しhttp://localhost:1313/にアクセス
hugo new post/first.md
hugo server --theme=casper --buildDrafts --watch
いけたー簡単