Go language part 2

12017/11/11(土) 19:25:26.19ID:X8lWnCzG
Goについて扱うスレッドです。
GoはGoogleによって開発された言語です。

公式ドキュメント
http://golang.org/doc/

日本語訳
http://golang.jp

※前スレ
Go language part 1
http://mevius.5ch.net/test/read.cgi/tech/1381374291/

1472017/11/18(土) 15:31:38.82ID:eanOOMuW
俺の長文もこんな感じなのかなぁ、注意せな。

148デフォルトの名無しさん2017/11/18(土) 16:28:17.34ID:7yJX3UxV
>>146
>Goは割と想定外のところでバグるんだよ。
>この点、実はJavaScriptはC的で、文法だけ抑えたらあとは、あー、はいはい、で行けた。
>だから俺(というかC使い)にはJavaScriptは相性がいい、というのはある。

どういうコードでバグったの?

149デフォルトの名無しさん2017/11/18(土) 18:17:51.34ID:euoYf0NO
>>148
そりゃ該当するのは君の言うnilとかだよ。
俺の場合は何度も言っているがJSONだ。

問題なのはこの原因が「Goの特殊仕様」であって、「俺の未熟な文法理解」ではないこと。
文法は一通りやれば終わるが、特殊仕様は確認しないと分からず、その都度の対応になる。
新しい領域に踏み込んだら毎回地雷原を歩かされるようなもので、これでは生産性なんて上がらない。
だからプログラミング言語には統一性/一貫性が重要だと言われるわけでね。

C++は今は何でもかんでも仕様に取り入れてる。
あれがいいかどうかはさておき、既に言ったように、Goで何か結果が出れば必ずC++は取り込む。
だったら俺はそれでいいや、という感じだね。

先頭を走らなきゃヤダ!ならGoに集まっている連中とワイワイやるのもいいのではないかな。
ただ、仕様を見る限り面子には非力感がありまくりだが。
そして当然、結果はそう簡単に出ないし、出ても簡単にパクられる。
それも覚悟の上でがんばれ、ってとこだね。

150デフォルトの名無しさん2017/11/18(土) 23:55:49.43ID:TdFdr2wf
>>149
そんなの言語毎にハマりどころはあるから。
Goだけにある問題点みたいな言い方するから、
どんなのかと思った。
jsだってthisが何指してるかわからなくなる問題とか、独特のハマりどころはあるでしょ。

jsonの問題もjwgとか使えば自動的に理想的なtag付けしてくれるんで。使ってみては?

1512017/11/19(日) 00:27:33.12ID:LuozPxgy
ドキュメントに書いてあることができないのが、何で未熟な文法理解に何故起因しないかわからん。
文法理解してるつもりなのに書けないのなら、語彙も足りないんだろ。
ってかドキュメント読めよなぁ。
特に難しい事もないじゃん。
なんか読めない理由でもあんのかね。

152デフォルトの名無しさん2017/11/19(日) 00:31:17.32ID:SsMAbqSz
>>150
いやGoだけだぞ。
正確に言うとC系(ハロワ系)はCに意図的に似せて作ってあるからこの辺で問題が生じることがない。
俺は関数型には深入りして無いからそっちは知らんが。

君がGoだけかなり特殊だと気づかないのは、他に比べる手持ちの言語が無いからだよ。
ただそれもGoの意図通りのようだし、
確かに他言語の経験者が大量流入すると独自進化できない、というのはごもっともだ。
ジェネリック使いたければ他言語を使え、Goはジェネリックよりいい解を探してみせる!というのもありだろう。
実際、彼らの意図通り、俺みたいなC系経験者にとってはGoは魅力的ではないし、ひとまず静観といったところだね。
上手くガラパゴス化して面白く変化できるかどうかだね。

> jsonの問題もjwgとか使えば自動的に理想的なtag付けしてくれるんで。使ってみては?
これは逆なんだよ。
書かないことこそが素晴らしい、というのが従来型言語であって、俺はそっちを支持する。
そうではなく、自動生成こそが正義、というのならそれはまあがんばってね、という感じだが、
それも結局「正しく自動生成できているか」確認しないといけないんだから、
書くのと比べてやること減ってないだろ。
なんかそこらへんの根本的なノリが違うんだよなあ。


なお、
> jsだってthisが何指してるかわからなくなる問題とか、独特のハマりどころはあるでしょ。
これは違う。あいつらはマトモにオブジェクト指向も出来ないくせに主張するからおかしなことになる。
普通に使えば obj.method なんだから、thisが何を指すかで戸惑うことなんてない。
逆に、それ以外でthisを使うからおかしなことになるのだが、それは根本的に間違ってるんだよ。
(ただし仕様上、関数ポインタにはいちいちbindする必要があるが、これはすればいいだけ)
JavaScriptのthisガーって言っている奴は間違いなく馬鹿だから、無視していい。
ただそいつらが過半数な感じがJavaScriptが終わってるところなんだが、、、、

1532017/11/19(日) 00:34:49.76ID:LuozPxgy
なんで糖衣構文ではなく、アロー関数が出来たんだろうねぇ。

まぁ、言ったからには、静観してくれたら良いな。

154デフォルトの名無しさん2017/11/19(日) 02:19:38.32ID:uqF6CIR0
>>152
Goとjsで平等な視点で比較評価しているとは思えない点は目をつぶるとして

>それも結局「正しく自動生成できているか」確認しないといけないんだから、
>書くのと比べてやること減ってないだろ。

あなたの得意分野のCだって内部的にはプリプロセッサがコード生成してるけどそれを目視チェックしたこと無いよね。
隠蔽しているだけでコード生成を使ってるんだよ。

155デフォルトの名無しさん2017/11/19(日) 02:37:25.16ID:uqF6CIR0
コード生成を嫌ってるみたいだけど、そして理解もできるけど
静的言語が動的言語並の自由度を確保しようと思ったらコード生成は避けれないと思う。

例えばちょっと前にあったdatabaseとの接続もそう。
コンパイル前にスキーマを収集して型を作るのが静的言語における最適解。
それ以外は動的な解決(interface{}を使う)しかなくなり、静的言語としてのメリットを失う。

でも、そもそもコード生成嫌わないで。
生成したコードをデバッグ時に参照できるというのは、バグの解決につながりやすい。
Cで複雑なマクロを組むとエラーがわかりづらくなるけど
プリプロセッサの出力を目視できるようにすると解決できたりする。

だから Goのコード生成もプリプロセッサのコード出力くらいに考えておけばいいと思う。

156デフォルトの名無しさん2017/11/19(日) 04:15:36.04ID:ayZ5nPnf
嫌なら使わなければいい
気に入らないなら思いの丈をブログにでも書いてくれ
そろそろ黙れ

157デフォルトの名無しさん2017/11/19(日) 11:03:39.31ID:5dcaUzmV
技術的革新について話すだけのヤツはクソだ、黙って手を動かせ、と言った奴を
自分が触ったことのないテクノロジを批評するのは滑稽、と批判してみせた奴

こいつが、その素晴らしい技術でLinuxを超える何かを世の中に残せたのなら説得力が有るのだが…
結局何かしらの技術を語ってる奴は総じてクソなのは揺るがない

158デフォルトの名無しさん2017/11/19(日) 14:16:27.55ID:SsMAbqSz
>>154
いや俺はマクロは最小限(見りゃ分かる程度)しか使ってない。
そして自動生成を嫌っているのではなくて、手間が増えるのを嫌っている。

PHP, JavaScript:何も書かなくていい
Go:構造体を書き、タグ付けスクリプトを作成し、go generate してタグを付け、正しくタグがついているか確認 ← やること多過ぎ
Go:構造体を書き、タグを書く ← これのほうがまだまし

>>155
そりゃ公平な評価にはならないよ。俺は既にC言語は十分使える状況なんだから。
そしてPHPとJavaScriptにはC系言語の常識が通用したからさほど苦労しなかったが、
Goはそうではなく、色々引っかかる。
ただこれはGo言語制作陣の意図通りだし、確かにいまさら互換言語を整備する意味はないんだよ。

> それ以外は動的な解決(interface{}を使う)しかなくなり、静的言語としてのメリットを失う。
ちょっとこれは厳しすぎ、というか、若干誤解しているか?
(静的クラス機構による)動的型は型を失うわけではなく、一般的には「静的言語としてのメリットを失う」とはされない。
確かに間接呼び出しになる分だけ遅くはなるのだが、これを言うなら世の中のOOP言語は全部糞になる。
(動的言語の)動的型は毎回辞書引きが必要(map扱い)だから効率が悪いとされている。
Goのinterface{}はこれではない。

ちなみにGoのreflectionもC系とはちょっと感覚が違う。
jsonを吐くのにフィールド名が必要なら、普通はjsonモジュール内でreflectionするはずで、
それならpublic(先頭大文字)でなくとも全部取れるはずなんだよ。だからそれを期待してしまうわけ。
そして、あ、あれ?とれないの?みたいな事になる。
C的常識でGoを組んでると、この辺の予想外のところで引っかかる。いろいろ根本からして違うんだよ。
一方PHPだと、「下手糞がフレームワーク組みやがって」とは感じるけど、何でそうなるのかは分かるんだよ。
あっちはベースを共有してる感がある。
だから今の俺だとPHPの方がGoより生産性が高くなってしまうわけ。
しかしGo言語はC系言語出身者お断り仕様で計画通りなのだから、これはこれでいいんだよ。

159デフォルトの名無しさん2017/11/19(日) 16:10:38.42ID:uqF6CIR0
>>158
>> それ以外は動的な解決(interface{}を使う)しかなくなり、静的言語としてのメリットを失う。
>ちょっとこれは厳しすぎ、というか、若干誤解しているか?

単純にIDE連携が静的言語としてのメリットって話
つまりコード補完する時にDBのカラム名が候補に出る状態にできるのが静的言語のメリット。
内部的に型を持つとかそういう話じゃない。

> Go:構造体を書き、タグ付けスクリプトを作成し、go generate してタグを付け、正しくタグがついているか確認 ← やること多過ぎ
じゃなくて
Go:構造体を書き、go genereteを実行する
だけ。正しくタグがついているか確認は不要。ツールを信頼してるから。Cのプリプロセッサを信頼するのと同じ。

160デフォルトの名無しさん2017/11/29(水) 20:31:48.17ID:hqVSi0UH
長文で会話するのやめろ

161デフォルトの名無しさん2017/12/02(土) 01:31:21.45ID:YvPU0sEp
aws lambdaに正式対応だから勉強してみるか

162デフォルトの名無しさん2017/12/08(金) 02:34:03.21ID:vRwW3yxJ
外部ライブラリで
import "github.com/hoge/foobar"
みたいにリポジトリ指定みたいに書いたりしますが
そのリポジトリが無くなったら終わりってことですか?

それと、forkした場合などはユーザ名変わるわけですがfork内のimport全部書き換えなきゃならんとか面倒ではないですか?

163デフォルトの名無しさん2017/12/08(金) 14:44:36.27ID:feUzbW7M
>>162
vendoring すれば良いんじゃない

164デフォルトの名無しさん2017/12/08(金) 17:33:33.51ID:vRwW3yxJ
ありがとうございます
vendoring という機能を知りませんでした
vendoringで解決できそうです

165デフォルトの名無しさん2017/12/08(金) 21:10:32.89ID:TYM9B0mh
リポジトリあっても数年更新ないとかあるからな
go-bindataとか

166デフォルトの名無しさん2018/01/21(日) 17:08:27.78ID:N7P1nvHc
ふむ

167デフォルトの名無しさん2018/01/24(水) 05:47:28.45ID:V1qhcEkf
goでもwasmへの準備が着々と進行中らしいな

168デフォルトの名無しさん2018/02/08(木) 01:35:20.81ID:KOEkDRo6
goland使いにくいvscode使いたいです

169デフォルトの名無しさん2018/02/22(木) 17:15:17.70ID:zGB/N5H/
>>165
こういうのがあるとパッケージプロバイダを経由したほうが良いと思える。アカウントけされたらvendor使ってても無駄だよね

170デフォルトの名無しさん2018/02/23(金) 18:16:11.30ID:OcP2glf5
vgo に期待

171デフォルトの名無しさん2018/02/25(日) 10:05:06.21ID:j2G6HVKr
ビルドしたバイナリにソースコードのパスが含まれちゃうんだけどこれを抑制する方法ってありますか?

172デフォルトの名無しさん2018/02/25(日) 11:14:54.47ID:5I/H3HR9
>>171
試してないけどgoupxとか試してみたら?

173デフォルトの名無しさん2018/02/25(日) 12:00:11.13ID:j2G6HVKr
>>172
レスありがとうございます。
upxで圧縮しても解凍したらパスが出てきてしまうので意味がありませんでした。
https://qiita.com/kitsuyui/items/d03a9de90330d8c275c8
↑みたいな方法しかないみたいですね。

174デフォルトの名無しさん2018/02/26(月) 00:18:29.75ID:0Cvn/PR2
なるほどpanic時に使う情報なのか。
でも本番では要らないなぁ

175デフォルトの名無しさん2018/03/05(月) 14:57:47.25ID:HYXIaj2t
Googleが「Dart 2」発表、Dartを再起動。iOS/Android用ライブラリ「Flutter」と共にWebとモバイルのクライアント開発にフォーカス
http://www.publickey1.jp/blog/18/googledart_2dartiosandroidfultterweb.html

176デフォルトの名無しさん2018/03/22(木) 15:24:45.26ID:674+Hr9W
APIサーバでマスタデータ的なものをグローバル変数として最初にDBから読み込んでおくのってアリな設計?

memcacheとか使うのはもう少し流動性のあるデータとか、サーバ間できちんと同期する必要のあるデータ扱う場合って認識でいる

177デフォルトの名無しさん2018/03/22(木) 15:27:09.34ID:o6o53GFc
>>176
あり
いつ更新するかは重要

178デフォルトの名無しさん2018/03/23(金) 04:54:04.26ID:2CHUAIka
初歩的な質問で恐縮なのですが、
Javaでいう所のSystem.out.print(i + " ");のような記述は、
Goではどのようにすればよいでしょうか?
fmt.Print(i + " ");とするとエラーになってしまうのですが…

179デフォルトの名無しさん2018/03/23(金) 08:37:20.35ID:yG5SnYrv
>>178
fmt.Print(i, ” ");

1801782018/03/23(金) 16:41:04.93ID:2CHUAIka
>>179
分かりました。ありがとうございました。

1811762018/03/23(金) 18:24:39.93ID:QQ32nCj2
>>177
ありがとう!

182デフォルトの名無しさん2018/03/26(月) 02:30:23.68ID:w6UdYv9O
intのabsってどこにあるの?

183デフォルトの名無しさん2018/03/27(火) 02:46:00.44ID:JbLcn67A

184デフォルトの名無しさん2018/03/27(火) 02:58:17.13ID:JbLcn67A
absのベンチの話面白いね

Optimized abs() for int64 in Go
http://cavaliercoder.com/blog/optimized-abs-for-int64-in-go.html

185デフォルトの名無しさん2018/03/27(火) 08:30:30.17ID:iLpxT8od
intのabs無いんかい。
まぁ簡単に作れるからいいんだけど、、、なんで?
ジェネクリスができたら実装するんかな

186デフォルトの名無しさん2018/03/27(火) 10:55:24.81ID:PA7npbZ0
>>184
(・∀・)イイネ!!

187デフォルトの名無しさん2018/03/28(水) 03:52:49.62ID:ZDJEBTZY
https://golang.org/src/sort/sort.go

Goのクイックソートの実装を見ると内部でヒープソートとシェルソートをしているように見えるのですが
これはイントロソートの亜種なんですか?

188デフォルトの名無しさん2018/04/08(日) 22:26:49.15ID:JpRlbHG8
Google CodeJam 提出言語をGoのみにすればGoの普及がもっと加速したんじゃなかろうか

189デフォルトの名無しさん2018/04/08(日) 23:50:10.95ID:yrhx1H5B
go言語にc++17の [[nodiscard]]属性みたいなのないですかね?

190デフォルトの名無しさん2018/04/09(月) 23:26:18.67ID:MS0CVzIb
ほう、検査例外みたいな機構がC++に出来るのか
そりゃ楽しみだな

191デフォルトの名無しさん2018/04/10(火) 00:34:02.45ID:m2euEy9A
アンダースコアを使用禁止にしたら

192デフォルトの名無しさん2018/05/03(木) 12:05:12.84ID:y3R7schb
wasmまだー?

193デフォルトの名無しさん2018/05/22(火) 10:19:05.51ID:yZwDcGoJ
func calc(x int, y int) (int,int){
return x, y
}

var a int
a, b := calc(1,2)

みたいに定義済みのaと未定義のbに戻り値代入したいときって、
a用の一時的な変数を用意しないと駄目よね?
なんだかんだ一年以上、疑問に思ったまま過ごしてる

194デフォルトの名無しさん2018/05/22(火) 10:20:03.02ID:yZwDcGoJ
もしくはbを先に定義しちゃうか
どっちが一般的なんだろう

195デフォルトの名無しさん2018/05/23(水) 19:52:57.37ID:Au5e7VGg
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

XC972

196デフォルトの名無しさん2018/05/24(木) 00:39:30.46ID:10PxTeir
RDBをRedisとかでキャッシュしつつ、更新もしてるサンプルない?
ラッパーの実装を参考にしたい

197デフォルトの名無しさん2018/05/25(金) 23:12:31.74ID:IQ5QomEG
>>193
別にそのまま行けないか?
aに当たるのはerrだったりするよね。

新着レスの表示
レスを投稿する