X



Go language part 1

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2013/10/10(木) 12:04:51.78
Goについて扱うスレッドです。
GoはGoogleによって開発された言語です。
0589デフォルトの名無しさん
垢版 |
2016/06/10(金) 11:28:41.43ID:+PET1099
http://qiita.com/kitoko552/items/a6698c68379a8cd8b999
オブジェクト指向っぽいことを試してみようと思い、上記のページを参考に以下のコード書いてみた
https://ideone.com/3ClfoG

$ go run capsule.go
# command-line-arguments
.\capsule.go:24: invalid indirect of Human literal (type Human)
というエラーが出るんだけどどこをどう変えればいいですか?

やりたいことは、
・カプセル化
・getter, setterの定義
・Embed
0593デフォルトの名無しさん
垢版 |
2016/06/11(土) 01:51:48.80ID:vokBGi10
>>587
https://ideone.com/rGIVZU
このような場合は上手くいったけど、

https://ideone.com/86I4on
このように、構造体に2つの構造体が埋め込まれていて、それらに更に動的にメンバ変数に値を入れていくとなるとどうすればいいのか悩んでるんですが
コメントで★を入れた部分はどのように記述すれば良いのか全く分からず半日くらい費やしてます(苦笑)
0594デフォルトの名無しさん
垢版 |
2016/06/11(土) 02:54:26.06ID:ncrPm/bC
とりあえずは即時関数で。

return &Profile{
mine: func() (m MyProfile) { m.SetProfile(arr["me"]); return }(),
yours: func() (y YourProfile) { y.SetProfile(arr["you"]); return }(),
}
0595デフォルトの名無しさん
垢版 |
2016/06/11(土) 12:57:03.40ID:5N4sydIU
>>594
ありがと
本当に助かりました
自分には浮かばない発想でした

しかし、一つ聞きたいのは、
func NewProfile(arr map[string]map[string]interface{}) *Profile {
var m MyProfile
var u YourProfile
return &Profile{
mine: m.SetProfile(arr[
0596デフォルトの名無しさん
垢版 |
2016/06/11(土) 12:58:26.45ID:5N4sydIU
>>594
ありがと
本当に助かりました
自分には浮かばない発想でした

しかし、一つ聞きたいのは、
func NewProfile(arr map[string]map[string]interface{}) *Profile {
var m MyProfile
var u YourProfile
return &Profile{
mine: m.SetProfile(arr['me']),
yours: u.SetProfile(arr['you']),
}
}
はダメなのに、なぜ
func NewProfile(arr map[string]map[string]interface{}) *Profile {
return &Profile{
mine: func() (m MyProfile) { m.SetProfile(arr['me']); return }(),
yours: func() (u YourProfile) { u.SetProfile(arr['you']); return }(),
}
}
は可能なのかな、と
SetProfile()自体が関数なのに、なぜわざわざ無名関数使って内包したSetProfile()を呼び出さないと上手くいかないんですかね?
0598デフォルトの名無しさん
垢版 |
2016/06/11(土) 13:26:31.32ID:ncrPm/bC
>>596

m.SetProfile(arr['me'])

この場合、副作用だけ(オブジェクトに値がセットされるだけ)なので、
return m とする(オブジェクトを返す)必要があるのです。

とは言うものの、SetProfile はメソッドではなく通常の関数でも良いのでは?
と思ったので http://ideone.com/5rnnHW ではそうしています。
0599デフォルトの名無しさん
垢版 |
2016/06/11(土) 13:44:39.08ID:5N4sydIU
>>598
なるほど、良く分かりました
別の方法も教えていただきありがとうございました
勉強になりました
0600デフォルトの名無しさん
垢版 |
2016/06/11(土) 14:12:16.15ID:JfIPVaDb
>>590
func NewHuman(name string, jobname string, position string) Human { return Human{ 〜
としても動くけど、これだと値渡しになって
h1 := NewHuman("Shinzou Abe", "politician", "prime minister") 呼んだときにも
中で1回コピー起こって無駄だから参照渡しにするってことでいいの?
0601デフォルトの名無しさん
垢版 |
2016/06/11(土) 22:32:52.72ID:oEY46iar
Javaで言う、ScannerのNextInt()みたいなのってGoには無いの?
bufioのText()しか調べても出てこないんだけど、これを型キャストしろってことなのかな?

scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
n := scanner.Text()
これをn.(int)って感じ?
0603デフォルトの名無しさん
垢版 |
2016/06/17(金) 15:30:55.46ID:De9+BeR4
出た。

プログラミング言語Go 
Alan A.A. Donovan, Brian W. Kernighan 著
柴田芳樹 訳     
発行元:丸善出版(株)
0604デフォルトの名無しさん
垢版 |
2016/07/10(日) 22:27:22.81ID:znpcZSb6
var t *time.Time = & time.Now()
とやると
cannot take the address of time.Now()
って出るんですけどなんでダメなのか教えて下さい
0606デフォルトの名無しさん
垢版 |
2016/07/15(金) 11:24:05.90ID:tpc0LssI
t := & time.Time{}

ts := time.Now()
t := &ts
みたいにアドレスで変数に保管したいってことだろ

ttps://golang.org/ref/spec#Address_operators
言語仕様上、&演算子が変数か構造体(のコンストラクタ)しか認めてない感じ?
実態の持ち主が行方不明になる可能性があってGCが動かなくなるのかねぇ
0607デフォルトの名無しさん
垢版 |
2016/07/17(日) 03:13:59.59ID:rRft+gba
ポケモンGOとコラボしてGopher出してもらおうぜ
このビッグウェーブ、乗るしかない
0611デフォルトの名無しさん
垢版 |
2016/07/20(水) 21:59:45.12ID:ZQpbH517
golang でWeb開発してる人にお聞きしたいんですけど
db周りってどうしてますか?
tableごとに構造体を用意した場合、単純に1tableをSELECTする分にはなんの問題もないんでしょうけど
joinしまくってた場合、各クエリごとに構造体を作ってる感じでしょうか?
そんなのだるいですよね。
どうしてるのか教えて下さい。
0614デフォルトの名無しさん
垢版 |
2016/07/22(金) 13:59:08.89ID:f6dSUOKk
pokemon Go Go
0616デフォルトの名無しさん
垢版 |
2016/07/23(土) 14:35:34.70ID:6lYjBmg5
Ninjin Go
0619デフォルトの名無しさん
垢版 |
2016/07/25(月) 09:19:11.89ID:l5ht4z0Z
selectするカラムのサイズのインターフェース型の配列を作って渡すじゃだめなの?
0620デフォルトの名無しさん
垢版 |
2016/07/25(月) 10:20:31.42ID:RKFFw9Lx
コードをチェックするときに
gofmtとgolintを設定したんですが両方共エラーがあった時に同じエラーを吐きます
どっちか一つでチェックさせれば良いんでしょうか?
0624デフォルトの名無しさん
垢版 |
2016/08/03(水) 12:29:51.75ID:48QXmcl+
この言語についてすこし気になっています。
例えばC言語のようにビット単位での操作などはできますか?
言い換えると、組み込みやOSカーネルのプログラミングなどは視野にあるのでしょうか?
またはC言語を完全に置き換える存在になりえますか?
0625デフォルトの名無しさん
垢版 |
2016/08/03(水) 13:17:02.98ID:mbys/AN5
goよりgithubの方が長生きするんでね
0626デフォルトの名無しさん
垢版 |
2016/08/03(水) 13:18:36.00ID:mbys/AN5
>>624
Windows用のDLLがc-sharedで作れるようになればなー
0628デフォルトの名無しさん
垢版 |
2016/08/04(木) 01:10:59.73ID:BIHJkeI+
GC前提っていうけど、objective-cやswiftみたいにARCでリソース解放してやることはできないのかな?
0629デフォルトの名無しさん
垢版 |
2016/08/04(木) 11:14:28.20ID:Ul5WpRfd
>>628
GCを切るというオプションはないと思う
そういう小回りを聞かせたいならrustとかC++を選ぶしかない。
0630デフォルトの名無しさん
垢版 |
2016/08/04(木) 11:56:34.90ID:8anV95gh
gokiburi
0631デフォルトの名無しさん
垢版 |
2016/08/04(木) 11:58:01.10ID:8anV95gh
OSだってそれ自身でGCやってるしなー
作業中にいきなり固まってHDDゴロゴロ言わせて
時計も止まってマウスも動かない
30分くらい放置してたら治ったり
0632デフォルトの名無しさん
垢版 |
2016/08/04(木) 12:59:03.09ID:SddwJFqD
GCはオプションではないようですね。
もうすこし調査が必要なようです。
ありがとうございました。
0635デフォルトの名無しさん
垢版 |
2016/08/05(金) 11:02:44.30ID:h08emFzO
>>633
メモリが足りなくなった時にキャッシュを解放して、コンパクションを走らせてるという動きは似たようなもの、と
言いたかったんじゃね?
0636デフォルトの名無しさん
垢版 |
2016/08/05(金) 13:39:10.50ID:r9Q5JMfz
ちょっとだけスレ違いかもだけど
kindle unlimitedとかいう電子書籍読み放題プラン始まって
技術書みてたらgoの入門書1.6対応版みつけた。
ttps://www.amazon.co.jp/dp/B01FH3KRTI/ref=cm_sw_r_tw_dp_x_TwbPxbN1BHQKM

結構読みやすい。
0637デフォルトの名無しさん
垢版 |
2016/08/06(土) 00:06:34.76ID:ukQkptRq
IT関連は今のところ、ほぼその本出してる翔泳社だけかな?
アメリカの方探してみたけど、そっちはどこも参加してない気がする。
0638620
垢版 |
2016/08/06(土) 17:15:53.39ID:TNYUaRVo
どなたかおねがいします
0640デフォルトの名無しさん
垢版 |
2016/08/24(水) 21:36:46.93ID:JcWOBO6t
loopのネストが多いと、go1.7で遅くなるらしい
SSAの関係で。

ttp://shinpei.github.io/blog/2016/08/13/what-ssa-brings-to-go-17/

俺のプログラムも遅くなった。。。orz
0641デフォルトの名無しさん
垢版 |
2016/09/18(日) 18:26:45.57ID:5S/llOjA
Goの型システムが貧弱とかよくdisられるけど
ジェネリクスが無い以外はわりとイマドキな言語だと思う
interfaceは構造的部分型付けっぽいし
既存の型に別名付けて拡張出来るし
0644 ◆SEdFBOkLSw
垢版 |
2016/09/19(月) 01:20:18.20ID:uQftjblX
イマドキではないな。
既視感あふれる感じ。
レシーバで関数書いていけるのが1番気持ちいい。気が狂ってからのLispみたい。
チャンネルは凄く楽だし。

>>641
ジェネリクス、あったら良いなと思うけど、無くても、型名にいちいち名前つけて、適当にインターフェイスに参加させていけば、割としっくりくるスライスになるよ。
0646デフォルトの名無しさん
垢版 |
2016/09/19(月) 16:25:57.74ID:UScDXP8E
もちろん調べました。
revelとbeegoですね。
ただこれは重いらしいので、あと使用雑感とか日本人の意見を聞きたいのですが。
0647デフォルトの名無しさん
垢版 |
2016/09/19(月) 18:10:05.55ID:7Lx9kgsv
>>644
一応ジェネリクスは検討中ではあるんだよね。
結構あったらいいのにという場面はある。
それ以外は割といい感じ。エコシステムがいい。Editorも今や静的言語のメリットちゃんと享受できるし。
VSCいい。
0649デフォルトの名無しさん
垢版 |
2016/09/19(月) 20:43:34.00ID:UScDXP8E
あ、このスレたってから3年もたってるんですね
サボって使用雑感なんて期待しちゃいけない感じか
しょうがないから自分で検証してみます
0650デフォルトの名無しさん
垢版 |
2016/09/19(月) 23:21:43.10ID:7Lx9kgsv
>>649
ここには大した有識者はいないと思う。
かと言ってどこにいるんだろうね?twitterに投げてみるとか
0651デフォルトの名無しさん
垢版 |
2016/09/20(火) 00:29:26.51ID:dodRqZqD
サービスやってるとこので聞くのは、LL言語のフルスタックフレームワークから、SPAと軽量なapiサーバーへの移行みたいなのが多いイメージが。
なのでrubyからだと、sinatraっぽくmiddleware分離したいとか、migrationツールは別に用意みたいな話の方が多いかも。

http://blog.parse.com/learn/how-we-moved-our-api-from-ruby-to-go-and-saved-our-sanity/
https://www.slideshare.net/yujiotani16/gorevel-51949206
https://developers.eure.jp/go-language/advent-calender-7/
0654デフォルトの名無しさん
垢版 |
2016/09/21(水) 12:36:40.08ID:bQEJ8r3q
重いかどうかが問題になるレベルまで試すのは現実的に無理があるだろ
まあそもそもほとんどのアプリは使っている言語やフレームワークが重いかどうかが問題になる前に消えるわけだが
0658デフォルトの名無しさん
垢版 |
2016/09/21(水) 16:03:39.59ID:1PEot0Hq
ID変えて自演してるような気もするけど
ベンチマーク取れば重いかどうか数字で表せるよね
0660デフォルトの名無しさん
垢版 |
2016/09/21(水) 18:46:11.33ID:K/wMuhbh
>>657
そのリストじゃRails風かどうかまではわからないからな
それを調べるためだけに1個ずつインストールしてまで使う労力を求めてる不親切なコミュニティだわ
まあそれが日本でのGoのあり方なんだろうが
0663デフォルトの名無しさん
垢版 |
2016/09/21(水) 23:06:50.01ID:C/0XZtBi
ActiveRecordのつくり込みしてない実装は意外と面倒だったりするんだけど、goで使ったことないのでわからん。
クエリービルダーなら何かあるかも。
複数テーブル使うこともないので、今のところDBまわりは簡単にDTOみたいな実装で済ましてる。
0664デフォルトの名無しさん
垢版 |
2016/09/22(木) 01:47:25.32ID:QBrMY9aw
自分が欲しい物を他力本願で自分で調べない奴はプログラミングに向いてない
0667デフォルトの名無しさん
垢版 |
2016/09/22(木) 10:18:25.14ID:7A/wc93b
railsみたいなのがいいならrails使っとけばいいだろ?
なんでgolang使おうと思ってるの?
0668デフォルトの名無しさん
垢版 |
2016/09/22(木) 11:10:54.24ID:y4xL8ywB
Goは基本的にCなので、ゼロから作りこむような複雑な処理がそのまま移植できる。
Rubyだと、extensionをCで書かないといけなくなる。
0669デフォルトの名無しさん
垢版 |
2016/09/22(木) 11:24:25.38ID:sBPmoePF
goでDB扱おうとすると動的言語のほうが楽だと痛感するけどね
単純なテーブルに対するcrudなら構造体作って対応できるけど
joinしたりとかすることも考慮するとそうも行かない。
素直にrailsでいいんじゃね
0670 ◆SEdFBOkLSw
垢版 |
2016/09/22(木) 13:36:58.94ID:3pIcfs21
ORM使うからじゃないの?
JOINして使う結果とJOINせず単独で使う結果はそれぞれ別の構造体になってしかるべきな気がする。
あんまRDB使わないけど。
集合検索結合集計なシステムと手続き型とオブジェクト型と関数型、どれ同士を組み合わせても、インピーダンスミスマッチは仕方ないんだから、どっちかで歩み寄らなきゃ何ともならんような。

階層型とばっかり組み合わせてるけど、言語側はわりと世代交代早いからDB側でストアド書いてるわ。
0673デフォルトの名無しさん
垢版 |
2016/09/22(木) 15:19:40.46ID:sug0rqOR
mvcではなくrails的なもので高速という話なら、goで探すよりphoenix framework/elixerみたいなのを先に触った方がいいのでは。
0675デフォルトの名無しさん
垢版 |
2016/09/22(木) 15:32:16.50ID:sBPmoePF
RDBからKVSに行ってやっぱRDBがいいやと言う流れじゃないの?
mongodbとか使ってるやついるのか今
0676デフォルトの名無しさん
垢版 |
2016/09/22(木) 21:41:56.84ID:sBPmoePF
>>670
結局ビジネスロジックをどっち側に寄せるかという話になるんだろうけど
ストアドプロシージャは素朴なコードしかかけないから抽象化しづらいと思うんだけど
書いたことがないから想像でしかないけど。

でもgolangの場合は抽象化しきれないからストアドプロシージャ側にロジックを寄せて実装はありなのかもしれない
0678デフォルトの名無しさん
垢版 |
2016/09/22(木) 22:24:25.35ID:7A/wc93b
phoenixも速いよ
pingだけだったらレスポンスμsで返ってくるよ
0680デフォルトの名無しさん
垢版 |
2016/09/23(金) 11:19:01.19ID:iqtk0HU6
>>679
多分だけどpureGoでkvs側もgo製のをつかってkvsも含めてワンバイナリにしたいってことなんじゃない?boltとか
0681デフォルトの名無しさん
垢版 |
2016/09/23(金) 14:15:45.15ID:Pu19XfH5
>>676
割と書けるよ。ただ、パワーバランスにもよるけど。
番号発行を伴う複数の関連するデータの保存や削除なんかはDBに任せた方が良い場合もそこそこある。
テキトーにORMで雑然と入れがちだけど、根本的にオブジェクトと行が一対一にならなければ、一対一の操作やらビューを用意すべきだと思う。
0685デフォルトの名無しさん
垢版 |
2016/10/04(火) 16:39:32.48ID:ZPmHgmj0
>L&RのKであり

冒頭からアホ丸出し
0686デフォルトの名無しさん
垢版 |
2016/11/02(水) 12:09:01.86ID:txovE4qH
Go言語のゆるキャラ何だよあれ。
ゆるキャラのデザインは言語の普及率に無関係じゃないと思うぜ。
■ このスレッドは過去ログ倉庫に格納されています

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