はじめに みなさん、メリークリスマス! 22日の枠に欠員が出たので、go/parserパッケージを使ってAST(抽象構文木)を取得する方法についてまとめたいと思います。 goパッケージについては、簡単な式の評価機を作ってみるという記事も書いているので、そちらもぜひ読んで下さい。 なお、この記事を執筆時点のGoの最新バージョンは1.7.4です。 ノード go/parserパッケージでは、いくつかのParseと名前のついた関数でAST(抽象構文木)を取得することができます。ASTの各ノードを表す型は、go/astパッケージで提供されています。そしてそれらの型は、以下のast.Nodeインタフェースを実装するように定義されています。 ast.Nodeインタフェースは、PosメソッドとEndメソッドを持ち、共にtoken.Pos型の値を返します。token.Posはノードのコード上の位置を表します
2019/07/07追記 結構前からSlackの仕様が変更されて動作しない状態となっております m(_ _)m 修正中です この記事はSlack その2 Advent Calendar 2016の25日目の記事です。 なんとか間に合いました・・・。 追記:バグを修正しました。 128px x 128px以下の画像でも正常に追加できるようになりました。 追記:gifとアニメgifに対応しました。 ただし、リサイズ後でも64KBを超えてしまうとアップロードに失敗します。 追記:予定とは全然関係なく複数ファイルのアップロードと複数チームへの同時アップロードに対応しました。 はじめに 以前にSlackのemojiの引っ越しを作り、emojiをアップロードするためのノウハウが出来たので、それを応用してemojiの追加をドラッグ&ドロップで出来たら便利なのでは、と思い作りました。 実は以前Rubyでも
メリークリスマス!(昨日) これはVue.jsアドベントカレンダーの記事です。 代打です。 僕は初日にサーバーサイドレンダリングについて書きましたが 今回もサーバーサイドレンダリングです。 今回の内容は本当は初日に書きたかったのですがずっとうまくいかずに悩んでいたけどつい昨日できたGoサーバでのSSR(サーバーサイドレンダリング)です。 GoでSSRをするメリットとしてまず一つにポータビリティです。 Node.jsもポータビリティはありますが、Goであればアセットもワンバイナリにまとめることができるのでバイナリを配置するだけでWebUIがあるツールも作ることもできるかもしれません。 そして、僕にとって1番のメリットであるApp Engine(GAE)でSSRができるようになります! SSRについては初日の記事を見てください! サンプルの実行 https://github.com/k2wan
この記事は Go Advent Calendar 2016 最終日の記事になります。参加頂いた皆さんお疲れさまでした。 今年も昨年に引き続き、25人以上の方が「何か書きたい」と名乗り出て頂き、go、go2、go3 の3本(2年連続)、計75エントリが揃う事になりそうです。Go 言語の人気が高まってきているのが良くわかるアドベントカレンダーでした。 あらすじ 普段あまり表だった所には姿を現さないのですが、今年は builderscon 2016 に登壇させて頂きました。 とても新鮮な体験で、味わった事のない緊張の中、いろいろな反響を貰いました。いい体験が出来たと思います。ありがとうございました。登壇し終えて数時間はなんだか緊張のほぐれた変な感じを味わっていました。懇親会の時あたりでようやく皆さんとお話する事ができて Vimmer の皆さんと Vim 談義をしてきました。 その懇親会で香り屋さ
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? はじめに GoはC言語やその後のオブジェクト指向言語における課題をシンプルな手法で解決しており、大変使い勝手の良い言語になっています。 具体的にはC言語と比較すると以下のような点が優れています。 充実した標準ライブラリ コンパイルの容易さ 公式フォーマッター クロスコンパイル、マルチプラットフォーム対応 複数返り値によるerrnoからの脱却 インターフェースによるオブジェクト指向の実現 GC(Garbage Collection) スタックやヒープを意識しないプログラミング 整数仕様の整理 今回はこの中でも紹介されることが少ない整数の仕
はじめに 本投稿は、Schooの年末特別企画「Schoo advent calendar 2016」への投稿記事になります。 14日目の今回は、先日公開したSchooアプリver2系のバックエンド構成について、個人的なピックアップポイントと共にお届けします。 それでは、どぞー サーバー構成と概要 まずは、簡単な構成図です。クライアントに近い方から紹介していきます。 ELB/TCP 最前面にELBを配置しています。 こちらはロードバランサーとして利用しているのではなく、2個あるサーバーグループへのアクセスをリリース毎に切り替える目的で利用しています。 (TCPモードにしているのは、HTTP/2を扱うため) Pickup! ELBに登録するEC2インスタンスを動的に入れ替えてトラフィックの切り替えを実現しているんですが、それを自動でやってくれるのはSchoo開発チームのお友達「すくすけ」ですよ
GoにはGo 1 promise of compatibilityがあり基本的にGo1.xでAPIのインターフェースが変更されることはない.そのため過去に書いたコードを新しいGoでビルドしてもぶっ壊れることは(おそらく)ない.ただリリースごとに新しいパッケージや関数/メソッドはどんどん追加されていくため古いGoで新しいコードをビルドすることはできないことがある(例えば,標準のcontextパッケージを使っているコードはGo1.7以降でしかビルドすることができない). GoはリリースごとにGC(e.g., Sub-millisecond GC pauses)やコンパイラ(e.g, SSAの導入)や各標準パッケージの改善が行われる.そのため自分は「どんどんバージョン上げていけば良い.だからパッケージも同じく最新のバージョンで動くものを提供すれば良い」と思う.がこれは個人的な思想で誰かが使える形
はじめに この記事はGo (その3) Advent Calendar 2016の18日目の記事です。 最近Goの勉強がてら、とある社内向けWebサービスのAPIを叩くCLIツールを書いてます。 有名どころのWebサービスならたいてい既に誰かがSDKなりCLIツールを作ってたりするので、それを使ればよいと思いますが、クローズドな社内向けのWebサービスとかだと、まぁ欲しい人が自分で書くしかないですね。 で、簡単なプロトタイプが動くようになったので、このあたりで覚えたことを整理してまとめてアウトプットしておこうかなと思います。 内容的には サブコマンド形式のCLIツールを作り方 spf13/cobraの使い方 viperと連携した透過的な設定ファイルの読み込み version番号の埋め込み、Makefile pkg/errorsによるエラーの伝搬、contextを使ったタイムアウト 標準のne
はじめに みなさんはGAE/GoのSDKがどうやってコードをビルドしているのか知っていますか? 私は正直ふわっとしか理解できておらず、きっと小人さんがビルドしてるんだろうなくらいに思ってました。 当然、小人さんじゃなくて、どこかにgoapp buildとかを呼んでいるコードがあるんだろうとは思っていましたが、どうやらgo-app-builderというツールがそれをやっていることを知ったので、調べてみることにしました。 今回は、ソースコードを読んでいく過程で分かったことをまとめたいと思います。 なお、ここではSDKのバージョンはappengine-1.9.48を使っています。 ソースコードはどこにあるのか さて、go-app-builderはどこにあるんでしょうか。きっとSDKのディレクトリのどこかです。 実はSDK以下にあるgorootの中に入っています。
はじめに DockerにGolangの環境を閉じ込めたときデバッグどうするの?と思ってなかなか情報を集められなかったのでまとめます。 検証環境 ホスト側 Windows10 + Boot2Docker + VisualStudioCode Sierra + Docker for Mac + VisualStudioCode コンテナ側 golang:onbuildを使用(執筆時点ではgolang 1.7) Golangのデバッガについて VisualStudioCodeではDelveを使うようなので、Delveを使います。 ドキュメントやissuse見てるとリモートデバッグもサポートしていて、もしかしてDockerもいけるかもってところが発端。 Dockerのリモートデバッグについて リモートデバッグが可能なようで、こちらをベースにGolang用に書き換えます。 Live Debuggin
初めまして。マネーフォワードでフロントエンドエンジニアをしている高山です。 Money Forward Advent Calendar 2016と言う事なんですが、 Advent Calendarを書くのが今回初めてでもあり、Qiitaに投稿するのも初めてだったりします。 「え。なに、アウトプットしてないの」と、思われがちですが、Web帳と言う意識の低いゆるいブログをかれこれ6年程書いております。 気になった事とか、メモ程度に不定期に書いていたりします。 また、それとは別に、今年の頭くらいに 新たなCSS Architecture として、APBCSSを提唱させていただきました。 CSS Architectureが、「お。良いなぁ。」と思った方は是非導入して頂ければ幸いです。 と言う訳で、自己紹介はそのぐらいで、今回はタイトルである通り、CSSでもなく、JavaScriptでもなく、Rub
初めに この記事はGo Advent Calendar13日目の記事です。 コンテストサーバとは 競技プログラミング1のコンテストを開催するためのサーバです。 一般に、問題の公開、ユーザの提出コードを判定、その結果をもとにランキングの作成などの機能が求められます。 UIはWebだったり専用アプリケーションだったりしますが今回は使い勝手の良いWebを採用しました。 製作にあたって直面した課題 Web UI製作経験なし。 C++、CoffeeScript(Node.JS)、Go以外の言語をほぼ触ったことがない。 DataBaseに関しては知識のみ、実際に運用したことはない。 ユーザの提出コードを判定するために実行している際に使うサンドボックスの製作に必要なLinux関連の知識があまりない。 といったかなり致命的な問題が並んでいて厳しい状況でした。 最初はC++での製作を試みていましたがC++に
WHY 機械学習のモデルはできたけど、サービスインするには何らかの形でweb側から動作できる形にする必要があります。 Railsだと重すぎるし、Go言語使いたい。 そのようなモチベーションから私はGo言語でAPIを作成しました。 Go言語のWEBフレームワークは多々ありますが、今回紹介する記事はrevelを用いています。 コンテナとコードを公開しているのですぐに動作を確認することが可能にしています。 Docker: https://hub.docker.com/r/masayaresearch/go_api/ github: https://github.com/SnowMasaya/go_revel_jwt_mysql revelを採用した理由は下記です。 testのための機能が揃っている deployも簡単 必要なサンプルがある WHAT 何をすることを想定しているか 簡単な認証 AP
この記事は GetWild Advent Calendar 2016 - Qiita の12日目の記事です。 ~ get wild and tough ~ と言われたらもちろんシティーハンターですね。今回、記事を書くにあたって、AAを探しましたが、シティーハンターのあまりネタとしては使いにくいAAしかなくて「ぐぬぬ…」となりました… 「Get wild 禁断症状」とは 業務中にGETWILD分が切れて禁断症状がでそうになった際に必死に耐えるための方法論~#ghq ないし go getで頑張る go get もしくは ghq get もGETWILDするチャンスかもしれません。出来る時にしておかないと頭の中をエンドレスでGETWILDが流れ、ゾーン状態はどこへやら、いつの間にか1日が終わってしまうかもしれません なるほどなるほど。 go get という文脈にカスタマイズされた Get wil
はじめに 皆さんはgoパッケージを使ったことはありますか?私は、Go!Go!言いながら、恥ずかしながら、あまりまともに使ったことがありませんでした。最近は、仕事でもAST(抽象構文木)を弄り倒すことがあるので、今回はgoパッケージに触れたいと思います。 ここでは、簡単な四則演算などを評価し、結果を返すREPLを作ってみます。一見難しそうですが、ほとんどgoパッケージの機能を使うので、非常に簡単です。 ASTへパースする まずは入力された文字列をパースし、ASTを生成してみます。ここでは、式の評価なので式単位でパースします。パースには、parser.ParseExprを用います。 たとえば、以下のように使用できます。 expr, err := parser.ParseExpr("1+1") if err != nil { panic(err) } ast.Inspect(expr, func
はじめに 皆さんはgorenameというツールをご存知でしょうか? golang.org/x/tools/cmd/gorenameで公開されている、Goのリファクタリングツールです。 ここでは、このツールを自分のコード上でライブラリとして使う方法と使いやすいリファクタリングツールの形について説明できればと思います。 なお、ここで扱う話はVimConf 2016において、エディタの壁を越えるGoの開発ツールの文化と作成法(ビデオ)というタイトルで話したものと、一部重複していますので、そちらもよかったら見て下さい。 gorenameを使ってみる まずは、gorenameをインストールして使ってみましょう。すでに使ったことある方はここは飛ばしてもらって構いません。 もしかすると、お使いのIDEやエディタによってすでにインストールされているかもしれません。 vim-goをお使いの方は、:GoRe
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く