pixivエンジニア勉強会 - Golang利用の現状確認会 「月間38億PVからの 全インプレッションに耐えるgolang製配信サーバの話」
この記事は Google Cloud Platform(1) Advent Calendar 2016 の15日目の記事です。 普段は golang をやってるアプリケーションの人っぽい感じになっていますが、他にも色々とやっています。(と、いうアピールをたまにしておかないと) さて、今回は GKE + golang のデプロイ話でもしましょう。結局、golang が絡んでいますね。 準備 Docker をインストールしておき、使用できるようにしましょう。 コンテナイメージの作成・プッシュ プロジェクト構成は下記のようにし、docker ビルドしたイメージを Container Registry にプッシュするようにします。 helloworld/ ├── deployment.yaml ├── Dockerfile ├── main.go └── service.yaml main.go
Go言語とは、Googleが開発した新しいプログラミング言語です。 当サイトではこの新しい言語についての情報を集約していきます。 このサイトの更新が滞っており、情報が古くなっておりますのでご注意ください。 Go言語は、システムプログラミング言語であり、目標は、C++のような多目的システム言語です。このドキュメントは、熟練したC++プログラマ向けに書かれたもので、GoとC++との違いについて説明します。両言語の類似点については、このドキュメントの範囲外です。 より一般的なGo言語の手引きは、チュートリアルまたは実践Go言語をご覧ください。 Go言語の詳細な解説は、Go言語仕様をご覧ください。 コンセプトの違い Go言語には、コンストラクタやデストラクタを持つようなクラスはありません。Go言語では、クラスメソッド、継承によるクラスの階層、仮想関数が無い代わりとして、あとで解説するインタフェース
📖 Just launched Data Learning Center - Resources on data engineering and data infrastructure The Customer Data Platform for Developers Website · Documentation · Changelog · Blog · Slack · Twitter As the leading open source Customer Data Platform (CDP), RudderStack provides data pipelines that make it easy to collect data from every application, website and SaaS platform, then activate it in your
import ( "io" "golang.org/x/net/websocket" ) func EchoHandler(ws *websocket.Conn) { io.Copy(ws, ws) } *websocket.Connはio.ReadWriteCloserが実装されており、クライアントから来たWebSocketのメッセージは*websocket.Conn.Readで読むことができ、また*websocket.Conn.Writeで送ることができます。なので、io.Copyで逐次読みだして同じ内容をまた書き込むことで簡単にecho serverを書くことができます。 これをサーバに組み込むのも簡単です。 import ( "net/http" ) func main() { http.Handle("/echo", websocket.Handler(EchoHandler))
GoのコードをPerlから呼び出せるようにするgo2xsを書いてみました。 使い方 Perlから使いたい関数に以下のようにgo2xsで始まるコメントを付けておきます。 package main //go2xs hello func hello(str string) string { return "Hello " + str } go2xsをgo getして、xsのグルーコードを作成。 その後通常のPerlモジュールと同じ手順でコンパイルします。 Go 1.5から入ったShared Libraryの機能を使っているのでGo 1.5が必要です。
皆さんこんにちは、Janです。最近シンプルなGo言語にハマって学び始めました。初めてのブログでGoのパッケージ管理ツールについて説明します。 dep とは npmのようなパッケージ管理・依存関係管理ツールです。 dep と go getの違い dep とgo getは類似のことをやっていますが、違う目的で使用されています。 ではそれらの違いを見てみましょう。 go get 自分のgoプロジェクトに外部パッケージを取得することで作業できるようになり、それ全てが$GOPATH/src/github.com/の下にダウンロードかつインストールされて共有で使用できるようになります。 dep 自分のコードに依存関係を使いたいなら、それをダウンロードして使用することができます。 ワークフローとして,コードにインポートを追加して、dep ensureコマンドで実行することによってGopkg.toml,G
最初はCLI用のフレームワークに codegangsta/cli を使っていました。 サクっと書けるのですけれども、ちょっとややこしいことをしようとした時に悩むんですよね。 ということで、もしかしたら他の方がいいのかなーなどと考えた次第。 で、spf13/cobraなんですが、KubernetesやHugoが採用しているということで興味はあったものの情報があまりなかったので、まじめにREADMEも読んでいなかったのです。 https://github.com/spf13/cobra あらためてちゃんと見てみたところ、あ、これはすばらしい、という点が多々ありまして、既存のコードをすぐcobraに書き換えました。 ・サブコマンドが個別の.goファイル単位で追加できる ・サブコマンドにコマンドを追加することができる ・フラグにスコープが付けられる(サブコマンド以下へ引き継ぐか否か) ・実行前後に
What is Rust Rust is a systems programming language sponsored by Mozilla Research. It moves fast and steady with a 6-week release cycle ever since its 1.0 version in May 2015. See the following list for some of the features that most attract us: The design principles of Rust resemble with C++ in Abstraction without overhead and RAII (Resource acquisition is initialization). The minimum runtime and
この記事は Vim Advent Calendar 2015 の 11日目の穴埋め記事(2015/12/22執筆)です。 まずは以下のデモ画像(別ウィンドウ)を見てください。 2015年のアドベントカレンダーを熱心に追っていた賢明な技術者諸君には、もう説明は不要でしょう。 ソースコードは koron/vim-gopher に置いてありますので、チェックアウトして gvim -S game.vim することで試せます。ただし動作確認・保証は Windows版の +kaoriya な gvim でしかしておりません。また解像度も画面幅1920ドット無いとおかしなことになるので、異なる環境の場合は各自で調整してPRなどしてください。 参考資料: Vim scriptによるゲームの新アーキテクチャの考察 本物の golang を… 本物の Gopher を、お見せしますよ。 GIMP 2を使って、
Go is great for building command-line applications. We built one: Dolt, the world's first version-controlled SQL database. We wrote our own command line parser for handling all of Dolt's subcommands and arguments, but maybe we shouldn't have. There are lots of great ones out there that if we might have used instead if we were starting the project today: spf13/cobra has great support for code gener
今日の料理 カマンベールミルフィーユ鍋。 コラッツの問題 コラッツの予問題というとピンとこないかもしれないが、別名「3n+1問題」と言われたら、何処かで聞いたことがある人もいるんじゃないんだろうか。内容自体は簡単で、「任意の整数が与えられたとき、その整数が偶数ならば2で割り、奇数なら3倍に1を足す。そうしてできた数を先のルールに従って、同じように数を作る。こりを繰り返し、1になったら終了する」というもので、これが停止するかどうか、という話である。。 どんなアルゴリズムであっても、それが停止することが保証されていなければ、実際に使うときに非常に困ったことになる。このコラッツの問題が直接なんの役に立つのかは置いておくとして、このような単純なアルゴリズムでさえ、停止するかどうかの証明は難しいらしいのだが、この説明を聞いたら、直感的には「これは何となく止まりそうだ」と思うんじゃないかと思う。実際、
# go run app.go go: finding github.com/census-instrumentation/opencensus-proto v0.2.1 go: finding github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 go: finding golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0 go: finding golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e go: finding golang.org/x/tools v0.0.0-20191216173652-a0e659d51361 go: finding google.golang.org/api v0
In this hacking session, Andrew Gerrand and Brad Fitzpatrick write the new version of tip.golang.org, a site that serves leading-edge documentation for the Go core. Source → https://goo.gle/3Od2yby Hacking with Andrew and Brad Playlist → https://goo.gle/3M57ZqX Subscribe to The Go Channel → https://goo.gle/go-subscribe #GoLang #HackingWithAndrewAndBrad
GolangはGo1.6でHTTP2をサポートした. また2017年2月にリリース予定のGo1.8ではServer Pushを行うためのメソッドも新たに追加される(使い方は HTTP/2 Server Push · Go, the unwritten parts が詳しい). 今後GolangでのHTTP2の利用はさらに増えると考えられる. HTTP2を使うアプリが増える分そのテストも重要になる. Go1.6におけるHTTP2サポートは素晴らしくAPIの変更なしにサポートが行なわれた. Server側でh2を有効にするにはListenAndServeTLSで起動すればよいしClientもDefaultClientを使えばよい. Golangでサーバーのテストをするときはhttptestパッケージが主に利用されるが,これほど簡単に使える訳ではない. 以下のように軽く設定を入れる必要がある.
This blog post gives code samples of OAuth authentication with Go. We cover the authentication using Facebook, LinkedIn, Github, Twitter and Google Plus.Go (Golang) OAuth for Facebook, Github, Twitter and Google Plus Published by casertap on October 12, 2015 This blog post gives code samples of OAuth authentication with Go (Golang). We will cover the authentication using Facebook, LinkedIn, Githu
アドベントカレンダー1番手です。 僕から見た今年のGoogle Cloud PlatformはMachine LearningとFirebaseかなーという印象でした。 データベース周りではSpannerも熱いですね。高くて使えてませんが ちなみに僕の好きなGoogle App Engineの今年ははChannel APIがシャットダウンされたこととGo 1.8が使えるようになりました。 だけど、はやくGo 1.9来て!!!!! 去年はGAEの構成について書きましたが今年はAPIをどうするか?という事を書きます。 gRPCとは gRPCは、Googleが開発したオープンソースのRPCフレームワークです。HTTP/2の上で Protocol Buffersでシリアライズされたデータを高速に送ることができます。 gRPCはProcol BuffersのIDLを使ってサービスとメソッドを定義しま
How the Golang concurrent GC achieves low latencies in real-time systems: a visualization of the algorithm and an empirical comparison with other languages. Each day, Pusher sends billions of messages in real-time: source to destination in less than 100ms. How do we achieve this? A key factor is Go’s low-latency garbage collector. Garbage collectors are a bane of real-time systems because they pau
はじめに Prometheus でアプリケーションの構築をしているとどうしてもこの値が取りたいのに... と思うことが多々ある。Pushgateway も選択肢として上げられるが今回は選択肢を増やしてほしいという意味でもExporterの実装方法について検討していきます。ExporterはPrometheusのpull モデルに適合し、監視対象のライフサイクルと一貫性があり、スケーラビリティと自動検出の利点を享受できるため、Pushgatewayよりも推奨される方法です。ただし、特定のユースケース(サービスレベルのバッチジョブなど)では、Pushgatewayの使用が適切な場合もあります。Pushgatewayを使う際には以下の問題点があるので注意が必要です。 複数のインスタンスを1つのPushgatewayで監視すると、単一障害点とボトルネックが発生する可能性がある。 Prometheu
At Apple, new ideas have a way of becoming excellent products, services, and customer experiences very quickly. Bring passion and dedication to your job and there's no telling what you could accomplish. Are you ready to do your life’s best work? Are you deeply accountable for your work? Your real passion for product ownership and track record of product development will prove critical to your succ
はじめに GoはC言語やその後のオブジェクト指向言語における課題をシンプルな手法で解決しており、大変使い勝手の良い言語になっています。 具体的にはC言語と比較すると以下のような点が優れています。 充実した標準ライブラリ コンパイルの容易さ 公式フォーマッター クロスコンパイル、マルチプラットフォーム対応 複数返り値によるerrnoからの脱却 インターフェースによるオブジェクト指向の実現 GC(Garbage Collection) スタックやヒープを意識しないプログラミング 整数仕様の整理 今回はこの中でも紹介されることが少ない整数の仕様について紹介したいと思います。 整数オーバーフローの仕様 整数オーバーフローについてGo言語仕様を確認すると以下のように記載されています。 Integer overflow For unsigned integer values, the operatio
これは Go3 Advent Calendar 2019 の 3 日目の記事です。 今年 2 月にリリースされた Go 1.12 において、 公式の静的解析ツールである go vet が golang.org/x/tools/go/analysis を使う形に書き直されました。 Analyzer golang.org/x/tools/go/analysis は Analyzer (静的解析モジュール) を作るためのパッケージで、 go vet が行う様々な処理は個別の Analyzer として分離されこのパッケージ配下に格納されています。これらは外部からも参照できるようになっており、サードパーティの Analyzer から参照することもできます。 Diagnostic Analyzer は、解析して見つかった問題を Diagnostic (診断) として報告します。 Diagnostic
ER図とは ER図のEはエンティティ(Entity)の略で、Rはリレーションシップ(Relationship)の略です。つまりER図は「エンティティ=モノ」と「リレーションシップ=関係」の組み合わせでシステムのデータやデータ間の処理構造を設計します。例として「顧客が商品を注文する」という処理をER図で表すと以下のようになります。 簡潔に説明をすると、ER図とはテーブル間の関係を表した図です。 RDBのようなデータベースを用いてシステムの開発および運用を行う際に、テーブル間の関係を直感的に理解できるようになります。 なぜER図が必要か 実運用を行なっているシステムとなるとテーブル数が数十に及ぶことが多々ありますので、ER図のようなものなしでは複数のテーブル間の関係を把握することが困難となります。 なぜ自動更新が必要か ER図の様なドキュメントは、日々の忙しい開発業務の中では大抵の場合優先順位
スクリプト言語のような感覚で、サックっとツールを作成できるのは嬉しいですね! リンクバルではエンジニアを積極募集中です。 興味のある方は、こちらからご応募ください! ※ 著作権注記 The Go gopher was designed by Renee French. (http://reneefrench.blogspot.com/) The design is licensed under the Creative Commons 3.0 Attributions license. Read this article for more details: https://blog.golang.org/gopher
はじめに みなさんはGAE/GoのSDKがどうやってコードをビルドしているのか知っていますか? 私は正直ふわっとしか理解できておらず、きっと小人さんがビルドしてるんだろうなくらいに思ってました。 当然、小人さんじゃなくて、どこかにgoapp buildとかを呼んでいるコードがあるんだろうとは思っていましたが、どうやらgo-app-builderというツールがそれをやっていることを知ったので、調べてみることにしました。 今回は、ソースコードを読んでいく過程で分かったことをまとめたいと思います。 なお、ここではSDKのバージョンはappengine-1.9.48を使っています。 ソースコードはどこにあるのか さて、go-app-builderはどこにあるんでしょうか。きっとSDKのディレクトリのどこかです。 実はSDK以下にあるgorootの中に入っています。 $ ls $(goapp env
空いていたので穴埋め。 はじめに データベースを扱うプロジェクトでは、オンコードで SQL を書く事が割と多いのですが、そういったソースコードに埋め込まれた SQL はプレースホルダを使って値を取るので直接実行する事は出来ません。 RDBMS によっては :変数名 ではなく ? や $1 といった表記をする物もあります。こういった SQL は直接実行できない為、どうしても結果がイメージし辛くなるのですが、2 Way SQL という方法を使う事で解決できる事があります。 2 Way SQL とは 2 Way SQL は SQL のコメントに IF や ELSE、END といった制御構文を埋め込む事で、直接実行する事も出来るし、プレースホルダを使ったオンコード用の SQL としても使う事ができるといった物です。筆者が知る限り明確な仕様は見当たらないのですが、昔は Doma/S2Dao といった
Hey folks, I’m starting getting my feet wet with Golang and plan to document the process so it would be easy for me to recall it in the future and probably useful for some of you as well! In this first post, I will cover some basic things like what Golang is for, how to install it and how to write and run your first program. If you’ve been a developer for about a decade you’ve probably got your ha
Having seen the cool things it’s now possible to do using using Google BigQuery’s public data sets (notably this), I decided to take a look at the top imported golang packages on a weekly basis. Interested in finding the best logging solution for your go application? or perhaps you want to make sure you are using the right HTTP request multiplexer? What better way is there than good old democracy!
概要GolangでURLルーターを自作したので実装するまでの過程をメモしておく。 準備URLルーターを実装する際に行った下準備をまとめる。 データ構造とアルゴリズムURLをどのようにマッチングさせるか、というロジックについて検討する。 多くのライブラリでは、データ構造として木構造がよく扱われているので、どんな種類の木構造を採用するかを考えてみた。 文字列探索に特化した木の中で、時間的・メモリ的計算量がよりベストなものを選定しようとすると、基数木というのが良さそうに見えるので最初はそれを採用しようとしていたのだが、実装が難し過ぎて挫折をした。 もう少し身近でシンプルなものをということでトライ木を採用することにした。 net/httpのコードリーディングnet/httpが持つマルチプレクサの拡張として実装を行うため、内部の仕組みについてある程度理解しておく必要がある。 GolangのHTTPサ
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く