Go language part 1

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2013/10/10(木) 12:04:51.78
Goについて扱うスレッドです。
GoはGoogleによって開発された言語です。
2016/05/11(水) 22:35:30.19ID:024Ag8VN
http://golang.jp/pkg/exp-draw-x11
x serverあればどこでも動く
2016/05/12(木) 06:10:52.87ID:S2EnPjPz
>>550
WALKを使えばそれなりのものは作れるよ
2016/05/12(木) 15:55:56.59ID:wiVsZFfr
>> 550
Qt系の go-qml を使って普通に書いていますよ。
go-qml のインストールがすこし大変だけど
詳しい手順は以下の投稿したので参考にしてください。

https://groups.google.com/forum/#!topic/go-qml/S5Vho-XtQyo
2016/06/01(水) 11:32:56.19ID:sax7yxVA
Go言語先週から学習し始めたけど、何か変な言語だな
JavaScriptのようにいまいち不完全な言語に思えてしまう
突然意図しない挙動が発生したりで、なかなか基幹システムでは使いにくいのかな?
Javaのようなガッチリ感がない気がするので

でもシンプルさなど良い面もあるけれど
2016/06/01(水) 15:06:00.18ID:559HNr1m
誰もGo言語を基幹システム作るのに使おうとは思わんよ
銀の弾丸がないことを理解していない人間が評価という行為をするのは難しい
2016/06/01(水) 15:43:26.33ID:c7aWQBRE
銀の玉ってマ板でよく目にするけど元ネタ何なん
2016/06/01(水) 15:46:05.83ID:kIamMPov
人月の神話
2016/06/01(水) 16:05:38.28ID:c7aWQBRE
マジレスついた
ありがとう
2016/06/01(水) 18:48:22.39ID:2G+PcsXp
>>555
残念ながら、世界中の国家の機関になりそうなシステムをGoで書いてるんだな、今
2016/06/01(水) 19:23:38.40ID:559HNr1m
多分、基幹システムの認識がずれている
2016/06/01(水) 19:24:47.53ID:+8tVRjk4
どうでもいいが 555 と 559HNr1m で 5 が 5個入ってるな
2016/06/01(水) 19:26:34.98ID:559HNr1m
555をファイズと読んでしまった俺の認識も多分間違っている
2016/06/01(水) 20:15:06.92ID:0Dfr5L+i
国家の機関になりそうなシステムってものすごいフレーズだな
2016/06/01(水) 22:56:48.57ID:tjGnKxey
LLやってる人からすると、バイナリをgdb使ってデバッグするのは教えてもらわないとなかなか難しいかも。
phpやrubyやってても普段からIDEでデバッガ使ってればそんなに違いはないんだけどね。
2016/06/02(木) 00:19:36.30ID:M2BPbwci
既出かもだけど、俺コレには震えた

http://qiita.com/mattn/items/b7889e3c036b408ae8bd
2016/06/02(木) 04:24:28.34ID:cXOBdHTr
>>554
その意図しない挙動という部分を具体的に出してもらいたい。
大概そういうのは言語のせいじゃなくて自分のせい。というのを
長い年月で繰り返して学習するもんだけども
2016/06/02(木) 09:51:15.12ID:KfXFMNM2
>>566
そういうことも考えずに書いてるから突っ込まれてんじゃないの?
2016/06/02(木) 10:03:29.88ID:sFcAoyCt
func later() func(string) string {
...
return func(g string) string {
...
}
}
ごめん、このクロージャの最初の部分のlater() func(string) stringってどういう意味?
関数名がlater 戻り値がstringは分かるけど、func(string)がなんでこんな場所に書かれてるのかな、と
2016/06/02(木) 10:16:38.46ID:mKtftCeF
laterの返り値がstringを引数にとってstringを返り値とする関数という意味では?
2016/06/02(木) 12:02:45.10ID:sFcAoyCt
う〜ん、難しい...
2016/06/02(木) 13:52:28.11ID:cXOBdHTr
>>570
cの宣言構文より見やすいはずなんだけどね

http://qiita.com/m0a/items/2b03b189d746ae231756
この辺読むとか
2016/06/02(木) 15:52:21.01ID:sFcAoyCt
>>569
あぁ、なるほど
ようやく今理解した

func later() [func(string) string] {
[]は見やすいようにわざと書いたけど、こういう事だね

関数laterは引数は取らずに、
返り値として「stringを引数に取り、stringを返り値として返す」
2016/06/02(木) 16:09:51.23ID:sFcAoyCt
あれ、ちょっと待って

https://ideone.com/i9EfQl

later()は引数取らないけれど、
f := later()
f("apple")
どっからstoreに"apple"なんか文字列引数が渡されてるの?
こういう型の場合、ローカル変数(ここではstore)にコンストラクタのような働きが起って自動的に引数がセットされるって事?
2016/06/02(木) 16:14:42.71ID:sFcAoyCt
連投ごめん
f := late()
によって、fはlater()の返り値の関数を取得してるんだね
だから、f("apple")には上の無名関数func(string) stringが呼び出されて"apple"が引数とされているってことか
ごめん、分かった
2016/06/03(金) 17:56:32.51ID:BR7tIPAt
http://mattn.kaoriya.net/software/lang/go/20131112132831.htm

これの最初のコードの最後の部分、
<-workerquit
は何をしてるの?

特に変数に代入することもないし

func (g *G) ClearMsg() {
for len(g.task) > 0 {
<- g.task
}
}
も同じ事してるけど
チャネルを開放してるのかな、とも思ったけど、明示的にcloseしなくていいのかな、と
またはnilや空文字などにするとか
2016/06/03(金) 19:00:57.59ID:qwZkBXwi
終了待ちじゃない?
http://ashitani.jp/golangtips/tips_goroutine.html#
2016/06/04(土) 20:36:19.02ID:OVOooqIv
windows版のbuildmodeはexeしかできないの?
もしできるならスクリプト言語のrequireみたいに動的な読み込みとかできる?
さらにもしできたとしてunload的な名前空間の削除は?
2016/06/06(月) 11:35:10.38ID:4GD0zoa3
>>576
遅くなったけど返答ありがと

そうなんだ
終了待ちとかあるんだ
普通にやることなければその場でkillのように終了させたほうがいい気もするけど、Goは一気にまとめて終了させるってことなのかな?
2016/06/06(月) 13:30:02.95ID:u3gzbyWM
>>578
終了待ちのところをコメントアウトして実行してみると分かると思うけど、終了待ちしないとgoroutineを回し切る前にmainが先に終わってしまう
2016/06/07(火) 20:01:20.35ID:UCJwx0XG
>>579
ありがとう
2016/06/08(水) 00:14:44.49ID:sUO1i6Sl
https://ideone.com/SqM9XQ
インターフェースを実装して利用しようとしたんだけど、ShowMessage()が動かなくて
どこをどう変えればいい?
582581
垢版 |
2016/06/08(水) 00:28:26.77ID:sUO1i6Sl
あぁ、ごめん
fmt.Println(mes.ShowMessage())にすればいいんだね
2016/06/08(水) 12:03:24.49ID:E58O1JXH
https://ideone.com/ZPQ1ib

SetProfile()にて、構造体Profileのフィールド値を動的に変えたいんだけど、
どのように書き換えればいい?
2016/06/08(水) 13:40:28.97ID:6nwZJnu3
you 変数は必要ないんじゃ?

//you := make(map[string]string)

//you["Your_name"] = scanner.Text()
me.Your_name = scanner.Text()

//you["Your_gender"] = scanner.Text()
me.Your_gender = scanner.Text()

//me.SetProfile(you)
2016/06/08(水) 14:51:56.44ID:E58O1JXH
>>584
ほんとだ、ありがと
俺バカだなぁ

しかし、もし上記のような場合って処理できるのかな?
for k, v := range arr {
switch k{
case
2016/06/08(水) 15:28:46.54ID:E58O1JXH
switch k{ case 'Your_name': p.Your_name = v; } } のような処理は考えうるけど、
Pythonでいうsetattr(self, k, v)のようなこと出来ないのかなと思ったり
2016/06/08(水) 16:47:30.19ID:6nwZJnu3
んー、reflection を使えば良いんじゃないかな

func (p *Profile) SetProfile(arr map[string]string) {
for k, v := range arr {
key := reflect.ValueOf(p).Elem().FieldByName(k)
if key.IsValid() {
key.SetString(v)
}
}
}
2016/06/10(金) 11:21:56.11ID:+PET1099
>>587
ありがとう
上手く動作しました
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
2016/06/10(金) 11:50:51.12ID:DB1UcVrL
return *Human{



return &Human{

にする
2016/06/10(金) 12:35:52.40ID:xyNxE4XD
go playground使おうぜ実行できるし

https://play.golang.org/p/8pEGG3kdhH
2016/06/10(金) 22:32:36.41ID:+PET1099
>>590
ありがとう
2016/06/11(土) 01:51:48.80ID:vokBGi10
>>587
https://ideone.com/rGIVZU
このような場合は上手くいったけど、

https://ideone.com/86I4on
このように、構造体に2つの構造体が埋め込まれていて、それらに更に動的にメンバ変数に値を入れていくとなるとどうすればいいのか悩んでるんですが
コメントで★を入れた部分はどのように記述すれば良いのか全く分からず半日くらい費やしてます(苦笑)
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 }(),
}
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[
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()を呼び出さないと上手くいかないんですかね?
2016/06/11(土) 13:19:00.18ID:ncrPm/bC
色々書き換えたバージョン
http://ideone.com/5rnnHW
2016/06/11(土) 13:26:31.32ID:ncrPm/bC
>>596

m.SetProfile(arr['me'])

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

とは言うものの、SetProfile はメソッドではなく通常の関数でも良いのでは?
と思ったので http://ideone.com/5rnnHW ではそうしています。
2016/06/11(土) 13:44:39.08ID:5N4sydIU
>>598
なるほど、良く分かりました
別の方法も教えていただきありがとうございました
勉強になりました
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回コピー起こって無駄だから参照渡しにするってことでいいの?
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)って感じ?
2016/06/11(土) 23:01:07.51ID:oEY46iar
型キャストというより、ParseInt()だね、ごめん
2016/06/17(金) 15:30:55.46ID:De9+BeR4
出た。

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

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

ttps://golang.org/ref/spec#Address_operators
言語仕様上、&演算子が変数か構造体(のコンストラクタ)しか認めてない感じ?
実態の持ち主が行方不明になる可能性があってGCが動かなくなるのかねぇ
2016/07/17(日) 03:13:59.59ID:rRft+gba
ポケモンGOとコラボしてGopher出してもらおうぜ
このビッグウェーブ、乗るしかない
2016/07/17(日) 17:14:53.70ID:Nge5kW2D
Gopher君がswiftするのか
2016/07/18(月) 12:14:48.69ID:nr1pGxnF
Golangius II 〜Gopherの野望〜
2016/07/20(水) 00:44:12.39ID:7krjkQOF
1.6.3が出てた
2016/07/20(水) 21:59:45.12ID:ZQpbH517
golang でWeb開発してる人にお聞きしたいんですけど
db周りってどうしてますか?
tableごとに構造体を用意した場合、単純に1tableをSELECTする分にはなんの問題もないんでしょうけど
joinしまくってた場合、各クエリごとに構造体を作ってる感じでしょうか?
そんなのだるいですよね。
どうしてるのか教えて下さい。
2016/07/21(木) 18:53:09.50ID:Vj/xPVWN
mongoDB
2016/07/22(金) 08:29:35.69ID:eNFBzZ6U
golangとかgo言語をスレのタイトルにしないとググりづらいな。
614デフォルトの名無しさん
垢版 |
2016/07/22(金) 13:59:08.89ID:f6dSUOKk
pokemon Go Go
2016/07/22(金) 14:02:04.61ID:hQsD+JBa
Go の偽物出まくってるなω
616デフォルトの名無しさん
垢版 |
2016/07/23(土) 14:35:34.70ID:6lYjBmg5
Ninjin Go
2016/07/25(月) 01:34:14.20ID:gKUS+J/f
(´・ω・`)スキーマを作るツールで構造体を更新してる
2016/07/25(月) 09:12:05.48ID:aFElPnA5
それってxoのことです?
SELECTの時はどうしてます?join禁止?
619デフォルトの名無しさん
垢版 |
2016/07/25(月) 09:19:11.89ID:l5ht4z0Z
selectするカラムのサイズのインターフェース型の配列を作って渡すじゃだめなの?
2016/07/25(月) 10:20:31.42ID:RKFFw9Lx
コードをチェックするときに
gofmtとgolintを設定したんですが両方共エラーがあった時に同じエラーを吐きます
どっちか一つでチェックさせれば良いんでしょうか?
2016/07/26(火) 12:09:28.79ID:oKnTJYes
いいね
https://developers.eure.jp/tech/go-appengine-sql-waf/
2016/07/29(金) 12:02:23.83ID:eVXiLh5P
github死んだらgoどうなってしまうん?
2016/07/29(金) 16:21:55.80ID:vOn8ke2v
進化して gone になるよ
2016/08/03(水) 12:29:51.75ID:48QXmcl+
この言語についてすこし気になっています。
例えばC言語のようにビット単位での操作などはできますか?
言い換えると、組み込みやOSカーネルのプログラミングなどは視野にあるのでしょうか?
またはC言語を完全に置き換える存在になりえますか?
625デフォルトの名無しさん
垢版 |
2016/08/03(水) 13:17:02.98ID:mbys/AN5
goよりgithubの方が長生きするんでね
626デフォルトの名無しさん
垢版 |
2016/08/03(水) 13:18:36.00ID:mbys/AN5
>>624
Windows用のDLLがc-sharedで作れるようになればなー
2016/08/03(水) 23:48:20.25ID:MhEWRRuh
>>624
gc前提の言語だからあり得ない。
選ぶとしたらrustとかじゃないかな
2016/08/04(木) 01:10:59.73ID:BIHJkeI+
GC前提っていうけど、objective-cやswiftみたいにARCでリソース解放してやることはできないのかな?
2016/08/04(木) 11:14:28.20ID:Ul5WpRfd
>>628
GCを切るというオプションはないと思う
そういう小回りを聞かせたいならrustとかC++を選ぶしかない。
630デフォルトの名無しさん
垢版 |
2016/08/04(木) 11:56:34.90ID:8anV95gh
gokiburi
631デフォルトの名無しさん
垢版 |
2016/08/04(木) 11:58:01.10ID:8anV95gh
OSだってそれ自身でGCやってるしなー
作業中にいきなり固まってHDDゴロゴロ言わせて
時計も止まってマウスも動かない
30分くらい放置してたら治ったり
2016/08/04(木) 12:59:03.09ID:SddwJFqD
GCはオプションではないようですね。
もうすこし調査が必要なようです。
ありがとうございました。
2016/08/05(金) 10:46:10.99ID:DVDTMi5M
>>631 それスワッピングだろ
2016/08/05(金) 10:46:42.21ID:DVDTMi5M
swappingをカタカナで書いたらあぼーんされた
2016/08/05(金) 11:02:44.30ID:h08emFzO
>>633
メモリが足りなくなった時にキャッシュを解放して、コンパクションを走らせてるという動きは似たようなもの、と
言いたかったんじゃね?
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

結構読みやすい。
2016/08/06(土) 00:06:34.76ID:ukQkptRq
IT関連は今のところ、ほぼその本出してる翔泳社だけかな?
アメリカの方探してみたけど、そっちはどこも参加してない気がする。
638620
垢版 |
2016/08/06(土) 17:15:53.39ID:TNYUaRVo
どなたかおねがいします
2016/08/06(土) 22:25:22.14ID:i/Otvl/9
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
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
2016/09/18(日) 18:26:45.57ID:5S/llOjA
Goの型システムが貧弱とかよくdisられるけど
ジェネリクスが無い以外はわりとイマドキな言語だと思う
interfaceは構造的部分型付けっぽいし
既存の型に別名付けて拡張出来るし
2016/09/18(日) 21:51:09.47ID:FLMBUfED
まともなラムダ式もmap関数もない言語がイマドキ?
2016/09/18(日) 22:41:40.24ID:20H6rWEl
RoRライクなGoのWebFWで軽量なものはどれでしょうか?
2016/09/19(月) 01:20:18.20ID:uQftjblX
イマドキではないな。
既視感あふれる感じ。
レシーバで関数書いていけるのが1番気持ちいい。気が狂ってからのLispみたい。
チャンネルは凄く楽だし。

>>641
ジェネリクス、あったら良いなと思うけど、無くても、型名にいちいち名前つけて、適当にインターフェイスに参加させていけば、割としっくりくるスライスになるよ。
2016/09/19(月) 15:39:21.23ID:yKbgweKY
>>643
golang railsでググったら適当に出てくるけど調べたの?
2016/09/19(月) 16:25:57.74ID:UScDXP8E
もちろん調べました。
revelとbeegoですね。
ただこれは重いらしいので、あと使用雑感とか日本人の意見を聞きたいのですが。
2016/09/19(月) 18:10:05.55ID:7Lx9kgsv
>>644
一応ジェネリクスは検討中ではあるんだよね。
結構あったらいいのにという場面はある。
それ以外は割といい感じ。エコシステムがいい。Editorも今や静的言語のメリットちゃんと享受できるし。
VSCいい。
2016/09/19(月) 20:06:21.83ID:6UZeJb4L
>>646
自分で使ってみればいいんじゃない
2016/09/19(月) 20:43:34.00ID:UScDXP8E
あ、このスレたってから3年もたってるんですね
サボって使用雑感なんて期待しちゃいけない感じか
しょうがないから自分で検証してみます
2016/09/19(月) 23:21:43.10ID:7Lx9kgsv
>>649
ここには大した有識者はいないと思う。
かと言ってどこにいるんだろうね?twitterに投げてみるとか
■ このスレッドは過去ログ倉庫に格納されています