【Go言語】 webapp GO Part1 【Golang】 [無断転載禁止]©2ch.net
改訂2版 基礎からわかる Go言語、古川昇(エイベル)、2015 翻訳プロジェクト、公式サイトの日本語訳 http://golang.jp/ そういやGoogle Devfest 2010に参加したときに GopherのTシャツ貰ったな https://sites.google.com/site/devfest2010japan/ GAE/GO専用のフルスタックWebフレームワークってないの JavaのSlim3みたいなのがいい あとGAE/PythonみたいなGUIワンボタンでデプロイできるツール欲しい https://seleck.cc/article/363 >MIIDASは新規開発のプロジェクトなので、開発言語をいくつかの候補の中から検討しました。 >正月休みにメジャーな言語をはじめ、RustやElixirなどの新しい言語もさわってみてどれを使うのが良いのか考えました。 >結果としては、MIIDASではGo言語を使うことに決めました。 >自分でさわってみて「これは流行るな」と確信したというのが一番の理由ですね。 触ってみたけどオブジェクト指向になれてると違和感あるな 途中送信してしまった class Dog { Name string func Bark() string{ return "bow-wow" } } どうしてもこう書きたくなる type Dog struct{ Name strig } func (d *Dog) Bark() string{ return "bow-wow" 上のgoの書き方だとメソッド定義が離れすぎててもにょる LL言語だと負荷が増えた時にボトルネックになりそう ↓ 最初からポストC言語と呼ばれる高速なGO言語を使えばいいんじゃね? ↓ 資金的余裕がある大手BtoCベンチャー企業での採用例が急増 利用事例が増えスタートアップ企業での採用も急増(寄らば大樹の陰) RubyやPHPでかかれた既存webアプリの一部分だけをGo言語で書き直す企業が急増 ↓ ワイ「Go言語がこれから来る!!」 ←いまここ go高速なんか。出た当初はjava程度だけど、コンパイルがクソ早いってのがウリだった記憶。 https://www.amazon.co.jp/dp/B01FH3KRTI Kindle Unlimited:読み放題対象 月々980円で技術書読み放題 これはいいな IT関連は今のところ、ほぼその本出してる翔泳社だけかな? アメリカの方探してみたけど、そっちはどこも参加してない気がする。 Purpose Golint differs from gofmt. Gofmt reformats Go source code, whereas golint prints out style mistakes. https://github.com/golang/lint/blob/master/README.md golintのreadmeでは、上のような説明になっていた。 こういう記事を参考にしてみるといいかも。 http://blog.amedama.jp/entry/2016/03/31/222050 Golangを初めて本番投入したぜ! http://blog.yusuke.be/entry/2016/01/18/111838 PHPとGoって何が違うの?LIGが自社サービス開発にGo言語を採用したお話 http://liginc.co.jp/284306 ここ最近になって急に採用しました記事増えたな キャズムを超えられたのか 昨今のwebサービスはスマホアプリ化する必要がある スマホアプリだとUXの関係でSPA(SinglePageApplication)にするのが望ましい バックエンドはAPIサーバとしてJSON吐き出すだけでいいので この性能が高いGolangが選ばれるようになった >>26 JSONならRuby on Railsも得意なんすわ 相手が最も得意な分野で勝負を挑んじゃダメでしょ Railsはチュートリアルの豊富さ、学習コストの低さ、昨今のRailsライクなWAFの原 型となった功績を売りにするべき >>31 いやいや てめーらの100倍の速度でコーディングしてサービスをローンチできるから In Go HTTP handlers, why is the ResponseWriter a value but the Request a pointer? (GoのHTTPハンドラはなぜResponseWriterが値で、Requestがポインタなの?) http://stackoverflow.com/questions/13255907/in-go-http-handlers-why-is-the-responsewriter-a-value-but-the-request-a-pointer なるほどね AWS Lambda(FaaS)のサポート言語に入ってないのが致命的だな https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/welcome.html >AWS Lambda がサポートするいずれかの言語(現在は Node.js、Java、および Python)でコードを指定するだけです。 https://cloud.google.com/functions/docs/writing/ >Google Cloud Functions are written in JavaScript, and execute in a Node.js runtime. 今後のトレンドはサーバレスになるの確定してるから、せめてGCFだけでもいいからGolangに対応してもらいたいところだ メルカリの会社がGAE/Go使ってるんだっけ https://news.thepedia.co/article/400/ >今回「アッテ」でGoとGoogle App Engineを使って非常に良かった。Goは非常に有力なウェブアプリ開発手段だと思う。 >また、Google App Engineに触れて、PaaSの時代が本格的に始まってきたと感じた。 >PaaSエンジンは今までもHerokuなどあったが、その中でGoogle App Engineが突き抜けて優秀だと思う。 >Google App Engineは毎日のようにアップデートもされていて非常に便利。 PaaSも悪くないよ Ruby on railsからこちらへ乗り換えるメリットはありますか? マルチうぜぇ 人に聞かなきゃ判断できないレベルの奴には メリット一切無いから おとなしくrails使ってろよ GolangはWAFのデファクトが決まってない&WAFに関連した日本語文献が少ないところが問題 これだとRails使い(PHPerの後輩たち)には扱いきれない 今からGolang使ってWebアプリケーション作るとしたらGAE/Goがいいの? PaaSを選択すればインフラ周り丸投げできるしメルカリアッテの実績があるから 是非ともやってみたいのだが、全文検索するだけで課金されるのがモニョっとする メルカリアッテの検索部分は何をつかってるのだろう 資料に書いてあったか DAU100万で費用200万 そのうち28%がSimple Searches DAU100万ってことは月間PVは最低でも3000万 広告がビジネスモデルだとCPMはおおよそ100円程度なので 月300万〜の売上 ちと厳しい気もする Railsから、Goへ変えるなんてのは、Git Hub みたいな大規模サイトの話だろ 中小企業では、アプリの速さより、開発・保守費用を優先すべし >>44 一日に4000UV 80000PVの俺のRailsサービスではクソおもかった まぁ日曜プログラマだから アマチュア同然なんだけどね アプリの速さはAWSインスタンス費用に直結するからなぁ Golangの開発・運用・保守費用はRailsより安いぞ シングルバイナリだからデプロイ高速だし https://cloud.google.com/appengine/docs/flexible/custom-runtimes/ >App Engine flexible environment で custom runtime を使えば、他の言語でもコードを書くことができます。 もう何でもいけるんじゃね? Google App Engine for Goスレないの? 今時レンサバ使ってる奴いるのか 転送量青天井が怖いからサクラVPS使う奴はいるかもしれんが 大抵はクラウド(AWS)じゃないの goって後発な割にnull安全じゃないけど なんか理由あるの? Java だって nullpo exception 出すぞ この場合のnull安全というのは nullが代入不可な変数が作れる言語を指してる。 Kotlinの、null許容型 a?、非null型 a とかだろ 自分でそういう関数を書けばいい if(null == x){ a_? = x; }else{ a = x; } go言語で作られたアプリで素晴らしいものを教えあおうではないですか。 とりあえず micro peco hugo が自分の中でよく使うしいい感じなアプリです。 golangのwebフレームワークって何がいいのだろう どうせならgoogleが作ってくれないかな 泡沫WAFは気がつくとアップデートなくなってたりするから怖い >>52 会社はAWSパートナーで俺も一番簡単な資格持ってるが個人で青天井は怖い&そんなに金出したくない さくらVPS(1000円弱)とかでGO使ってるの見るからそれでいいんじゃね メルカリアッテの実績あるし GAE/Goでいいんじゃないの 確か課金予算決められたはず GAE/Goの場合、標準ライブラリ以外でやると即効で詰むんだが何とかならんか echo使いたくてもエラーでbuildできない go-app-builder: Failed parsing input: parser: bad import "syscall" in 〜 だな GAEだとsyscall使えないせいかね メルカリアッテのパワポみると ・どんなフレームワークを使う? → net/http って書いてあるのな これだと俺々フレームワークになってしまい、再利用性が著しく悪化するのが目に見えてるから GAE/Goに特化したWAFが欲しいところだな… 歌舞伎座.tech#13「Elixir 勉強会」 2017/01/11(水) 開場:18:57 開演:19:00 ニコニコ生放送 lv286846512 >>66 というかechoってsyscall使ってるんか。 gae/goへの対応して欲しいなー。 勉強会というよりただの発表会だった たぶん勉強にはならない EDoSが怖いので課金上限設定が出来るGAEで画像掲示板を作ろうと思うんだが AWSで運営して青天井になるよりこっちのほうがいいよね? 識者の見解求む(今のAWSは上限設定できるよ!などの情報あったらお願いします) ありがとうだぜ しかしEDoSの脆弱性を指摘されながら 未だに課金上限設定が出来ないAWSって何なんだろうな 破産しそうな金額請求されるくらいなら、自動的にサービス停止してくれたほうがいいのに… >>77 普通は監視してるからある程度アクセスがあればわかるっしょ。 GAE/GoでWebpushのサイトを作ってみた。意見を聞かせてくれ。 巡回しているサイトがかたよっているとかいうのは無しで。 https://matopush.appspot.com/ 作ってみた感想。 ・goonが便利だった。 >>79 もっと一般向けにしてくれないと試す気にもならないよ…… 一般的...。深読みすると利用者がサイトを登録できるようにすればいいのかな >>62 http://qiita.com/koki_cheese/items/9d1c2e4e41281f4ab440 >追記 2016/11/17 >最新のechoではこの記事の内容は動作しません https://github.com/labstack/echo/issues/616 >Failed parsing input: parser: bad import "syscall" in github.com\mattn\go-colorable\colorable_windows.go from GOPATH たぶんこれだな このk2wanko氏とメイン開発者のやりとりで一時はFixされたはずなんだが 他の開発者の大半がGAEのことなど気にかけてるわけもなく バージョン新しくなった際にまた問題が復活してしまった可能性がある 実際、俺も 途中送信すまぬw 実際に俺もecho on appengineをやろうとしたら、例のエラー出て進まなくなった 汎用フレームワークとGAEの相性はかなり悪いので GAEを諦めるか、GAE専用の俺々フレームワーク作るほうが良いかもしれん >>81 UI/UXデザインのほうだよ プログラマにデザインセンスを求めるのは酷だから 出来合いのフレームワークを使おう ※BootstrapやFoundation等 http://foundation.zurb.com/ http://getbootstrap.com/ > 作ってみた感想。 > ・goonが便利だった。 これは俺も同感 というかGAE/Goのデフォルトが使いにくすぎる https://cloudplatform-jp.googleblog.com/2017/01/tv-asahi-favclip-google-app-engine.html GAE/Go事例みつけた >特に最新世代ではベンダーからの薦めもあって、Google App Engine(GAE)/Go 環境に移行しています >費用的にも「めちゃくちゃ減った(笑)」(中村さん)とのこと。具体的な費用は明かせないものの、最大で約 20 分の 1 程度になっているのではないかと語ってくれました。 すごいな、20分の1… 同じシステムをGAE/PythonやGAE/Javaで組んだら、どのくらい違うのだろうか? Goだと実行速度早いからコスト削減効果も高い? VPSで動かしてた個人ブログをGAE/Goに変えたら運用コストが0円になった ドメインもappstore名義のまま運用だから0円 ひたすら放置するサイト運営にはもってこいだな ただしAdsenseはGoogleのドメイン上では動かせないので、そこだけ残念 GAE/Go上でwebアプリケーションを作る時に参考になる書籍がないなぁ ・ログイン、ログアウト(Googleアカウントに任せる場合、自分で作る場合の2つ) ・認証(JSON Web Token) ・JSONで出力 ・テンプレートエンジンを使った出力(デフォルトのでいい?) ・ページング(Cursorと非同期通信を利用して動的に次ページを追加するUIの例) ・CRUD(goonを使う場合と、デフォルトとの比較があるといい) ・画像アップロード処理 ・おすすめのWAF(Ginが良さそう?) ・課金額を節約するTips これらを体系的にまとめた本が欲しい だれか電子書籍(Kindle)で販売してくれんかね >>83 俺の場合はコッチだったな go-app-builder: Failed parsing input: parser: bad import "unsafe" in github.com/valyala/fasttemplate/template.go from GOPATH ちょこっと直せば動くようになったwindows環境とmac環境でも違うのかもね GAEはいろいろ問題あるんだねー CA、DeNA、メルカリアッテ 大手のGolang採用例が増えてきたな GAEもやっと脚光を浴びるようになってきた goで行列演算ならどのライブラリがおすすめ? gonum/matrixかな Goで機械学習わりと流行っても良さそうなもんだけど何で流行らないんだろう教えてエロい人 >>86 これ東京リージョン使ってないみたいだけど、その辺はどうなんだろ。 外人が作ったライブラリを使うだけの職業プログラマな俺には難しすぎるだ リンクから飛ぶとうまく見えないけどL16からのところのグローバル定数のところが初心者にはよく分からんかった denseがちゃんとinterfaceを実装してる確認じゃないかな? C、C++、C# Java、PHP、Ruby、Python、Node.jsといろいろ触ってきたけど Golangに落ち着きそう web用に整備されたC言語という印象が強い >>103 なるほど? まだわかってないけどありがとう >>104 たしかに ありがとう >>106 goのinterfaceは javaとかと違ってimplements interfaceみたいな構文が不要で interfaceの条件を満たすメソッドさえ実装すればいい。 でもそれって逆に言えばコンパイルエラーにならないので ちゃんと目的のintefaceの条件を満たすメソッドを実装しているか チェックできないとも言える。 こういう書き方をするとinterfaceを満たさない実装をしていると コンパイルエラーにしてくれるのでjavaみたくエラーから実装をチェックできるようになる。 >>107 詳しくありがとう! 自分で試してみた https://play.golang.org/p/ysOxDFLINo 普段LLばっか書いてると躓くところ多くてなかなかスピーディにコード書けない・・・ GAE/goでaetestをつかってdatastore使おうとすると反映されないんだが 実際にtestにおいて実際にデータベースに保存処理したい場合どうすればいいの >>110 自己レスです このインスタンス使えば解決する模様 opt := aetest.Options{StronglyConsistentDatastore: true} instance, err := aetest.NewInstance(&opt) if err != nil { t.Fatalf("NewInstance is failed.[%v]", err) } defer instance.Close() GAE/Go専用のフレームワークが欲しい Scaffoldで雛形作成できるタイプのを頼む PythonだとFerrisあるじゃん? http://ferris-framework.appspot.com/ Golangを手軽に実行できる環境があるならWAFも整備しないとね GAE/Goで全文検索を実装する場合、GoogleのSearch API使うべきなの? ぶっちゃけこれ、かなりコスト高いよね GAEで実装されてる大規模サービスを見て回ると Googleカスタム検索に丸投げしてるから気になった (つまりSearch API使ってない) https://cloud.google.com/customers/dopr/ >月間 PV が 1 億 3,000 万、MAU (Monthly Active User) 950 万に達するサイトを、 Google App Engine 上で構築、運用。 全文検索以外にもページングする時はCursor使わないとパフォーマンス落ちるから <<[1][2][3][4][5]>> こういうページングはご法度だし GAEのSEは色々縛りあって辛いな… SPAにしてプログレッシブな動的ページング (次へを押すと非同期にデータ取ってくるページング)のほうが UI/UXの観点で言えば優れているからCursorページングでも問題はないけど… やはりGAEは上級者向けだ 自社サービスで使ってる会社を尊敬する >>112 RevelをGAE/FEで動かせばいいんじゃね? 無料枠あるGAE/SEがいいなら自作するしかないな Golangキャズム超えたか?最近の伸び率が凄い https://www.google.co.jp/trends/explore?date=all& ;q=golang 中国、香港からの検索が多いのは何でだろう Golangで何作ってんだ http://golangtc.com/ http://studygolang.com/ 中国にはGolang専用のコミュニティあるんだな Why is Golang popular in China? http://herman.asia/why-is-go-popular-in-china >Google App Engine is also way more popular in China than anywhere else 調べによるとGAE/Goも人気らしい https://beego.me/ 中国人が開発したGolangのWAF、Beegoが人気あるみたいね HuaweiやTencent Gamesで使われてるっぽい GAE/Go対応もしてるな… https://github.com/astaxie/beegae >beegae is a port of beego intended to be used on Google's AppEngine. ちょっと調べてみるか 昔goconで一緒になった中国人の人に話を聞いたけど 中国のスタートアップは初期の想定アクセス数が日本の10倍だから 1requestあたりのコストが低いgoが好まれるって。 ここでechoとGAEの組み合わせが使えないって言ってたけど glideをつかってfasttemplateのバージョンを固定すれば普通に使えるな。 - package: github.com/valyala/fasttemplate version: 3b874956e03f1636d171bda64b130f9135f42cff goonでdatastoreを使ってる人に教えてほしいんだけど ID int64 `datastore:"-" goon:"id"` もしくは ID string `datastore:"-" goon:"id"` って設定してる時 指定したIDに対して自動採番ってどうしてます? goon使わなきゃ自動的に適当なID振られるよね?goonでおまかせする方法を知りたい >>124 すんません自己レスです ID int64 `datastore:"-" goon:"id"` を使ってれば自働採番するのね。stringだけ試してエラーになってたから てっきりgoon使うと自動採番されないのかと。すいません。 あやまることはないぞ Gopher目指して頑張ろう 2017年2月度 Golang WAFランキング(githubスター数基準) 01位 ★9,681 astaxie/beego 02位 ★9,098 go-martini/martini 03位 ★8,872 gin-gonic/gin 04位 ★7,887 revel/revel 05位 ★6,434 labstack/echo 06位 ★6,221 kataras/iris 07位 ★3,219 zenazn/goji 08位 ★2,799 hoisie/web 09位 ★1,403 go-macaron/macaron 10位 ★1,022 gobuffalo/buffalo Beegoを調査した結果 初心者に優しい学習資料の提供(日本語) https://github.com/astaxie/build-web-application-with-golang/blob/master/ja/preface.md ★14,018 astaxie/build-web-application-with-golang ビデオを使ったチュートリアル https://beego.me/video Golang関係の資料が少ない中、質の高い教材を提供してくれてるようだ GolangのデファクトWAFになりそうな予感する スター数調査でも1位だったしな >>127 スター数の多さがデファクトスタンダードとはいい難いけど。 昔からあるフレームワークだしそのスター数二番目のMartiniはメンテナンスされてない。 ドッチかというとechoじゃないの。新興のプロジェクトだけどスター数順調に増えてるし。 echoはGAE/Goと相性悪くね Glide使ってバージョン固定とか面倒くさい Windows10上でecho/GAE/Goやる場合 colorable_windows.goがsyscall使ってるのでgo-app-builderに弾かれる 対処するにはデフォルトのLoggerを使わないように、echo側に手をいれないといけない(面倒い) https://github.com/labstack/echo/compare/master...k2wanko:fix-logger-for-gae Macでは発生しないのでMac使えばいいが、世の中の人間が全員Mac使いではないから GAE/Goやる人にechoはあんまりおすすめできないな >>131 beegaeでも同じだよ GAE/GoをWindowsで開発するのは避けるべき 殆どのフレームワークで不具合出る GinだとWindows開発でもエラーが出ない https://github.com/gin-gonic/gin/commit/60f66918f8a68dc817665cc7a38ba380d00a297c エラーの原因である"github.com/mattn/go-colorable”を使うのをやめて "github.com/gin-gonic/gin/binding”を使うように修正したようだ 特にこだわりがなければGinでいいと思う まぁこの機会にMacユーザになってみるのもいいんじゃない? 誇張抜きでweb系エンジニアは8〜9割Macだし、今回のような不具合に遭遇する確率減るよ mac買うよりdocker上でGAE/Goの開発環境動かすほうが現実的な気が Docker for WindowsってHome非対応じゃなかったっけ? 場合によっては追加費用発生するな Mac買うよりは安いけどさ >>136 おれはVisualStudioCodeにGoのplugin入れてる。 これが一番いい気がする。といってもsublimeとatomくらいしか比較してないけどね。 あとjetbarainsiがgoのideを開発中らしい https://www.jetbrains.com/go/ まだ試してないのでぜひ人柱お願いします VisualStudioCode使ってるよ 非常に快適なり Atom使いにくいのに何故か人気あるよな VScodeはMSの製品とは思えないほど洗練されてる >>139 プロキシ下でインターネットにつながらないバグはまだ修正されてないけどね phpstormとrubymine使ってるからjetbrainのは楽しみだわ >>143 いや、0.17.2まではその設定で大丈夫だったんだけど、その後また駄目になったんよ >>140 Vimでもいいけどgoの開発環境が一発で作れるやつ下さい 何か凄いの出てきたぞ GAE/Goでも使いたいな 「もう従来DBかNoSQLか悩まずに済む」、Googleが基幹用RDB「Cloud Spanner」を発表 http://itpro.nikkeibp.co.jp/atcl/news/17/021500489/ >また、分散型トランザクション、スキーマ、DDLステートメント、SQLクエリー、JDBCドライバーなどをサポートし、 >Java、→→ Go ←←、Node.jsといった主要言語に対応したクライアントライブラリーを提供する。 > Cloud Spannerは、企業向けクラウドサービス「Google Cloud Platform(GCP)」のデータベースポートフォリオに加えられる。 GAE/GoのSEでも使えるのかな とっても気になる やっと正規化しても許される世界に戻れるのね… 長かったわ https://cloud.google.com/spanner/pricing?hl=ja 毎時、Cloud Spannerは、プロジェクト内に存在するCloud Spannerノードの数を追跡します。 その時間に存在するノードの最大数に時間単位の料金を掛けた時間ごとに課金されます。 その結果、提供するノードには最低1時間料金が請求されます。 1時間あたりのノードあたりのコスト $ 0.90 どういうこと? もしかして1時間に1~2回しかDBアクセスのない低負荷のwebアプリケーションでも 0.9*24*30=648ドルかかる? https://twitter.com/domdorn/status/831996946973880320 not sure why everyone is so excited about @google #cloud #spanner ... 700$ / month for a single node is anything but cost effective (意訳)みんなSpannerに興奮してるけど俺は理解できんわ シングルノードに月700ドルは決して費用対効果が高い数字ではない >>137 IntelliJ ideaのプラグインでGo使ってるけど、コード補完もできるし便利です。 試しにGAEでデプロイしようとしたら google.golang.org/appengine/aetest/instance_classic.go:5: can't find import: "appengine/aetest" ってエラーが出るんですけどどうすればいいんです? とりあえず該当するファイルを弄って import: "appengine/aetest" を取り除いたらデプロイできたんですが 今度はtestが動かなくなりました。 goapp test 2017/02/17 15:17:19 appengine: not running under devappserver2; using some default configuration runtime: goroutine stack exceeds 1000000000-byte limit fatal error: stack overflow >>159 シンプルならオレオレでいいと思うけどな Google App Engine /Goの専用技術書が欲しいわ 誰かKindle出版で頼むわ 1)開発環境構築(Mac向けだけでいい) 2)net/httpを使ったルーティング(Controller) 3)datastoreを使ったデータのCRUD(Model) 4)template/htmlを用いた古典的なwebアプリケーションと、RESTのためのJSON出力サンプル(View) 5)ページング(Pagination)サンプル →オフセットを使うとパフォーマンスが低下することの説明 →カーソルを使ったサンプル(Javascriptを駆使した動的なページング) 6)自前実装のログイン、ログアウトのサンプル(簡単なGoogle認証もついでに解説) →メールが実在するのかしっかり送信して確かめる実用的なもの 7)全文検索の実装(Search APIサンプル) →独自に形態素解析ライブラリを用いて全文検索対象を分かち書きにし インデックスを作ってDatastoreから該当するエンティティを探し出す仕組みを構築する解説もあると良い 8)標準ライブラリをラップした、各種WAFや3rdパーティライブラリの紹介 →GAE/GoのSEで動作するものをリスト化 →標準ライブラリを使った2〜7の処理が、このWAFを使うことでどう変化するのか比較 9)運営について →Datastoreからデータの吸い出し、またはアップロードする方法 →バッチ処理について →コストを抑えるテクニック 10)JSON Web Tokenを使った認証が必要なAPIサーバの設計など ちょっとしたバッチツールを作ってcronで実行したいんだけど 前回の情報を記録しておきたい。 かと言ってHome dirに設定ファイル置くほどのツールでもない。 んで、ioutil.TempFileを使おうと思ったんだけど毎回ファイル名が変わるので具合が良くない。いい方法知らないです? >>162 googleのサイト見たら充分なのです >>164 だね。 どうせググれ無い人は本なんて買わないからね。 >なんで、func int f()じゃなく、func f() intなのか > >この順番がコンパイル速度や実行速度に効くとは思えず(だよね?)、であれば、なぜこの順序にしてしまったのかとても不思議です。 寧ろ既存言語がCの仕様を引き継いでるだけ。 ちゃんと意味はある。 Goの宣言構文について」を翻訳してみた http://qiita.com/m0a/items/2b03b189d746ae231756 パスカル風でわかりやすいけどな。 そういや、パスカルもnilか。 最近使い始めたけど、クセに慣れるのがちょっと大変。 でも面白いので、Webサービス一本作ってみようと思う。 https://www.codeschool.com/courses/on-track-with-golang これいいわ やっぱり理解度高めるには動画だな 全部英語だけど殆どの文章がプログラマの専門用語で構成されてるから聞き取りやすい >>172 フレームワーク使うの? golangの定番Webフレームワークってあるのかな? 2017年3月度 Golang WAFランキング(githubスター数基準) 01位 ★9,926 astaxie/beego 6 Active Pull Requests/16 Active Issues 02位 ★9,165 go-martini/martini 0 Active Pull Requests/0 Active Issues 03位 ★9,151 gin-gonic/gin 4 Active Pull Requests/7 Active Issues 04位 ★7,956 revel/revel 2 Active Pull Requests/19 Active Issues 05位 ★6,652 labstack/echo 2 Active Pull Requests/9 Active Issues フルスタックがいいならBeego 薄いラッパーがいいならGin このあたりかな 標準のnet/httpとtemplate/htmlだけでもいい フォルダ構成を考えていくと俺々フレームワーク化するけどな martiniはPulse見た限りでは殆どメンテされてないのでやめといたほうがいい 他に良いWAFがあったら紹介してくれ >>175 >>176 >>177 なるほど どれか1つが飛び抜けてくれれば 選びやすいんだけどなあ https://twitter.com/deeeet/status/807487726358405120 >golangのWAFとしてIrisだけは絶対に選んではいけないと思う. >技術的にダメなのではなく倫理的に完全にアウトなので. >Comitt Historyを書き換えて自分だけをContributerにしたりLICENSE消したりIssueを編集したり... というわけでIrisは無いかな http://engineer.dena.jp/ >AndAppはスマートフォン向けゲームをPC上でプレイできるプラットフォームで、2017年3月現在、15タイトルが配信されています。 >そのサーバサイドのシステムは、従来のオンプレミス環境のサービスとは異なり、Google App Engine Standard Environment(以下、GAE SE)上で動作しています。 >また、開発言語も従来のPerlとは異なり、GAE SEで利用可能なGo言語が採用されました。 http://developers.mobage.jp/blog/gcp-next >これらは、すべてGAE SE上にモジュールを展開しており、開発言語はgolang、フレームワークにgin(一部echo)を利用しており、 >データストアには主にCloud Datastoreを利用しています。 大手(DeNA)の事例だとGAE SE /GoとGinを使ってるらしい。 参考までに。 http://www.tiobe.com/tiobe-index/go/ 2016年中期にGoの普及率が一気に伸びてるけど何かきっかけあったんか? このスレが立ったのも2016年のど真ん中だし気になってきたわ https://hack-le.com/44753647-2/ >消費電力を観察してみると、だいたい寝かせているときは10W前後で、なにか作業を始めると15-25W程度といったところです。 >長時間にわたる画像の変換など重い作業をしているときは60Wまで記録しました。 2コアなら余裕で収まりそうだ 日本ではbeego人気無いのかな? 中華の事例が大半じゃあ 日本人は中国アレルギーがあるからBeegoは流行らないと思う どんな便利なソフトウェアでも中国産というだけで避ける人は沢山いる (Mactypeは絶対使わない、って人も多いよね) その論理で行くとvue.jsも日本ではやらないことになるが。 GAE/Goを使いたいWindowsユーザの視点からWAFを評価してみた (単純なHello Worldが動くかどうか) Gin →問題なく動く Beego →Beegaeを使う必要がある。例示されてる移行用コマンドはMac用なのでWindowsでは動作しない。 Windowsに適合するように書き換えても、colorable_windows.go問題が発生する。 Echo →colorable_windows.go問題が発生する。 GAE/GoやるならMac使ったほうが良いね。 >>187 vue.jsよりriot.jsのほうがよくね? 最近リリースされたVisual Studio 2017のインストーラはElectron&Riot.jsだった http://qiita.com/yamachu/items/07dbcfaa2268f8aea866 >印象的だったのはフロントに React とかではなく,riot.js が使われていました,わかる. 日本:Revel>Gin=Echo>Beego 異論は認める、というかRevelは今はそんなに使われてないかもしれん RevelはGAE/GoのSEで動かないから最初から選択肢にないな BeegoはMacで開発するならありだと思う windows+dockerで開発することもできるけど共有フォルダ周りでトラブルに遭遇するのが落ちだから 最初からMacでやったほうが精神衛生上良い >>189 vue.jsもriot.jsも中途半端なんだよなー ReactかAngularでいいんじゃね?って感じ GoプログラマーにWindows機しか割り当てない会社なんてあるのか? ちなみにEcho+Reactがわいの中では最強れす reactから漂うprototype.js臭が苦手 riot.jsからはjQueryの良い香りがする Revel以外のフレームワークはセキュリティ廻りが弱いって誰か言ってた(´・ω・`) >>191 え?日本じゃMartiniが一番だろ?? ReactはHTMLとJSの混在感が気にある。 typescriptから使うと補完がめっちゃ効くのが素敵ではあるけど Angularは学習コストが半端ない。 ということでVue.jsにした。 >>197 >Martini NOTE: The martini framework is no longer maintained. ってなってるのを使うの不安ある。 >>198 VueもHTML/CSS/JS全部ごちゃまぜじゃね >>199 .vueファイルのこと言ってんだよね。 vue.jsはhtmlを取り込めるからhtmlだけ、独立できるけど、reactはjsxで事実上jsベースにxml構文を追加しただけだから、混在は避けられない。 >>200 あー確かにそれはできるねスマン 実際はSPAとかやるならどっちでもいいと感じる 一部のコンポーネントだけreactやvueにしたいとかだとjsxぽいのはHTMLが散らかって見通し悪いよなあ golangさんはJSON吐き出しマシーンだからな 仕事がルーティングとORMとのやり取りだけになったので フロントJSさんの話題が出やすい WEBAPI設計する時にできるだけ楽したいんだけど おすすめの設計ツール的なのある?ドキュメントも自動生成されちゃうようなの やっぱswaggerとかかな Riot.jsが扱いやすくて開発捗るんやが、後でなんか罠があるとかないよな? 普通のHTML感覚で書けるのがほんまにええ riot.jsはQiita界隈でも好評だな ReactはHTMLタグに直接Style設定しているような気持ち悪さがある(全然分離できてない)から riot.jsに惹かれるのは仕方ない、というか必然 悪いことは言わんからフロントはReact+Reduxにしとけ スマホアプリに転用できるメリットは想像以上に大きい それ他のSPAライブラリも全部同じ Cordovaかますだけ >>213 お前Cordova使ったことないだろ?w CordovaはWebView経由だからスマホのスペックによってはもっさりするんだよな UXが悪いから使わないほうが良いよ スマホアプリ化を視野に入れるとVue.jsとWeexが良さそうなんだがどうよ https://weex-project.io/ 2chで一番フロントエンドフレームワークの議論が活発なスレになってるなw 役に立つのはいいのだがGopher君が物欲しそうに見てるよ・・・ BeegoもVueもWeexも中国系なんだな ハードウェア関係だとHuaweiやXiamiなどが有名だし ソフトウェア関係でも先進国化してる 日本も頑張らねば ム板の方でも angular は糞だから vue に乗り換えたって話は良く見かける vueも最初の頃は簡易版angularって感じだったけど、今はbetter reactって感じ。一応reactより軽くて早いってのを売りの一つにしてる。 日本人なら、アシアルのMonaca ! Cordova(PhoneGap) + Onsen UI + AngularJS Failed parsing input: parser: bad import "syscall" in github.com\mattn\go-colorable\colorable_ windows.go from GOPATH フレームワークEchoを使ったAppEngineアプリケーション開発をしようと思ったのですが、上記のエラーが出て動きません。 解決策はありますか? 環境 Windows10 Home Visual Studio Code Powershell 自己解決 go get -u github.com/labstack/echo で治りました バージョンが古かったみたいです >>224 へ〜windows+GAEで動かない問題は解決したんだねecho MACでやれ、MACで WindowsはC#、Android専用機れす >>227 AppleがタダでMacに交換するサービスをやれば良いんだよ。 というかlinux環境を作ればいいだけだし。 今ならdockerで一発だろ。 macだけどもlinux環境は結局作ってるし WindowsでDockerは後から色々面倒くさいこと出てくるけどなー 素直にmacでいいんじゃね? >>231 macにすることがすなおかな。 たしかwindowsって標準でubuntu環境乗せられるようになったんじゃなかったけ 詳しい人求む。 WindowsのUbuntu環境は使い物にならんよ docker for windows、kitematicのほうが遥かにいい ただしWindows pro必須 (Homeの人はDocker Toolbox使うしか無いが、共有フォルダ設定でほぼ100%詰まる) webとはちょっと違うんだが、golangでMac向けのキーリマップアプリケーション作れないかね KarabinerがSierraから使えなくなって困ってる HammerSpoonとNaoya設定使ってカーソル移動させてるが、処理落ち、もっさり感が気になって仕方ない システムプログラミングの知識がないから、とっかかりが掴めない 誰か実力ある人、OSSで作ってくれ >>234 karabinerのスレあるからそっち見なよ。go以前にそうかんたんな話ではないみたいよ GAE/GoとGlideによるvendoring使ってgoapp serve .したら動かなくて焦ったわ app.yamlの設定が悪かったのな nobuild_files: - vendor skip_files: - vendor/.*$ GAE/Go初心者の皆様、あなたは大丈夫だと思うが注意してくれ 俺はこれで数十分無駄にした 情報共有のために書き込んどく >colorable_windows.go Fix the build constraints syntax for appengine 7 days ago なんだ Echo側がGAEに対応してくれたわけじゃなくてmattnさんが頑張ってくれたお陰だったのか このスレに報告しても無駄だと思ってたが案外役に立つんだな 俺は君の頑張りをちゃんと見てるよ! 対応してくれてありがとな もしかしてEchoってTemplate周り面倒くさい? https://echo.labstack.com/guide/templates type Template struct { templates *template.Template } func (t *Template) Render(w io.Writer, name string, data interface{}, c echo.Context) error { return t.templates.ExecuteTemplate(w, name, data) } t := &Template{ templates: template.Must(template.ParseGlob("public/views/*.html")), } e := echo.New() e.Renderer = t Ginならたった2行、こう書くだけなんだが・・・ EchoのStarがいまいち伸びない理由が分かってきたわ g := gin.Default() g.LoadHTMLGlob("public/views/*.html") ginだってmultitemplate使う時はEchoみたいに長くなるからおあいこさ! package main import ( "github.com/gin-contrib/multitemplate" "github.com/gin-gonic/gin" ) func createMyRender() multitemplate.Render { r := multitemplate.New() r.AddFromFiles("index", "templates/base.html", "templates/index.html") r.AddFromFiles("article", "templates/base.html", "templates/index.html", "templates/article.html") return r } func main() { router := gin.Default() router.HTMLRender = createMyRender() router.GET("/", func(c *gin.Context) { c.HTML(200, "index", gin.H{ "title": "Html5 Template Engine", }) }) router.GET("/article", func(c *gin.Context) { c.HTML(200, "article", gin.H{ "title": "Html5 Article Engine", }) }) router.Run(":8080") } 2chのバックエンドってどうなってんの ここ最近API経由の専ブラの表示がめちゃくちゃ遅いんだが・・・ JIMさん、Golangを使って対処してよ >>245 確かに遅い 回線のせいではないと思う APIの応答がなんか悪い 【緊急】2ちゃんねる全体がすっげえ重い [無断転載禁止](c)2ch.net [822935798] http://hitomi.2ch.net/test/read.cgi/poverty/1490781907/ これだな [49選]国内注目のWebサービス・アプリを大調査! プログラミング言語、フレームワーク、アーキテクチャの一覧【2017年 春 ver.】 - エンジニアHub|若手Webエンジニアのキャリアを... https://employment.en-japan.com/engineerhub/entry/2017/04/07/110000 Golang採用サービス一覧 ・メルカリ ・グノシー ・スタンバイ ・クックパッド ・UZOU ・ニュースパス ・Wantedly People ・AWA ・pairs ・Mackerel ・Gyazo Golangの利用事例(大規模トラフィック) ・Youtube ・Abema.tv これで十分だろ 流行りものが好きでとりあえず使ってみました的なやつだろ。何使ってもけっきょくシステムはできあがるし。 一種類の言語、FWだけですべて作ってる方が珍しいよね クックパッドだってメインはよく知られてるようにRailsだろうし ラズパイみたいな機器でgolangでデカイファイル(mp4とか)のアップロード処理をしたいんだけど単純な実装だと一度メモリに展開しちゃうから メモリが足りなくて止まってしまいます。 かと言ってtempfile使うとOSが入っているSDを痛めちゃうから 遅延書き込みできる仕組みとか使えないかなと思ってるんですが そういう実装例ってないですかね? 解決したなら解決方法書いていくぐらいの事できないのかね 書き残しておけば同じ疑問持ってる人の参考になるだろ 質問はするのに自分の知った知識を他の人に提供するのはそんなに嫌かい? 今まではhatenaブログ等に断片化していた情報がQiitaに集約される流れはいいな 今さらながら、Gorilla/muxが使いやすい EchoもGinもいらんな GinもEchoもフレームワークというよりライブラリに近い フォルダ構成まできっちり定めてくれると初心者には迷いがなくていいんだが・・・ メルカリ・ソウゾウでは、どのようにGoでソフトウェア開発をしているのか聞いてみた https://codeiq.jp/magazine/2017/04/50250/ Goの流れが加速している今 GAE/GoにフォーカスをあてたWAFの開発と GAE上で動作するマストドンのようなオープンソースプロダクトが欲しいところだね >GAE上で動作するマストドン Mastodonを稼働させるために必要なインフラの知識を オートスケールなPaaSで吸収しちゃったら乱立が加速してしまうな・・・ あとGAEでリアルタイムサーバープッシュする場合、Firebaseと連携する必要があるからやや面倒だぞ https://cloud.google.com/appengine/docs/deprecations/channel >The Channel API did not scale well enough for the workloads it was intended for and so did not find wide adoption. >Accordingly, support for the Channel API will be turned off on October 31, 2017. >You can use the Firebase Realtime Database to achieve superior realtime functionality in your application. 最近go調べてるんだけど FW選びすんげー迷うなこれ 雌雄が決するほどの勢いもなさそうだしなぁ このスレで言うことじゃないかもしれんが最近はtypescriptが、良い気がしてる。 結局jsonを変換せずにそのまま使えるのがでかい >>269 自社開発で息の長いプロジェクトなら薄いラッパーぐらいがいいし、受託とかプロト開発で効率重視ならフルスタックでいいと思う。 goaが鼻血が出そうなくらい便利なんだが。 swagger.json吐くから Swagger Code Generatorでtypescript-fetchのコードはいたら Goの構造体そのままのinterface定義(typescriptのinterface定義ね) でapiクライアント吐いてくれるんで サーバからクライアントまで全体を型付きで扱える。 echoでrestサーバ作ろうとしてたのがアホすぎたわ。 もうgoaでいい。 goaのいいところはとにかくルーティングとかバリデーションとか 勝手にもれなく自動実装してくれるところだね。 restの流儀を知らなくても実装してくれるから 後はdb側とのつなぎこみだけ作ればいい。 むしろgoaにrestサーバの作り方を習ってる感じ。 後はコードジェネレートだからinterface{}型を使ってないのがいい DSL側で事前にここはint型だからって指示しておくから ちゃんとint型で入ってる。Goはやはりコードジェネレートが正義だな。 メタプログラミングが苦手ならコードジェネレートすればいいじゃない。 db側もxoを使うことにした。 スキーマ設計はDB側だけにする感じで。 goaでdb設計もできるけど、dslを気軽にいじるならdb設計はやらせないほうがいい気がする AppEngineにも対応してるのがええな goa goでマイクロサービス作るとして 中小企業に提案できるのって どんなぱたーん? >>276 goaってマイクロサービス向け銘打ってるけど、別に普通にreactなフロントエンドを動かすサーバサイドとして普通に使って良さそうだけどな よくわからんからサンプルプロジェクトをGithubで公開してくれや goaとgoogle app engine/goのStandard Environmentで動くコードがいい クライアントはvue.js(またはreact.js)を使ったSPAで ID、名前、コメント、作成日時、更新日時 をページングあり(20件ごと)で一覧表示する感じでよろ CRUDも当然できるものとする ページングはCusor使ってインクリメントな動的ページングな オフセット使うとパフォーマンス問題でるから <<[1][2][3]>> こういうのは使えない >>278 https://github.com/goadesign/goa-cellar とかみてみたら。 webapiしかないけど、 DSLにFiles があるからstaticファイルの配信も簡単で すぐreactで追加実装できる。 あとはgoでSSR出来ればほぼ完璧だなー 久しぶりにgoで開発してたら何かvscでgoの開発作業するとマシンパワーやたら食うんだけどなんでだろ >>282 これ関係あるかな? VisualStudio Codeスレより 8 名前:デフォルトの名無しさん [sage] :2017/05/16(火) 00:07:55.41 ID:jyI5CijS 久しぶりにgoの開発をこいつで始めたらなんか調子よくないな。 定義を見に行ったり行かなかったりする。 エディターを再起動すると治る気がするけど、定期的に再起動しないとだめ臭い >>284 ごめん。それ俺ですマルチポストすまんですm(_ _)m issueみてみると皆困ってるみたいだから 何れ解決すると期待したい。 goの開発環境として一番使いやすいと思ってたんだけど こうなると微妙やなjetbrainの試してみようかな。 jetbrainのやつWindowsで使ったら フォント描画がひどすぎて目が潰れたのでMac版推奨 >>281 これ、結局参加できなかった。 結局人数割れ起こしてるみたいね。 goa使ってるんだけど、echoとかより実際のコードの記述量は減る感じだよね。 あとマジックコードがないから生成したコードを追いかければ理解はできるのがいい。 reflectionだらけのコードよりいいわ。 なんだ GAE/GoもPython向けのGUIツール使えるんだな app.yamlを適切に設定してあればどの言語でもワンボタンでDeploy出来る 今までCUIでコマンド打ってたわ goでapiサーバ作ってる人多いと思うんだけど apiのテストってどう書けばいいの? dbのコードと密結合してるんだけど、、、 >>290 テスト系DB作って、まっさらな状態から通しでAPI呼んでいく。 結果としてDBに残る値も担保できるので、普通はこうすると思う。 >>291 それが無難か。 そういうのを効率的に実装するヘルパーなライブラリってないでしょうか? productionから自動的にDBのスキーマだけ拾ってきて testDBを新規作成してくれるとか。 >>292 それじゃ、カラム増やしたときにテスト出来ないよ。 しかし、DBのスキーマだけ拾ってcreate文に落としてくれるのはだいたいのDBにあるのでは? pgdump然り。 goってテスト用のディレクトリを作っちゃうとパッケージ名を 変えることになってパブリックな関数とかしかテストできなくなっちゃいますか? テストコードと実装が同一階層に並んでいるのがなんとなく気持ち悪いんですが コレは諦めるしかないんですかね? >>294 なんとなく気持ち悪い程度の理由なら標準に合わせた方がいいよ。 それを気持ち悪いと思わない人達が作った言語なんだから。 一番聞きたいのはディレクトリ掘っても、パッケージ名を維持する方法 制服ミニで脚が細く綺麗なJKが前歩いてて、ウホッとなって顔よく見たらgopher君だった事案が発生 >>299 やっぱりできないみたいね。 Spread Operatorっていうやつかな。 最後の引数でしか使えないって制約なんとかならんもんかな。 受け側 func (test …string) { } は無理なのは分かるけど 渡す側 fmt.Println(test…,test2…)はできても問題なさそうなもんだけど。 最新人気ランキング 1位 Java 2位 C 3位 C++ 4位 Python 5位 C# 6位 PHP 7位 Visual Basic .NET 8位 JavaScript 9位 Delphi/Object Pascal 10位 Go 11位 Perl 12位 Swift 13位 Ruby 14位 Assembly language 15位 R 16位 Visual Basic 17位 MATLAB 18位 Objective-C 19位 Scratch 20位 PL/SQL https://www.tiobe.com/tiobe-index/ GolangがRubyを抜いた 最初に就職した会社がDelphi専門 転職した会社でPerl漬け 今趣味でGoやってる 9-11位独占した!やったぜ!(´・ω・`) Golang破竹の勢いで成長してるな まぁスクリプト言語の可読性と生産性、コンパイラ言語の高速性を兼ね備えた言語だから 人気出るのは当然か >>305 goって言うほど習得が容易な言語かね?言語仕様がシンプルだからかんたんと言うのは安易だ >>308 可読性も生産性もC/C++よりははるかにマシで、C/C++と同等の速度が出せる、というのが正しいよね さすがにスクリプト言語の生産性は言い過ぎだね >>310 C/C++の代替って言ったらやはりrustになるんじゃないのかな。 特に組み込み分野ではGCがないのはでかい。コンパイラとの対話が大変らしいけど。 Goは最近流行りのoptionalがないのがちょっとつらい。 でも殆ど言語仕様を変化させずに発展させてるのはすごいなと思う。 swiftも見習ってほしいわ。 まぁ下位互換性は維持するみたいだから rustのメモリ管理とかnil安全とかは導入できないかもね。 正直もっと関数型によってくれると俺好みなんだけど、 rustだっていいしね >>316 推測だけどそのコードcode genereteされたものだから、 importエラーが出ないように仮として書いてるんじゃないかな。 >>317 おーなるほど auto generated なコードなので一旦特別な意味はなさそうということにしておく ありがとう! 似たメンバを持つ構造体の変換について教えてください https://play.golang.org/p/1ir9HN8yDG 完全にメンバが一致すれば変換できるんだけど メンバが少しでも異なると失敗するのなんとかならないでしょうか? なんとかならなそう 自分で関数なりメソッドなりを定義してやるしかないのではないか >>320 えー?じゃあ b:=B(a) みたいな構文の意味って完全にメンバが一致してないと使えないってことです? この構文の存在意図がわからん。 >>321 それを言うとstring(1.0)とかも無理じゃん? >>322 いやいや 構造体の変換の話だけに限定して欲しい b:=B(a) 上記構文の有用な使いかたの例ってないですかね? >>324 構造体なんだから代入するだけでコピーになるが GoにおけるDB操作の決定版ってなんだすろう。 結局xoでスキーマに対応する構造体と生成可能なメソッドを作りつつ 足りないものはsquirrelってqueryBuilderで組み立てるって方針でやってる。 けど、なんかxoメンテしてる人やるきなさげ。 LLから入ったんだけど構造体とかインターフェイスあたりの設計?の勘所みたいなのが分からん みんなどうやってGo言語(あるいはJavaとか)の設計をいいかんじにできるようになったの? Go言語は真面目に設計する言語じゃない 適当に書く言語 >>330 そう聞かれるとうまい答えが見つからぶ「オブジェクト指向っぽい設計」というアホな回答になってしまう そもそもインターフェイスとかいう概念がなかったので使いこなすのが難しい インターフェイスの何が嬉しいんだみたいな疑問が定期的にわいてくるんだが 動的言語だとダックタイピングだからインターフェースがないってことか。 インタフェースはまんまインターフェースだよ APIはアプリケーションインターフェースだろ。 つまりオブジェクト間で情報をやり取りするための決まり。 例えばfmt.Fprintfをみてみよう。 https://golang.org/pkg/fmt/#Fprintf 第一引数にはio.Writerを満たすインターフェースならなんでも突っ込める じゃあio.Writerインターフェースって何か? これはwriteメソッドを備えたもの 例えばhttpのレスポンスだったり、もちろんファイルだったり それらはとにかくwriteメソッドを実装しているだけなんだ。 自分で作ったオブジェクトもwiteメソッドさえ備えていれば突っ込める。 便利でしょ? 動的言語の場合だって if (typeof xxx.someMethod === ‘function’) みたいなコードを書いたりしたでしょ? こういうのを一々入れる必要がなくなる。 なぜならインターフェースの条件を満たさないオブジェクトを突っ込むとコンパイルエラーになるから。 心地の良い設計の基本はすべてを知らなくても実装できること。 例えばfmt.Fprintfの中の実装を知らなくても Writeメソッドを実装すればfmt.Printfが使えるでしょ。 そういう風に自作のオブジェクトも基本的にインターフェースを仲介して 各オブジェクトの詳細は知らなくても使えるようにする。 つまり疎結合にしてやる。 インタフェースは既存のクラスに手を入れられないのがつらみ C# みたいな this キーワードいれたりとか Haskell みたいなアドホック多相とかあれば別だけど 俺としてはgoaとか勧める。 あれはwebapiを設計してやるとgoのコードを生成する。 webapiの実装例として参考になるし、そのまま開発してもいいし。 なるほど色々ありがとう インターフェースの嬉しいところはなんとなく分かった。 ある型にたいして既存の関数やメソッドを使いたい→インターフェースを満たすようにメソッドを定義という感じの思考のプロセスでいいのかな? >>336 例えばテスト主体で考えてもらえればより便利さがわかると思う。 interfaceを満たすだけのダミーなら簡単に用意できるでしょ。 structを直接引数に取る形にすると本番のstructをテスト書く時に用意しなきゃいけなくなる。 この思考プロセスがやがてDIに結びついていくんだけども。 >>337 この話を聞いた上でちょっと色々コード眺めてみるわ 言わんとすることは分かったのであとは自分で書くときにすんなり使えるか… とにかく参考になったありがとう goにおける配列操作で目的の要素を取り出すのっていちいちループを回さないとだめ? 標準ライブラリになんかないかな メソッドのレシーバにnil pointerを渡して有用な場合ってどういうときなの? メソッド内でフィールドアクセスする際にpanicになったりして良いことない気がするんだが >>340 別にnilを渡せるのが有用とかいう話は無くて、単にポインタに対してメソッドを呼び出せるとレシーバーがnilになりうるけどどーすんの?って話でしょ 他言語ではメソッドは呼ばれずにNullPointerException的なのが飛ぶようになってるけど goの場合はメソッド側でnilに対処すれば呼び出し側はレシーバーがnilかどうかを気にしなくてもいいというメリットはある >>341 それメリットだとは思えないんだが nilに対処するコードを毎回書かなきゃならないのもダルいし忘れててもコンパイルできてしまって実行時にpanicするしで嬉しくなくね? gaeのdatastoreを勉強できるいい教材ないかな appEngine使ってる人いないのん? go1.8にも対応しつつあるし期待しとるよ goで配列の定義で []*T ってよく見るんですが []T でダメなんですかね? []*Tにするメリットを教えて下さい https://cloudplatform.googleblog.com/2017/09/introducing-managed-SSL-for-Google-App-Engine.html?m=1 ナニコレ GAE使えばSSL無料で使えるっていう意味? これはいいな >We’re excited to announce the beta release of managed SSL certificates at no charge for applications built on Google App Engine. コスト的にかなりいいよな ついでにドメインも無料化してくれないかな…(チラチラ) Googleが発行するクレカの特典とかでもいいから (Googleにはクレカ利用料の数%のインセンティブがあるからそれで賄える) Googleブランドのクレカが欲しいねん Let's encryptとGAEと自動更新スクリプトで無償SSLは既に実現できてた それを管理コンソールから簡単に設定出来るようにしたとか、そういうのかね? これでPaaSはGAE一択になったな 今までSSL証明書に払っていたお金をスケールアウト費用に回せるから コスパぶっちぎりで良い AWSも追従してくれ GAEはAWSと違ってサービスが成長しなければ、ずーっと無料で運営できるのが良いのだよ 失敗時のリスクが低いから挑戦しやすい ランニングコストがほぼ0円になれば、例え月10万PVしかないサービスでも停止せずに 次の新しいサービスを並列で増やして収益アップできる 月間10万PVのサービスを100個作れば1000万PV、月間150万円の収入が期待できる 資金力がない学生起業にぴったりだわ GAE/Go SE素晴らしいのに採用事例が一部の野心的な会社しかないんだよな DeNAとサイバーエージェント、メルカリ(の子会社)くらいしかない HTTPSじゃないとSEO不利だからこれは朗報 趣味サイトに年間1円も掛けたくない >>358 datastoreが使いづらいと言ってもgoコード側でスキーマ設定する感じだし joinできないからこそ結果的に使いやすいかもしれない dbの挙動もレプリカありきの挙動だとすれば納得できる いわゆるBtoBの受託開発だと帳票出力があるからjoinないとキツイが GAE/Goが想定してるのはBtoCのwebサービスだからjoinなくても何とかなる ページングもカーソル使って次へと戻るだけあればいい handlerのテストってどこまで厳密にやるべきなの? DBとのやりとりの部分とかは内部で使ってる関数をテストすればもんだいないから様々なパラメタに対して200を返せるかどうかだけでいいのでは?と思うんだけど >>363 バリデーションを網羅できてればいい気がする。 >>364 そのバリデーションってどこのことだろう…? 自分の中ではhandlerに対するテストなんかは裏側から取得してきたデータがどういうものかはあまり気にする必要がなくて入力と返ってきたデータの出力の仕方だけが関心点だと思ってるんだけどなかなかそういう記事とか見かけないんだよね postしたデータは、バリデーションせずにdbに、ぶち込んじゃうの? get系でも入力パラメーターのバリデーションあるよね。 >>366 そこでのバリデーションならちゃんとテストケースに含めるべきだと思う 一方でたとえばUsersテーブルからデータをとってくるためのgetUsers内でのバリデーションのようなものはテストケースをいちいち考慮したくないということが言いたかった golangで独自の仮想通貨を作るのって出来る? gethを改造すればいい感じ? go test とか go build, go install などのコマンドってどこに定義されてるの? ソースを読んでみたいんだけど見つからなくて困ってる ありがとう、cmdのinternalにあるの見逃してた >>370 最近はGOROOTもGOPATHも環境設定不要だから cd ${go env GOROOT}/src/cmd ってすべき ゲーム作るためにgo-gl/glfw使おうとしてmain関数作って実行しようとしたら、 build constraints exclude all Go files in C:\Users\ユーザ名\Desktop\glfw って出た。GOOS=windows, GOARCH=386で試したんだけど初心者すぎてわからん Ruby使いはwebデザイナあがりの意識高い系が多い(もちろんMac) PHP、Perl使いは大昔にHTMLタグを直打ちしてたHTMLコーダー出身のスパゲッティコードを量産していた老害と、その老害を上司に持つ可哀想な若者が多い Python使いは科学技術や情報工学系(自然言語処理、機械学習、深層学習等)のアカデミア出身者が多い Go使いは新進気鋭なBtoC系上場企業の社員が多い JavaはBtoB系受託IT土方が多い こういう印象あるわ この結果を受けてweb&スマホアプリのバックエンドはGoが主流になるんだろうな 当社ではGoエンジニア募集中です Goは日本語学習サイトを充実させたほうがいい PHPerがGoに移行するにはネットで検索>コードをコピペ この集合でwebアプリケーションが作れないとダメだからな >>374 単純に力ある人がGo使うようになってるだけだと思うんだよなあ 別にGoがすごいとかではなくそこそこ力ある人はRubyでもPythonでも予選突破できる インタプリタとコンパイラ言語で速度比較したらそりゃ Goのほうが有利だろ 省メモリ性やら単純な速度まで桁が違う 俺もうSPA前提でバックエンドにgoaを使うことでwebアプリ書いてるんだけど、いいよね。なんかgoaはマイクロサービス用のフレームワークと名乗ってるんだけど、別にマイクロサービス関係なしに使いたいんだけど。 つーかGAEで使ってるけど良い。 仕事でwebサービスをGoで書いてるけど、もっとGo使う会社増えないかなー Go使ってて転職したいと思う会社が無い >>380 Googleの基幹事業だしDonateで維持してるオープンソースコミュニティ発の言語よりは将来性あるんじゃね Youtubeのバックエンドで動いてるPythonコードをGolangに変換してパフォーマンス改善してるし その他にも色々とGolangで動いてるシステムがある また今の時期にGolangに目をつけてる会社は、経営陣(CTO等)に先見の明がある証拠だから伸びるだろう どうでもいいけどGolangって書き方に違和感ある。 Goかgolangじゃないの? C言語 Clang https://ja.wikipedia.org/wiki/Clang Go言語 Golang この伝統に則って大文字だぞ ○+langのlangはググラビリティを向上させるsuffixでしかない >>386 qiitaのタグだと Goかgolangだよね タグなんてユーザーが適当につけるものを論拠にされても gopherのみんなはGoのinterfaceについてはどう感じてる? 他の言語のinterfaceについて詳しくないんだけど、interfaceのもつメソッドを実装していれば満たしていることになるというのがどうも分かりなくくて辛い 明示的にこのinterfaceを満たしてますよみたいなのが欲しいのは修行が足りてない? >>392 type T struct{} var _ I = T{} でT型がinterface Iを満たすかチェックできる >>393 チェックできるかどうかというより何を満たしてるかパッと見でわからないという意味で辛い Goのinterface面白いと思うよ 何を満たしてるかぱっと見でわからないっていうのはinterfaceの使い方が良くないんだと思う 必要なメソッドを理解しないまま使おうとしてるからわからなくなるんじゃない? >>394 393でコンパイルエラーが出て何の実装が必要かわかるんだから、それで問題ない気がするんだけど。 >>395 面白いしJavaとかより柔軟だよね。 もっとinterfaceを拡張してプロパティとか演算子のシンタックスシュガーをもっと付けて欲しいとは思う。 多分上手く拡張できればジェネリクスに近い感じになると思うんだけど >>396 ? そもそもIの存在を知らないような場合にそういうコードでチェックできないと思うんだが TにReadメソッドが実装されてる→よく読み進めるとIにはReadメソッドをもつ→TはIを満たしてるという思考の流れが気持ち悪い >>398 考え方がおかしい。元々の質問は >> 明示的にこのinterfaceを満たしてますよみたいなのが欲しい という話だから当然inteface “I”の存在を知っている前提。 構造体Tを作っていてそいつにinterface Iの実装を行いたいという場合に type T struct{} var _ I = T{} とういう風に書くと実装条件を満たすかをコンパイルエラーでチェックできるから 確実に実装できる。 もしかして定義済みの型がどのinterfaceを実装してるのか明示してほしいってことか でもそれGoのinterfaceの考え方じゃないよ >>400 アンカーつけないとなんに対しての反論かわからんのだが。 interfaceの概念はべつにGo独自とかそういうもんじゃないし Goのinterfaceの考え方ってなんのことを指してるのかよくわからんな。 基本的にはJavaと変わらんでしょimplementsが不要ってだけ。 >>401 >>400 は>>391 ,394,398あたりへの憶測 他言語のinterfaceは、imprementsすることでその型が何であるのかを説明するためのもの Goのinterfaceはオブジェクトが必要な機能を備えているか調べるためのもの だから考え方が違う >>402 なんかフワッフワした言い回しすぎて何を説明したいのかがわからんな。 interfaceは、英単語の意味そのものだよ。つまりはメソッド名とパラメーターの並びと、返り値の型の組み合わせそのもの。 それ以上でもそれ以下でもない。 基本的には言語として共通の概念と言える。 goとそれ以外の言語の違いは 型(javaの場合はclass)がinterfaceを満たす条件が違うってだけ。 条件の違いは java: interfaceを明示的に指定する go: interfaceと同じメソッドを、実装する PHPerだらけだったうちの会社もとうとうGoの勢いを感じて次のプロジェクトで使うことになった ISUCONの結果が地味に効いてる 経営陣はAWSの課金が減ることを期待してるみたいだけど、はたしてどうなることやら 他人の書いたソースを読んでて特定のinterfaceの実際の実装を見たい場合 どの構造体や型をみればいいのか探すのが面倒なことはまれによくある > Goのinterfaceはオブジェクトが必要な機能を備えているか調べるためのもの これって公式にどっかに書いてあるの? というかGoにオブジェクトって概念あるか >>407 guruが対応してるから簡単に探せるで vscならcmd+f12で実装を探す >>409 うん 手元にcloneしたソースはguruで探すけど githubでソース眺めてる時とかがちょっと困る >>406 GAE/GoでgRPC使えるんだっけ? GAE/GoやるならStandardで使いたいんだよね GAE/Go SEとgRPCは色々と苦しい 代替案として挙げられるのはGAE/Goとgoaあたり? GAE/Go Standardでも gRPC は urlfetch でいけるんじゃないの? やったことないからわかんないけど >>410 doxygenみたくinterfaceのコードのところがリンクになってクリックすると 実装一覧が出るようにしてほしいってことね。 バックエンドはGAE/Goとgoa フロントエンドはReactとReactNative(またはVue.jsとWeex) この構成でwebアプリ、スマホアプリを作りたい こういう開発者向けにRailsチュートリアル並に詳細かつ丁寧に解説してあるネット文献 あるいはAmazonで買える技術書が欲しい >>416 お前は俺か。俺の場合はreact-nativeだけノータッチだけど goaのDSL覚えるくらいならproto3やったほうがいいよね goaのほうがgRPCより優れている点が思い浮かばない 普通にweb apiを簡単に作れてswaggerと連携って魅力じゃないので? goaはWebAPI作るのには便利だけどそれ以外のケースであまり融通が聞くとは言い難い そもそもWebAPIならどのフレームワークで作っても大差はない goaはGo言語で記述するDSLからGo言語の各種ソースコードを自動出力する gRPCは言語非依存のprotoファイル(IDL)から対応言語(Go言語以外のメジャーな言語に対応)の各種ソースコードを出力できる 汎用性が全然違う 企業目線だとgRPC選ぶのが多いんじゃないかな 実際にメルカリ、DeNA、CA、その他スマホアプリ大手のバックエンドはgRPCだし GAE/Go SEで何の苦労もなくgRPCが使えれば平和になれそう go-json-restはどうなん?正直これぐらいが一番好きなんだが >>422 いやいやwebapiならgoa一択だと思うんだけど。もちろんゼロから構築という前提でですが。 gRPCならprotoを覚えるとGoのサーバーサイドも自動生成って認識で合ってる?DBとのつなぎ込みの部分はどう書くの? goaやgRPCは「定義ファイル→ソースコード&ドキュメント生成」 go-json-restは直接ソース弄る系だからアプローチが全然違うな goaもgRPCもDBまわりのビジネスロジックは手書きです そこまで忖度はしてくれませんよ >>428 ですね。アホな質問しました。 goaだとフレームワークも含めた形でコード生成するんですが protoによるgRPCの場合はどうなのかなーと。例えばミドルウェアはサポートしてます? goaもv2でgRPCをサポートするっぽいんですが、protoでのサーバサイドGoコード生成がいい感じならお役ゴメンもあり得るんですかね。 自動生成されたサーバーのハンドラ部分を各種フレームワークに繋ぐだけ フレームワーク上のミドルウェアとも組み合わせることが出来る ちなみにちょっとググったらjsからgRPCは使えないみたいですね。 reactNativeからは使えるんですかね。 jsから使えないのは痛い なんか知らんけど急に役立つスレ化する時あるよな ここでEchoがGAE/Goで動かない報告(>>223 )したら 瞬時にパッチ当ててくれたり(>>239 ) Go言語界の実力者が見てるっぽい mattnさんgoのコントリビュータだし古参の2chねらーだからなあ >>432 えー。これってrestAPIに変換してるってだけでは? それってjsから使えるって言っていいんすか。 https://twitter.com/search?f=tweets& ;vertical=default&q=GAE%20gRPC&src=typd&lang=ja TwitterでGAE gRPCを検索したらお前らがいたw Qiitaでよく見かける人だらけやw ISCON参加者もいるだろ絶対 レベルたけぇわこのスレ >>435 grpc-webみたいなのなかったっけ? goa使ってたらv2になったタイミングで勝手にgRPC対応してついでにGAE対応になってたらよい >>438 でも俺1人でスレのレベルを大きく下げてるからな 油断すんなよ 俺も俺も。正直slackは怖くて書き込めない。匿名だとクソな意見も言えるから大事 >>444 これやってみたけどgen.shがWindowsだとエラー吐きまくるなぁ… やっぱりみんなMac上でしか動作確認してないのか 周りもMacかUbuntuだらけだしweb系はMac買ったほうがいいのだろうか >>445 普通にエラー報告したら? やってくれる人いると思うし知っていれば難易度が低い作業。ほぼワンライナーコマンドみたいだし。 protoコマンドがwin対応してないなら詰むけど docker+windowsは相性が悪くて ファイルパスが¥と/で違うから 共有フォルダ設定が上手く行かず苦労した記憶ある おとなしくmacかlinux上でやったほうがいい 個人的にWindows上で開発するのつらい Windows用のアプリ作るときもLinuxで作ってクロスコンパイル Goはその点すばらしいよね (ただWindowsにしか対応してないpackageがある時は辛いけど) >>449 winにしか対応してないパッケージがあるの? そんなんあるんだ。逆じゃなくて? でもコントリビュートするチャンスじゃん A Windows GUI toolkitだから当たり前じゃね インフラエンジニア分の人件費を完全にカットできるからROE高そうだな 10人くらいのチーム規模で月商5億くらいのサービス支えられそう 少数精鋭でいけるのが大きい goon と gosto を統一したようなパッケージなのか 便利そうだな 俺も使ってみよう https://qiita.com/koki_cheese/items/369cdfc6e3250185ccdb この記事を見ながらGoogle App Engine上でgRPCを動かすテストをしているのですが Windows環境だとproto_gen.shが動きません https://github.com/k2wanko/gae-grpc-web/blob/master/build/proto_gen.sh --plugin=protoc-gen-go=${GOPATH}/bin/protoc-gen-go \ この部分で指定されたファイルが見つからないエラーが出ているみたいですが その場所にちゃんとprotoc-gen-go.exeは存在していますし、環境変数にGOPATHもしっかり設定されていました やっぱりMac買ったほうが良いんでしょうか… windowsだと本筋とは関係のないエラーに遭遇しまくりで萎えてしまう '.' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 あぁ謎… 古いMacbookでテストしたら普通に動作しました… Windowsで開発はやめときます 誰でも簡単にネットで稼げる方法など 参考までに、 ⇒ 『半藤のブブイウイウレレ』 というサイトで見ることができます。 グーグル検索⇒『半藤のブブイウイウレレ』 6BTU26N0P5 ☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の 両院で、改憲議員が3分の2を超えております。 『憲法改正国民投票法』、でググってみてください。国会の発議は すでに可能です。平和は勝ち取るものです。お願い致します。☆☆ web系じゃなくてすまんが仮想通貨業界ってGoの存在感大きいんだな 東大発のベンチャーAIxブロックチェーン企業の求人がGo言語エンジニア直指定だった ちなみにこれな https://en-gage.net/daisy_hr/work_60316/ <必須要件> > プログラミング言語 ・Go (半年以上の実務経験) イーサリアムがgoで実装されてるから。(C++とpythonもあるが) skycoinもgolangだった フィンテック系にも浸透してきてるね プログラミングを誰でも習得できる方法は、「前場アキドルのプログラミングマスター方法」というブログで見られるらしいよ。ネットで調べると見られるらしいです。 2C3G9 >GCP の採用においては、エンジニア側の熱意も大きかったようです。 >「GAE と Datastore、Go 言語でやりたいという思いがエンジニアにすごくあったんです。 お前らがいたぞ progateのgo初級編やってみたけどドットインストールと大差ないな 出来ればGAE/Goで作られたカウルをフルスクラッチで作れるくらいの内容を中〜上級編として公開して欲しい >>473 http://ascii.jp/elem/000/001/499/1499741/ >現在、メルカリ(中略)新規事業として(中略)本やCDなどに特化した「メルカリカウル」を提供している。 >メルカリカウルにおいては、すべてGAEで構築している。 http://nodir.io/post/138899670556/prpc pRPC: gRPC on Classic AppEngine today こういうのもあるんだな 色々調べてみるか 仕事でgoでgRPC使ってるけどさ、正直何がいいのかわからない JSON返しゃよくねと思ってしまう 本当に仕事で使ってたらその発想は出ないはずだが・・・ webの相手しかしてないの?スマホアプリのバックエンドとして普通使うよね? WebView使った側ネイティブアプリだとJSONしか使えなくね マイクロサービス間の通信にgRPC フロントエンドにはGraphQL 別にサーバとクライアント間ではjsonでも困らんと思うが。 どっちかというとクライアント内のデータ構造がjsonのままはきつい。 OpenAPI(Swagger)とgoa使ってる人いる? webアプリにしか使わないならこっちのほうがいいよね? 俺は普通のwebアプリでも使ってるけどね。spaなら全然行ける >>483 使ってると言いたかった。 マイクロサービスとか言うけど、結局webサーバーとして使えるから Twirp良さそうだな HTTP1.1→2.0の過渡期限定だけどさ .protoが同じなら生産性も学習コストも同じだし Twichもgolang使ってたのか 覇権確定だな… 邪悪なOracleの支配下になったJavaを捨ててgolangに来たかいがあった 技術選定を見誤ると数年以上の遅れに繋がる Googleが用意したGoのライブラリを使うだけで GCPやAWS等のクラウドプラットフォームを自由に切り替えできる ポータビリティの高いwebアプリケーションが開発できる、ってことかな? これは良いね goでwebサーバ建てる場合ってwebapiサーバだよね。 普通のwebアプリ。html返すようなのにgoを使うメリットってあるかな? 今どきhtml吐き出し系のwebしか見てない設計を選択するのはやめたほうが良いと思うけどな RESTないしgRPCないしTwirpにしてプラットフォーム共通にすべき ネイティブスマホアプリ対応が二度手間になる >>495 俺も最初はそう思ったけど、クライアントサイドのバグ対応を考慮すると、 必ずしもSPAが正解とは言えない気がする。 インスタンスの生存期間が短いほうがシンプル何だよね >>497 requestに対するresponseのみの構成。 ぶっちゃけSSRな方式のほうが うちはgoのプロジェクトだらけになってきた。 ちなみに時価総額数千億の大手。 ストックオプションうらやましい 俺ならヤングリタイアするわ ヤングリタイアならいいけど 仲間数人雇って独立はやめとけよ 人件費だけであっという間に数千万飛んでいくから… まともに稼げるプロダクトがないのに見切り発車で起業して 自殺してしまった人を知ってる… 1人でも起業できるのがITの良いところなので 自称ニートしながらPeingみたいな小粒サービスを何個も作ってたほうがいい 一つ聞きたいんだけどgoでweb apiサーバ建てるとしてwebクライアントはどうしてる? spaってインスタンスの生存時間が長くなりがちだし、バグったときに全体が止まるから好かんのだけど、どう作るのが一番手軽? Visual Studio Code使ってるんだけどさ ビルドタスクのtasks.jsonの記述冗長すぎないか? 結局make使ってるわ シンプルで理解しやすいし やりたいことはprotocくらいだしいいよね? 鯖は全部jsonで返して クライアント側はVueかRiot reactっていったい何だったんだろうな 最終的にvue.jsの天下になった VueよりRiotの方が簡単でシンプルで再利用性が高いと思うの Vueは結局jQueryと同じになりそうだが... githubのissueもreactよりずっと少ないし、 npmの週刊ダウンロード数見ても数倍差がある... 結局単価高いのはtypescriptでreact書いてるところだし Vueは結局jQueryと同じになりそうだが... githubのissueもreactよりずっと少ないし、 npmの週刊ダウンロード数見ても数倍差がある... 結局単価高いのはtypescriptでreact書いてるところだし vueだとどうしても型で固めきれないよね。 reactはflowとか型付言語と合わせて使うのがほぼ前提になってるから。 Go言語チームとGoogleが「Go Cloud」プロジェクト発表。同一コードでAWSやGoogle Cloudなどに対応できるポータブルなクラウドアプリの実現へ https://www.publickey1.jp/blog/18/gogooglego_cloudawsgoogle_cloud.html 関数の引数にstringを渡しているときは常に値渡しで、 文字列をコピーしているって公式の記載で書いてあるところどこにありますか? 探しているんですが見つからず。arrayは値渡しなのは書いてあるんだけど、、、 えっと、その情報のソースはどこにあるの? ソースください(公式に記載があることを断定していることからするとソースがあるんだと思いますが)。 そして、文字列のコピーってのは何を言っているんですか。 Go の文字列は immutable だから、中身のバイト配列をコピーする必要ない。 https://golang.org/ref/spec#String_types ただ Go の文字列は、配列というよりスライスに近くて、 実際のバイト配列へのポインタをそのサイズを持った構造体である。 https://golang.org/pkg/reflect/#StringHeader この StringHeader についてはコピー(値渡し)される。 でも中身の Data はコピーされない。 別に、Data もコピーすると思い込みたければ思い込んでもいいけど、 immutable だからコピーしてもしなくても変わらない。 実際に試してみれば: https://play.golang.org/p/qsaq4AET8ac >>523 おーありがとうございます。 https://blog.golang.org/go-slices-usage-and-internals 見ながら文字列=arrayなのかと想像していたんですが 実際には文字列=sliceだったんですね そのへんの記述が見当たらなくて悩んでたんですが、公式のドキュメントには書いてないんですかね。実験で確かめるしかない感じ? >>523 そのページの Related articles に書かれてますよん。 https://blog.golang.org/slices > Now a brief section about strings in Go in the context of slices. > Strings are actually very simple: they are just read-only slices of bytes > with a bit of extra syntactic support from the language. > An important consequence of this slice-like design for strings is > that creating a substring is very efficient. > All that needs to happen is the creation of a two-word string header. > Since the string is read-only, the original string and > the string resulting from the slice operation can share the same array safely. >>525 亀レスですがありがとうございます。 ところでStringHeaderで言語内部のデータ構造にアクセスできることに感銘を受けたんですが同じようにsliceにもアクセス可能なSliceHeader的なのもあったりしますか? とおもったらStringHeaderの上にもあったw go modulesめっちゃ便利やな GOPATH関係なく動くのが本当にいい、開発時に嫌だった制限がとうとう無くなってハッピー GAEのstandardも1.11からurlfetchとかが消えてハッピー ベータとれたらやっと人に勧められるわ GAE/SEのGo言語でgRPCするためのベストプラクティスってある? それをまとめたWAFがあると理想なんだがなぁ プロジェクト └ サービスA: GAE/SE Node.js Nuxt.jsでSSR └ サービスB: GAE/SE Go言語 サービスAからのリクエストを処理するAPIサーバ gRPC(Twirp)を使いたい TwirpってことはHTTP/1.1なREST使いたいんだろ? 双方向通信やストリームを使わないのであればgRPCよりも GraphQLのほうがいいと思う nuxt.jsとGraphQLを組み合わせてサービスAに統一するほうがいいぞ nuxt.jsのserverMiddlewareでフックしてGraphQLのエンドポイント出すだけ https://qiita.com/takanorip/items/d1e8618800d951780f4b それならサービスBにプレーンなApollo-server(graphqlサーバ)デプロイして サービスA(nuxt.js側)からクエリ投げてJSON取得する構成のほうがよくないか せっかく境界つくるんだから疎結合にしとこうぜ Microservice化して作業担当者の責任を明確にしたほうがいい 負荷に応じてインスタンスのグレードやインスタンス数を上げたり下げたり出来るメリットも生まれる フロントエンド(SSR)担当のサービスA バックエンド(GraphQL)担当のサービスB スッキリするじゃん まぁ例のQiita記事はApollo-clientとNuxt.jsのやり方だから、Serverには触れてないけどな >nuxt.jsのserverMiddlewareでフックしてGraphQLのエンドポイント出すだけ これに対しての意見な serverまでnuxt.jsに密結合させる必要はない 俺もGAE/Go信者やで 実はその他のPaaSやIaaSクラウドにはない魅力がGAE/SEにはある。 それは「1日の予算設定」だ。 GAE/SEだけ、EDDoS(エコノミックDDoS)で予期せぬ損害を被るリスクが低いのである。 予算使い果たしたらOver Quotaエラーでて終わり。サービスは停止するが破産は免れる。 他のサービスは予算ライン超えても警告メール出すだけで止まらない。 パケ・ホーダイのないスマホでYoutube動画を見るくらい恐ろしい行為なのだ。 資金力のない零細ベンチャーが、悪意ある競合他者から身を護るために有効な選択である。 GAE/Node.jsとGAE/Goってどっちがスピンアップ早いのだろう?と思って調べたらこうなった https://www.bunkei-programmer.net/entry/2018/06/13/232912 Go 平均0.495秒 Node.js 平均0.6516秒 Javaは問題外だな JavaScript界隈のエコシステムが羨ましくなってきた… Nuxt.jsでSSR出来るのNode.js環境だけだし パッケージマネージャーのYarnは高速かつ進捗表示が親切だし (go get だと-vオプション付けても分かりにくい…) GraphQLもApollo Server楽ちんだしドキュメントもわかりやすい Go言語だとスキーマ定義が冗長だったり(graphql-go) プレーンで可読性の高い定義ファイルから自動作成できる便利なgqlgenは gqlgenコマンドバイナリが何かトラブってdeplicatedになってるし いまいちすっきりしない jsみたいなコンパイラ通さない言語はテストが大変すぎて使いたくない ほんのちょっとしたものを作るのはいいけど規模がでかくなると苦痛のほうが遥かに大きくなると感じてる 巨大なプログラムを書けない人はセンスが無いだけ そういう人はコンパイラ使っても破綻する >>543 Typescriptあるやん GoにはGoの良いところがあるから心配するな https://github.com/prisma/prisma/issues/1708 prisma/prismaはいつGoogle Cloud Datastoreに対応してくれるんだい? (1)Google App Engine Datastore import "google.golang.org/appengine/datastore" (2)Google Cloud Datastore import "cloud.google.com/go/datastore" (3)Google Cloud Firestore import firebase "firebase.google.com/go" この関係が複雑で分かりにくい 将来的には(3)からbetaが取れて本流になるんでしょ? あとgo111の第二世代GAE/SEと旧世代のコードが分散してて辛いな 最新の情報はここを見て!という道標が欲しい 公式ドキュメントは散らかりすぎてて訳わからない (3)Google Cloud Firestoreは、betaなので東京リージョンが存在しない。 (2)Google Cloud Datastoreは2019年中に自動で(3)にアップグレードされる おそらく(1)も? Firestoreの裏側にはSpanner(単独で使うとめっちゃ高い)がある。 またDatastoreモードとNativeモードがある。 Datastoreの裏側にはBigtableがある。旧世代の制約はここから来てる。 FirestoreがGAになったらDatastoreは用済み。 Firestore Native Modeのほうがいいならbetaであること、東京リージョンがないことを覚悟して使うべし。 GraphQLの定義ファイル書いてCUIでコマンド打つだけで Google App Engine / SEで動作するwebアプリケーションが 完成するシステムを開発して欲しい 誰か頼むよ マッツン、わかめ氏よろしく >>558 GAE/SEで動かせる言語の中でスピンアップが一番高速 これが最大のメリット Java→クソ遅い、10秒かかる PHP、Python→普通 Node.js→やや早い Golang→チョッパヤ スピンアップが早いのでインスタンス寝かせておいてもすぐ反応できる (課金節約) ○○砲などのアクセス殺到スパイクが来てもスピンアップが早いので瞬時にスケールする 他のIaaS、PaaSは割と遅い gaeでgo動かしてるんですが、jsonpayload形式でログって出せないですか? Goのwebasmって最小でも2MBって馬鹿なの死ぬの? この大きさってなんの意図があるんだろう Go失速したのかissueマネージメントやら方向性の意思決定に難があるようだな このまま使い続けて大丈夫だろうか >>565 氏が難が無いようにしてくれれば、このまま使い続けても大丈夫ですよ! いわゆる声の大きいstaticおじさんたちにissue占拠されて進化しなくなったな…マジで何とかしてくれ! みんなのGo言語改訂されるのか。 Goの書籍少ないから買う。 GraphQLとGo言語をテーマにした専門書が欲しいわ 今は学習ソースへのアクセスのしやすさでNode.jsを選びがちになってる SSRはNode.jsしか出来ないのでそのアドバンテージもデカイ macでgoenvを使って最新の1.12.xをインストールしようと思ったら一覧に出てこないのですが何か理由はあるのでしょうか? goenvは1.23.3です。 >>573 goenv v2 で対応される予定だけど、まだそれがβだね。 https://github.com/syndbg/goenv/releases 急ぎの場合はHomebrewとかじゃなくて、直接masterをチェックアウトすると良いよ。 >>574 なるほど、ベータか、、、 無理に最新を追いかけないのがいいかな。 ありがとうございます。 >>574 試しに入れてみた。 やっと1.12で開発できるぞ。 あのエラーハンドリングDraftが提案されてからもう1年くらい経つが 結局どうなったのかGitHub覗いたら話がまとまるどころか別提案が乱立してた! えぇ・・・ アクティブなErrHandling提案を分類すると4つくらいかな?類似提案多すぎで追いきれん他にもありそう a. 公式draftみたいなHandler独立定義タイプ b. try等の制御キーワード導入で関数コール前に置くタイプ c. @や!や?等の制御記号をerr変数前後に付与して処理に繋ぐタイプ d. val := func() onerror(err Error) { ... }みたいな後置ブロックタイプ aにはそもそも何だったかの不備があって提案が乱立した経緯があるけど bは他言語の失敗から見ても今更感で大多数が反対 cの記号導入はperl等々のスクリプト言語みたいにsigil,twigilと複雑化していずれ初見殺しになるからGo wayじゃないという反応 dは次の行にif err != nilを書くのと大差なくてerr戻り値が末尾側に固定されるデメリットが増えてるだけと指摘 フロー制御とは別にError型のほうも雲行き怪しいね Go失速したっけ?むしろ上がり調子な気がする。 案件はある。 V言語がこのまま成長したらGoは完全にお役目終了にならんか少し心配ではある TypeScriptが出たときのDartを思い出す C言語にトランスパイルするだけの言語だから V言語ソース→トランスパイル→C言語→コンパイル→実行バイナリになるので C言語の弱点(コンパイルが遅い)を強化する糞言語にしかみえないけどな 初期のC++と同じCへのトランスパイル方式なのかVは Goの文法にRust等のmatchとか?制御とか追加してあったりコンパイルもサイトの説明通り速いな ホント毎年あたらしい言語増えるの楽しい中学生のやつも エラー制御いまだに決着つかないし しばらく見ないうちにDenoもgoからrustに変わってたし Go2出な杉でPerl6みたいな末路にならないか心配 この言語、やろうかなと思ったらC#より全然遅いのね。 スクリプトよりは早いけど、コンパイルする言語としてはVMでもなくネイティブなわりにめっちゃ遅い。 >>594 別にコンパイルした後早ければ問題ない。 だからコンパイルした後でC#より遥かに遅い。 つか名のあるコンパイル型ではワーストに近いんじゃないか。 しーしゃーぷがまた暴れてるのか、Rustの手のものか、この攻撃性が気に入らん Go(fasthttp)、C#(aspcore)、PHP(swoole) https://web-frameworks-benchmark.netlify.app/compare?f=aspnetcore,fasthttp,swoole-coroutine 処理できるリクエスト毎秒はGoの方が1.5倍、レテンシーは50%まで2倍速い、99%になると2倍遅い、平均は同等 【2月、2万人】 超過死亡が東日本大震災より多い ://rio2016.5ch.net/test/read.cgi/lifeline/1651735156/l50 これから学びたい人気言語上位なのにまるでスレが書き込まれてないのは何故? 学ぶやつは5ch関係なく、自分で学ぶ むしろ、5chで質問するやつは、コピペしかできないし、何をやってもできない read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる