X



【Go言語】 webapp GO Part1 【Golang】 [無断転載禁止]©2ch.net
0311nobodyさん垢版2017/07/14(金) 21:26:28.94ID:???
>>310
C/C++の代替って言ったらやはりrustになるんじゃないのかな。
特に組み込み分野ではGCがないのはでかい。コンパイラとの対話が大変らしいけど。

Goは最近流行りのoptionalがないのがちょっとつらい。
でも殆ど言語仕様を変化させずに発展させてるのはすごいなと思う。
swiftも見習ってほしいわ。
0314nobodyさん垢版2017/07/23(日) 18:52:11.98ID:???
某CTOの不倫騒動面白いな
0315nobodyさん垢版2017/07/25(火) 10:10:25.12ID:???
まぁ下位互換性は維持するみたいだから
rustのメモリ管理とかnil安全とかは導入できないかもね。
正直もっと関数型によってくれると俺好みなんだけど、
rustだっていいしね
0317nobodyさん垢版2017/07/25(火) 20:29:00.31ID:???
>>316
推測だけどそのコードcode genereteされたものだから、
importエラーが出ないように仮として書いてるんじゃないかな。
0318nobodyさん垢版2017/07/26(水) 03:00:55.02ID:???
>>317
おーなるほど
auto generated なコードなので一旦特別な意味はなさそうということにしておく
ありがとう!
0319nobodyさん垢版2017/08/03(木) 19:14:04.99ID:???
似たメンバを持つ構造体の変換について教えてください
https://play.golang.org/p/1ir9HN8yDG
完全にメンバが一致すれば変換できるんだけど
メンバが少しでも異なると失敗するのなんとかならないでしょうか?
0320nobodyさん垢版2017/08/03(木) 21:19:57.18ID:???
なんとかならなそう
自分で関数なりメソッドなりを定義してやるしかないのではないか
0321nobodyさん垢版2017/08/03(木) 21:56:33.42ID:???
>>320
えー?じゃあ
b:=B(a)
みたいな構文の意味って完全にメンバが一致してないと使えないってことです?
この構文の存在意図がわからん。
0322nobodyさん垢版2017/08/03(木) 23:23:58.87ID:???
>>321
それを言うとstring(1.0)とかも無理じゃん?
0323nobodyさん垢版2017/08/05(土) 09:48:04.97ID:???
>>322
いやいや
構造体の変換の話だけに限定して欲しい
b:=B(a)
上記構文の有用な使いかたの例ってないですかね?
0325nobodyさん垢版2017/08/05(土) 12:12:58.06ID:???
>>324
構造体なんだから代入するだけでコピーになるが
0326nobodyさん垢版2017/08/05(土) 19:16:09.97ID:???
GoにおけるDB操作の決定版ってなんだすろう。
結局xoでスキーマに対応する構造体と生成可能なメソッドを作りつつ
足りないものはsquirrelってqueryBuilderで組み立てるって方針でやってる。
けど、なんかxoメンテしてる人やるきなさげ。
0328nobodyさん垢版2017/08/10(木) 20:59:08.52ID:???
LLから入ったんだけど構造体とかインターフェイスあたりの設計?の勘所みたいなのが分からん
みんなどうやってGo言語(あるいはJavaとか)の設計をいいかんじにできるようになったの?
0329nobodyさん垢版2017/08/10(木) 21:48:13.12ID:???
Go言語は真面目に設計する言語じゃない
適当に書く言語
0331nobodyさん垢版2017/08/12(土) 17:21:40.47ID:???
>>330
そう聞かれるとうまい答えが見つからぶ「オブジェクト指向っぽい設計」というアホな回答になってしまう
そもそもインターフェイスとかいう概念がなかったので使いこなすのが難しい
インターフェイスの何が嬉しいんだみたいな疑問が定期的にわいてくるんだが
0332nobodyさん垢版2017/08/12(土) 18:24:07.22ID:???
動的言語だとダックタイピングだからインターフェースがないってことか。

インタフェースはまんまインターフェースだよ
APIはアプリケーションインターフェースだろ。
つまりオブジェクト間で情報をやり取りするための決まり。

例えばfmt.Fprintfをみてみよう。
https://golang.org/pkg/fmt/#Fprintf
第一引数にはio.Writerを満たすインターフェースならなんでも突っ込める
じゃあio.Writerインターフェースって何か?
これはwriteメソッドを備えたもの

例えばhttpのレスポンスだったり、もちろんファイルだったり
それらはとにかくwriteメソッドを実装しているだけなんだ。
自分で作ったオブジェクトもwiteメソッドさえ備えていれば突っ込める。
便利でしょ?

動的言語の場合だって if (typeof xxx.someMethod === ‘function’) みたいなコードを書いたりしたでしょ?
こういうのを一々入れる必要がなくなる。
なぜならインターフェースの条件を満たさないオブジェクトを突っ込むとコンパイルエラーになるから。
0333nobodyさん垢版2017/08/12(土) 18:27:27.82ID:???
心地の良い設計の基本はすべてを知らなくても実装できること。
例えばfmt.Fprintfの中の実装を知らなくても
Writeメソッドを実装すればfmt.Printfが使えるでしょ。
そういう風に自作のオブジェクトも基本的にインターフェースを仲介して
各オブジェクトの詳細は知らなくても使えるようにする。
つまり疎結合にしてやる。
0334nobodyさん垢版2017/08/12(土) 18:29:48.82ID:???
インタフェースは既存のクラスに手を入れられないのがつらみ
C# みたいな this キーワードいれたりとか Haskell みたいなアドホック多相とかあれば別だけど
0335nobodyさん垢版2017/08/12(土) 18:32:31.26ID:???
俺としてはgoaとか勧める。
あれはwebapiを設計してやるとgoのコードを生成する。
webapiの実装例として参考になるし、そのまま開発してもいいし。
0336nobodyさん垢版2017/08/12(土) 18:58:51.25ID:???
なるほど色々ありがとう
インターフェースの嬉しいところはなんとなく分かった。
ある型にたいして既存の関数やメソッドを使いたい→インターフェースを満たすようにメソッドを定義という感じの思考のプロセスでいいのかな?
0337nobodyさん垢版2017/08/12(土) 19:31:31.97ID:???
>>336
例えばテスト主体で考えてもらえればより便利さがわかると思う。
interfaceを満たすだけのダミーなら簡単に用意できるでしょ。
structを直接引数に取る形にすると本番のstructをテスト書く時に用意しなきゃいけなくなる。
この思考プロセスがやがてDIに結びついていくんだけども。
0338nobodyさん垢版2017/08/12(土) 22:27:32.53ID:???
>>337
この話を聞いた上でちょっと色々コード眺めてみるわ
言わんとすることは分かったのであとは自分で書くときにすんなり使えるか…
とにかく参考になったありがとう
0339nobodyさん垢版2017/08/13(日) 09:29:35.58ID:???
goにおける配列操作で目的の要素を取り出すのっていちいちループを回さないとだめ?

標準ライブラリになんかないかな
0340nobodyさん垢版2017/08/16(水) 17:33:34.62ID:???
メソッドのレシーバにnil pointerを渡して有用な場合ってどういうときなの?
メソッド内でフィールドアクセスする際にpanicになったりして良いことない気がするんだが
0341nobodyさん垢版2017/08/17(木) 02:53:47.65ID:???
>>340
別にnilを渡せるのが有用とかいう話は無くて、単にポインタに対してメソッドを呼び出せるとレシーバーがnilになりうるけどどーすんの?って話でしょ

他言語ではメソッドは呼ばれずにNullPointerException的なのが飛ぶようになってるけど
goの場合はメソッド側でnilに対処すれば呼び出し側はレシーバーがnilかどうかを気にしなくてもいいというメリットはある
0342nobodyさん垢版2017/08/17(木) 05:13:20.16ID:???
>>341
それメリットだとは思えないんだが
nilに対処するコードを毎回書かなきゃならないのもダルいし忘れててもコンパイルできてしまって実行時にpanicするしで嬉しくなくね?
0343nobodyさん垢版2017/08/17(木) 09:20:51.85ID:???
go2でnull安全にならないかな。無理?
0344nobodyさん垢版2017/09/05(火) 00:18:50.69ID:???
gaeのdatastoreを勉強できるいい教材ないかな
0345nobodyさん垢版2017/09/06(水) 10:48:27.81ID:???
appEngine使ってる人いないのん?
go1.8にも対応しつつあるし期待しとるよ
0346nobodyさん垢版2017/09/08(金) 10:37:14.59ID:URvmV42V
GAE勝手にサービス終了しやがった
0347nobodyさん垢版2017/09/08(金) 19:41:29.06ID:???
スレチかもしれないけどGAEってエロあり?
0349nobodyさん垢版2017/09/10(日) 22:06:52.18ID:???
goで配列の定義で

[]*T ってよく見るんですが
[]T でダメなんですかね? []*Tにするメリットを教えて下さい
0351nobodyさん垢版2017/09/15(金) 15:38:04.13ID:???
コスト的にかなりいいよな
ついでにドメインも無料化してくれないかな…(チラチラ)
Googleが発行するクレカの特典とかでもいいから
(Googleにはクレカ利用料の数%のインセンティブがあるからそれで賄える)

Googleブランドのクレカが欲しいねん
0352nobodyさん垢版2017/09/15(金) 20:56:49.57ID:???
Let's encryptとGAEと自動更新スクリプトで無償SSLは既に実現できてた
それを管理コンソールから簡単に設定出来るようにしたとか、そういうのかね?
0354nobodyさん垢版2017/09/16(土) 16:01:42.07ID:???
これでPaaSはGAE一択になったな
今までSSL証明書に払っていたお金をスケールアウト費用に回せるから
コスパぶっちぎりで良い

AWSも追従してくれ
0356nobodyさん垢版2017/09/16(土) 16:10:23.10ID:???
GAEはAWSと違ってサービスが成長しなければ、ずーっと無料で運営できるのが良いのだよ
失敗時のリスクが低いから挑戦しやすい
ランニングコストがほぼ0円になれば、例え月10万PVしかないサービスでも停止せずに
次の新しいサービスを並列で増やして収益アップできる
月間10万PVのサービスを100個作れば1000万PV、月間150万円の収入が期待できる
資金力がない学生起業にぴったりだわ
0357nobodyさん垢版2017/09/16(土) 16:19:58.98ID:???
GAE/Go SE素晴らしいのに採用事例が一部の野心的な会社しかないんだよな
DeNAとサイバーエージェント、メルカリ(の子会社)くらいしかない
0358nobodyさん垢版2017/09/16(土) 16:25:41.59ID:???
datastoreの学習コストが問題なのかね
0359nobodyさん垢版2017/09/16(土) 17:22:33.07ID:???
HTTPSじゃないとSEO不利だからこれは朗報
趣味サイトに年間1円も掛けたくない
0360nobodyさん垢版2017/09/16(土) 21:41:26.98ID:???
レッツエンクリプトなんて今更感しかないだろ
0361nobodyさん垢版2017/09/17(日) 09:43:12.78ID:???
>>358
datastoreが使いづらいと言ってもgoコード側でスキーマ設定する感じだし
joinできないからこそ結果的に使いやすいかもしれない
dbの挙動もレプリカありきの挙動だとすれば納得できる
0362nobodyさん垢版2017/09/18(月) 06:17:20.92ID:???
いわゆるBtoBの受託開発だと帳票出力があるからjoinないとキツイが
GAE/Goが想定してるのはBtoCのwebサービスだからjoinなくても何とかなる
ページングもカーソル使って次へと戻るだけあればいい
0363nobodyさん垢版2017/09/25(月) 22:11:41.45ID:???
handlerのテストってどこまで厳密にやるべきなの?
DBとのやりとりの部分とかは内部で使ってる関数をテストすればもんだいないから様々なパラメタに対して200を返せるかどうかだけでいいのでは?と思うんだけど
0364nobodyさん垢版2017/09/25(月) 23:10:55.96ID:???
>>363
バリデーションを網羅できてればいい気がする。
0365nobodyさん垢版2017/09/26(火) 00:17:16.02ID:???
>>364
そのバリデーションってどこのことだろう…?
自分の中ではhandlerに対するテストなんかは裏側から取得してきたデータがどういうものかはあまり気にする必要がなくて入力と返ってきたデータの出力の仕方だけが関心点だと思ってるんだけどなかなかそういう記事とか見かけないんだよね
0366nobodyさん垢版2017/09/26(火) 01:14:58.21ID:???
postしたデータは、バリデーションせずにdbに、ぶち込んじゃうの?
get系でも入力パラメーターのバリデーションあるよね。
0367nobodyさん垢版2017/09/26(火) 01:23:01.52ID:???
>>366
そこでのバリデーションならちゃんとテストケースに含めるべきだと思う
一方でたとえばUsersテーブルからデータをとってくるためのgetUsers内でのバリデーションのようなものはテストケースをいちいち考慮したくないということが言いたかった
0368nobodyさん垢版2017/10/02(月) 23:38:46.87ID:???
golangで独自の仮想通貨を作るのって出来る?
gethを改造すればいい感じ?
0369nobodyさん垢版2017/10/08(日) 01:33:45.12ID:???
go test とか go build, go install などのコマンドってどこに定義されてるの?
ソースを読んでみたいんだけど見つからなくて困ってる
0371nobodyさん垢版2017/10/08(日) 02:46:19.38ID:???
ありがとう、cmdのinternalにあるの見逃してた
0372nobodyさん垢版2017/10/09(月) 09:32:28.50ID:???
>>370
最近はGOROOTもGOPATHも環境設定不要だから
cd ${go env GOROOT}/src/cmd
ってすべき
0373nobodyさん垢版2017/10/17(火) 05:35:21.44ID:???
ゲーム作るためにgo-gl/glfw使おうとしてmain関数作って実行しようとしたら、
build constraints exclude all Go files in C:\Users\ユーザ名\Desktop\glfw

って出た。GOOS=windows, GOARCH=386で試したんだけど初心者すぎてわからん
0375nobodyさん垢版2017/10/30(月) 15:07:30.47ID:???
Ruby使いはwebデザイナあがりの意識高い系が多い(もちろんMac)
PHP、Perl使いは大昔にHTMLタグを直打ちしてたHTMLコーダー出身のスパゲッティコードを量産していた老害と、その老害を上司に持つ可哀想な若者が多い
Python使いは科学技術や情報工学系(自然言語処理、機械学習、深層学習等)のアカデミア出身者が多い
Go使いは新進気鋭なBtoC系上場企業の社員が多い
JavaはBtoB系受託IT土方が多い

こういう印象あるわ
0376nobodyさん垢版2017/10/30(月) 15:56:22.62ID:???
この結果を受けてweb&スマホアプリのバックエンドはGoが主流になるんだろうな
当社ではGoエンジニア募集中です
0377nobodyさん垢版2017/10/30(月) 16:29:20.54ID:???
Goは日本語学習サイトを充実させたほうがいい
PHPerがGoに移行するにはネットで検索>コードをコピペ
この集合でwebアプリケーションが作れないとダメだからな
0378nobodyさん垢版2017/10/30(月) 18:32:44.55ID:???
>>374
単純に力ある人がGo使うようになってるだけだと思うんだよなあ
別にGoがすごいとかではなくそこそこ力ある人はRubyでもPythonでも予選突破できる
0379nobodyさん垢版2017/10/30(月) 19:39:18.69ID:???
インタプリタとコンパイラ言語で速度比較したらそりゃ
Goのほうが有利だろ
省メモリ性やら単純な速度まで桁が違う
0380nobodyさん垢版2017/10/30(月) 23:19:19.13ID:wUOmmPOd
将来性あるのかね
0381nobodyさん垢版2017/10/31(火) 01:06:44.62ID:???
俺もうSPA前提でバックエンドにgoaを使うことでwebアプリ書いてるんだけど、いいよね。なんかgoaはマイクロサービス用のフレームワークと名乗ってるんだけど、別にマイクロサービス関係なしに使いたいんだけど。
つーかGAEで使ってるけど良い。
0383nobodyさん垢版2017/10/31(火) 10:32:10.96ID:9A6ED9LI
仕事でwebサービスをGoで書いてるけど、もっとGo使う会社増えないかなー
Go使ってて転職したいと思う会社が無い
0384nobodyさん垢版2017/10/31(火) 12:18:08.41ID:???
>>380
Googleの基幹事業だしDonateで維持してるオープンソースコミュニティ発の言語よりは将来性あるんじゃね
Youtubeのバックエンドで動いてるPythonコードをGolangに変換してパフォーマンス改善してるし
その他にも色々とGolangで動いてるシステムがある

また今の時期にGolangに目をつけてる会社は、経営陣(CTO等)に先見の明がある証拠だから伸びるだろう
0385nobodyさん垢版2017/10/31(火) 22:14:40.01ID:???
どうでもいいけどGolangって書き方に違和感ある。
Goかgolangじゃないの?
0388nobodyさん垢版2017/11/01(水) 19:50:44.85ID:gNO8HPb6
あーらんは正式名称じゃん
0390nobodyさん垢版2017/11/02(木) 18:25:32.74ID:???
タグなんてユーザーが適当につけるものを論拠にされても
0391nobodyさん垢版2017/11/03(金) 10:46:52.23ID:???
gopherのみんなはGoのinterfaceについてはどう感じてる?
他の言語のinterfaceについて詳しくないんだけど、interfaceのもつメソッドを実装していれば満たしていることになるというのがどうも分かりなくくて辛い
明示的にこのinterfaceを満たしてますよみたいなのが欲しいのは修行が足りてない?
0392nobodyさん垢版2017/11/03(金) 14:00:58.57ID:BF7OMi2r
Frank
Golang
0393nobodyさん垢版2017/11/03(金) 14:55:44.66ID:???
>>392
type T struct{}
var _ I = T{}
でT型がinterface Iを満たすかチェックできる
0394nobodyさん垢版2017/11/03(金) 16:14:51.46ID:???
>>393
チェックできるかどうかというより何を満たしてるかパッと見でわからないという意味で辛い
0395nobodyさん垢版2017/11/03(金) 16:24:00.33ID:???
Goのinterface面白いと思うよ
何を満たしてるかぱっと見でわからないっていうのはinterfaceの使い方が良くないんだと思う
必要なメソッドを理解しないまま使おうとしてるからわからなくなるんじゃない?
0396nobodyさん垢版2017/11/03(金) 17:18:04.32ID:???
>>394
393でコンパイルエラーが出て何の実装が必要かわかるんだから、それで問題ない気がするんだけど。
0397nobodyさん垢版2017/11/03(金) 17:22:11.97ID:???
>>395
面白いしJavaとかより柔軟だよね。
もっとinterfaceを拡張してプロパティとか演算子のシンタックスシュガーをもっと付けて欲しいとは思う。
多分上手く拡張できればジェネリクスに近い感じになると思うんだけど
0398nobodyさん垢版2017/11/03(金) 17:37:29.27ID:???
>>396

そもそもIの存在を知らないような場合にそういうコードでチェックできないと思うんだが

TにReadメソッドが実装されてる→よく読み進めるとIにはReadメソッドをもつ→TはIを満たしてるという思考の流れが気持ち悪い
0399nobodyさん垢版2017/11/03(金) 18:08:43.40ID:???
>>398
考え方がおかしい。元々の質問は
>> 明示的にこのinterfaceを満たしてますよみたいなのが欲しい
という話だから当然inteface “I”の存在を知っている前提。
構造体Tを作っていてそいつにinterface Iの実装を行いたいという場合に

type T struct{}
var _ I = T{}

とういう風に書くと実装条件を満たすかをコンパイルエラーでチェックできるから
確実に実装できる。
0400nobodyさん垢版2017/11/03(金) 18:43:50.33ID:???
もしかして定義済みの型がどのinterfaceを実装してるのか明示してほしいってことか
でもそれGoのinterfaceの考え方じゃないよ
0401nobodyさん垢版2017/11/04(土) 00:08:40.50ID:???
>>400
アンカーつけないとなんに対しての反論かわからんのだが。
interfaceの概念はべつにGo独自とかそういうもんじゃないし
Goのinterfaceの考え方ってなんのことを指してるのかよくわからんな。
基本的にはJavaと変わらんでしょimplementsが不要ってだけ。
0402nobodyさん垢版2017/11/04(土) 00:27:05.59ID:???
>>401
>>400>>391,394,398あたりへの憶測

他言語のinterfaceは、imprementsすることでその型が何であるのかを説明するためのもの
Goのinterfaceはオブジェクトが必要な機能を備えているか調べるためのもの
だから考え方が違う
0403nobodyさん垢版2017/11/04(土) 02:51:54.56ID:???
>>402
なんかフワッフワした言い回しすぎて何を説明したいのかがわからんな。

interfaceは、英単語の意味そのものだよ。つまりはメソッド名とパラメーターの並びと、返り値の型の組み合わせそのもの。

それ以上でもそれ以下でもない。
基本的には言語として共通の概念と言える。

goとそれ以外の言語の違いは
型(javaの場合はclass)がinterfaceを満たす条件が違うってだけ。

条件の違いは
java: interfaceを明示的に指定する
go: interfaceと同じメソッドを、実装する
0404nobodyさん垢版2017/11/04(土) 10:03:13.95ID:???
どうでもいい言葉あそびを始めちゃった
0405nobodyさん垢版2017/11/04(土) 14:18:28.93ID:???
PHPerだらけだったうちの会社もとうとうGoの勢いを感じて次のプロジェクトで使うことになった
ISUCONの結果が地味に効いてる
経営陣はAWSの課金が減ることを期待してるみたいだけど、はたしてどうなることやら
0407nobodyさん垢版2017/11/04(土) 22:04:18.44ID:???
他人の書いたソースを読んでて特定のinterfaceの実際の実装を見たい場合
どの構造体や型をみればいいのか探すのが面倒なことはまれによくある
0408nobodyさん垢版2017/11/05(日) 09:46:32.93ID:80U0JgH4
> Goのinterfaceはオブジェクトが必要な機能を備えているか調べるためのもの

これって公式にどっかに書いてあるの?
というかGoにオブジェクトって概念あるか
0409nobodyさん垢版2017/11/05(日) 11:30:57.32ID:???
>>407
guruが対応してるから簡単に探せるで
vscならcmd+f12で実装を探す
0410nobodyさん垢版2017/11/05(日) 15:24:42.14ID:???
>>409
うん
手元にcloneしたソースはguruで探すけど
githubでソース眺めてる時とかがちょっと困る
レスを投稿する


ニューススポーツなんでも実況