Go language part 1
■ このスレッドは過去ログ倉庫に格納されています
Goについて扱うスレッドです。 GoはGoogleによって開発された言語です。 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 return *Human{ を return &Human{ にする >>587 https://ideone.com/rGIVZU このような場合は上手くいったけど、 https://ideone.com/86I4on このように、構造体に2つの構造体が埋め込まれていて、それらに更に動的にメンバ変数に値を入れていくとなるとどうすればいいのか悩んでるんですが コメントで★を入れた部分はどのように記述すれば良いのか全く分からず半日くらい費やしてます(苦笑) とりあえずは即時関数で。 return &Profile{ mine: func() (m MyProfile) { m.SetProfile(arr["me"]); return }(), yours: func() (y YourProfile) { y.SetProfile(arr["you"]); return }(), } >>594 ありがと 本当に助かりました 自分には浮かばない発想でした しかし、一つ聞きたいのは、 func NewProfile(arr map[string]map[string]interface{}) *Profile { var m MyProfile var u YourProfile return &Profile{ mine: m.SetProfile(arr[ >>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()を呼び出さないと上手くいかないんですかね? >>596 m.SetProfile(arr['me']) この場合、副作用だけ(オブジェクトに値がセットされるだけ)なので、 return m とする(オブジェクトを返す)必要があるのです。 とは言うものの、SetProfile はメソッドではなく通常の関数でも良いのでは? と思ったので http://ideone.com/5rnnHW ではそうしています。 >>598 なるほど、良く分かりました 別の方法も教えていただきありがとうございました 勉強になりました >>590 func NewHuman(name string, jobname string, position string) Human { return Human{ 〜 としても動くけど、これだと値渡しになって h1 := NewHuman("Shinzou Abe", "politician", "prime minister") 呼んだときにも 中で1回コピー起こって無駄だから参照渡しにするってことでいいの? Javaで言う、ScannerのNextInt()みたいなのってGoには無いの? bufioのText()しか調べても出てこないんだけど、これを型キャストしろってことなのかな? scanner := bufio.NewScanner(os.Stdin) scanner.Scan() n := scanner.Text() これをn.(int)って感じ? 型キャストというより、ParseInt()だね、ごめん 出た。 プログラミング言語Go Alan A.A. Donovan, Brian W. Kernighan 著 柴田芳樹 訳 発行元:丸善出版(株) var t *time.Time = & time.Now() とやると cannot take the address of time.Now() って出るんですけどなんでダメなのか教えて下さい t := & time.Time{} や ts := time.Now() t := &ts みたいにアドレスで変数に保管したいってことだろ ttps://golang.org/ref/spec#Address_operators 言語仕様上、&演算子が変数か構造体(のコンストラクタ)しか認めてない感じ? 実態の持ち主が行方不明になる可能性があってGCが動かなくなるのかねぇ ポケモンGOとコラボしてGopher出してもらおうぜ このビッグウェーブ、乗るしかない golang でWeb開発してる人にお聞きしたいんですけど db周りってどうしてますか? tableごとに構造体を用意した場合、単純に1tableをSELECTする分にはなんの問題もないんでしょうけど joinしまくってた場合、各クエリごとに構造体を作ってる感じでしょうか? そんなのだるいですよね。 どうしてるのか教えて下さい。 golangとかgo言語をスレのタイトルにしないとググりづらいな。 (´・ω・`)スキーマを作るツールで構造体を更新してる それってxoのことです? SELECTの時はどうしてます?join禁止? selectするカラムのサイズのインターフェース型の配列を作って渡すじゃだめなの? コードをチェックするときに gofmtとgolintを設定したんですが両方共エラーがあった時に同じエラーを吐きます どっちか一つでチェックさせれば良いんでしょうか? この言語についてすこし気になっています。 例えばC言語のようにビット単位での操作などはできますか? 言い換えると、組み込みやOSカーネルのプログラミングなどは視野にあるのでしょうか? またはC言語を完全に置き換える存在になりえますか? >>624 Windows用のDLLがc-sharedで作れるようになればなー >>624 gc前提の言語だからあり得ない。 選ぶとしたらrustとかじゃないかな GC前提っていうけど、objective-cやswiftみたいにARCでリソース解放してやることはできないのかな? >>628 GCを切るというオプションはないと思う そういう小回りを聞かせたいならrustとかC++を選ぶしかない。 OSだってそれ自身でGCやってるしなー 作業中にいきなり固まってHDDゴロゴロ言わせて 時計も止まってマウスも動かない 30分くらい放置してたら治ったり GCはオプションではないようですね。 もうすこし調査が必要なようです。 ありがとうございました。 swappingをカタカナで書いたらあぼーんされた >>633 メモリが足りなくなった時にキャッシュを解放して、コンパクションを走らせてるという動きは似たようなもの、と 言いたかったんじゃね? ちょっとだけスレ違いかもだけど kindle unlimitedとかいう電子書籍読み放題プラン始まって 技術書みてたらgoの入門書1.6対応版みつけた。 ttps://www.amazon.co.jp/dp/B01FH3KRTI/ref=cm_sw_r_tw_dp_x_TwbPxbN1BHQKM 結構読みやすい。 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 loopのネストが多いと、go1.7で遅くなるらしい SSAの関係で。 ttp://shinpei.github.io/blog/2016/08/13/what-ssa-brings-to-go-17/ 俺のプログラムも遅くなった。。。orz Goの型システムが貧弱とかよくdisられるけど ジェネリクスが無い以外はわりとイマドキな言語だと思う interfaceは構造的部分型付けっぽいし 既存の型に別名付けて拡張出来るし まともなラムダ式もmap関数もない言語がイマドキ? RoRライクなGoのWebFWで軽量なものはどれでしょうか? イマドキではないな。 既視感あふれる感じ。 レシーバで関数書いていけるのが1番気持ちいい。気が狂ってからのLispみたい。 チャンネルは凄く楽だし。 >>641 ジェネリクス、あったら良いなと思うけど、無くても、型名にいちいち名前つけて、適当にインターフェイスに参加させていけば、割としっくりくるスライスになるよ。 >>643 golang railsでググったら適当に出てくるけど調べたの? もちろん調べました。 revelとbeegoですね。 ただこれは重いらしいので、あと使用雑感とか日本人の意見を聞きたいのですが。 >>644 一応ジェネリクスは検討中ではあるんだよね。 結構あったらいいのにという場面はある。 それ以外は割といい感じ。エコシステムがいい。Editorも今や静的言語のメリットちゃんと享受できるし。 VSCいい。 あ、このスレたってから3年もたってるんですね サボって使用雑感なんて期待しちゃいけない感じか しょうがないから自分で検証してみます >>649 ここには大した有識者はいないと思う。 かと言ってどこにいるんだろうね?twitterに投げてみるとか 重いかどうかが問題になるレベルまで試すのは現実的に無理があるだろ まあそもそもほとんどのアプリは使っている言語やフレームワークが重いかどうかが問題になる前に消えるわけだが どうせPとかRがつく言語からの乗り換えでしょ? どれ使っても軽いって >何で自分で試さないの? 比較対象がわからないからだろ >>656 比較対象が何かわからないなら awesome go とかで検索すればいいよ。 https://github.com/avelino/awesome-go#web-frameworks アホみたいにフレームワークがあるけど ID変えて自演してるような気もするけど ベンチマーク取れば重いかどうか数字で表せるよね >>657 そのリストじゃRails風かどうかまではわからないからな それを調べるためだけに1個ずつインストールしてまで使う労力を求めてる不親切なコミュニティだわ まあそれが日本でのGoのあり方なんだろうが >>660 readmeくらい読めばいいよ。 なにを参考にしたフレームワークくらいかはわかるでしょ ActiveRecordのつくり込みしてない実装は意外と面倒だったりするんだけど、goで使ったことないのでわからん。 クエリービルダーなら何かあるかも。 複数テーブル使うこともないので、今のところDBまわりは簡単にDTOみたいな実装で済ましてる。 自分が欲しい物を他力本願で自分で調べない奴はプログラミングに向いてない railsみたいなのがいいならrails使っとけばいいだろ? なんでgolang使おうと思ってるの? Goは基本的にCなので、ゼロから作りこむような複雑な処理がそのまま移植できる。 Rubyだと、extensionをCで書かないといけなくなる。 goでDB扱おうとすると動的言語のほうが楽だと痛感するけどね 単純なテーブルに対するcrudなら構造体作って対応できるけど joinしたりとかすることも考慮するとそうも行かない。 素直にrailsでいいんじゃね ORM使うからじゃないの? JOINして使う結果とJOINせず単独で使う結果はそれぞれ別の構造体になってしかるべきな気がする。 あんまRDB使わないけど。 集合検索結合集計なシステムと手続き型とオブジェクト型と関数型、どれ同士を組み合わせても、インピーダンスミスマッチは仕方ないんだから、どっちかで歩み寄らなきゃ何ともならんような。 階層型とばっかり組み合わせてるけど、言語側はわりと世代交代早いからDB側でストアド書いてるわ。 mvcではなくrails的なもので高速という話なら、goで探すよりphoenix framework/elixerみたいなのを先に触った方がいいのでは。 検索系ならRDB一択やろKVSでも実装はできるけどめんどくさすぎ RDBからKVSに行ってやっぱRDBがいいやと言う流れじゃないの? mongodbとか使ってるやついるのか今 >>670 結局ビジネスロジックをどっち側に寄せるかという話になるんだろうけど ストアドプロシージャは素朴なコードしかかけないから抽象化しづらいと思うんだけど 書いたことがないから想像でしかないけど。 でもgolangの場合は抽象化しきれないからストアドプロシージャ側にロジックを寄せて実装はありなのかもしれない クロスコンパイルとかでpure goにしたければ、KVSしかない。 phoenixも速いよ pingだけだったらレスポンスμsで返ってくるよ >>677 イミフ Pure Goなdatabase/sqlのドライバは沢山あるがな >>679 多分だけどpureGoでkvs側もgo製のをつかってkvsも含めてワンバイナリにしたいってことなんじゃない?boltとか >>676 割と書けるよ。ただ、パワーバランスにもよるけど。 番号発行を伴う複数の関連するデータの保存や削除なんかはDBに任せた方が良い場合もそこそこある。 テキトーにORMで雑然と入れがちだけど、根本的にオブジェクトと行が一対一にならなければ、一対一の操作やらビューを用意すべきだと思う。 慣れてるしmongodb使ってるよ sqliteのほうがよく使ってるけど Go言語のゆるキャラ何だよあれ。 ゆるキャラのデザインは言語の普及率に無関係じゃないと思うぜ。 俺もあのキャラで食わず嫌いしてた 今でも見るたびにぶん殴りたくなる ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる