Go language part 3

■ このスレッドは過去ログ倉庫に格納されています
2019/10/17(木) 21:38:04.78ID:wMsZ+t6y
Goについて扱うスレッドです。
GoはGoogleによって開発された言語です。

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

日本語訳
http://golang.jp

※前スレ
Go language part 2
https://mevius.5ch.net/test/read.cgi/tech/1510395926/
2020/07/05(日) 18:06:42.96ID:3hRtzTvh
>>670
詳しく書くと、例えば
import "github.com/hoge/pkg/util"
したら、util に涛ってる全ての滑ヨ数が、呼び出bオしなくてもリャ塔Nされたりすb驕H
(更にはmainパッケージとか別のパッケージも)
2020/07/05(日) 18:07:40.70ID:3hRtzTvh
>>671
ありがとうございます
不意に心配になってしまいました
2020/07/05(日) 20:01:56.65ID:0gld4/HX
デカいプロジェクトの時のパッケージ構成ってどうしてる?dddはなんかやり過ぎ感あるし
2020/07/08(水) 22:34:33.70ID:tDYsCvpq
気付いてなかったけど、VScodeでgo.modのrequireにカーソル合わせたら、パッケージを最新バージョンにアップデートするかが出てきた
2020/07/12(日) 08:52:10.08ID:abSV8fb7
先週、golang.jp が復活した
2020/07/18(土) 10:23:07.73ID:9EMumvg2
>>655
if e, err := hoge(); err!=nil {
return e.method()
} else {
return err
}
と書きたいのに、外に出せとか
外に出すと今度はerrが定義されてないとか言うから、errをブロック外でvar定義しなきゃならん
頭悪いよなgolint
2020/07/18(土) 11:21:37.51ID:/ePLcmBm
えーと
2020/07/18(土) 11:25:06.59ID:6UJBCs7F
>>677
話は変わるけど err!=nil は err==nil なんじゃねーの
2020/07/18(土) 11:55:59.23ID:9EMumvg2
>>679
おおっと!
2020/07/18(土) 12:18:15.74ID:sbSUEl2y
e,err :=hoge()
if err !=nil{
return err
}
return e.method()

の方が自然じゃね
2020/07/18(土) 12:23:34.88ID:sbSUEl2y
return _,err

return e.method,nil

とかになるかもしれんが
683デフォルトの名無しさん
垢版 |
2020/08/02(日) 13:07:30.10ID:scrCUlqp
Go, Kotlin Swiftの文法対応表を作って欲しいぜ
2020/08/12(水) 09:26:40.73ID:PUqooE+h
Go 1.15 is released
https://blog.golang.org/go1.15
2020/08/13(木) 18:01:27.94ID:2DHzeARd
>>684
英語だから何書いてあるかわからないよ〜(;O;)
2020/08/13(木) 19:06:58.68ID:xsanodvm
>>685
google翻訳にぶっこめばいいだろ。
技術屋だったら英語の使い方は勉強しとき。
2020/08/13(木) 19:50:58.84ID:uooXk5Tm
今なら Deepl がオススメ
2020/08/25(火) 10:24:08.87ID:D0K2qmbJ
すんでで気がついて事なきを得たけど
参考にしたサンプルからコピーしたコードだったんで
context.Background() を、そのまま使ってた
マルチスレッドではWithCancelなどで別々に作ってやらなきゃなんないよな
2020/08/25(火) 14:37:27.29ID:QsZwrXdx
英語読めないって人って高卒?
受験で勉強すると思うのだが
2020/08/25(火) 23:26:52.17ID:Y7jc20E9
>>689
Golang Cafe — The Best Place To Find Your Next Golang Job
https://golang.cafe/about
https://twitter.com/golangcafe
https://www.youtube.com/channel/UCq4YrlwwXwF74Z3g-VDae2w/videos

「!gocafe remote」をDuckDuckGoで検索
https://twitter.com/5chan_nel (5ch newer account)
2020/08/31(月) 11:00:12.17ID:4ktuLIOK
ホストがMacなんだけど、dockerでgolang/Fyneを試してみたいんだけど無理かな?
なんかXエラーみたいな感じなの
2020/08/31(月) 13:01:38.43ID:rMwNX/5+
iOSはBSDベースなんだから余程アップルが魔改造してなきゃBSDと同様な程度にはサポートされてるだろ?
BSDでリリースされてるかどうか知らないんだが
2020/09/04(金) 13:17:23.06ID:y4RkOJ/U
まずgolangに関係のない話
chrome だけかもしれないけど XMLHttpRequest だと単純リクエストなのに CORS に引っ掛かってしまう

で、ここから本題
echo 使ってるんだけど、ハンドラ別に allow なオリジンを切り替えたいんだけど、やり方が分からなかった
orz
2020/09/06(日) 14:36:03.50ID:l3n8psbq
a := make([]int, 0)

makeの第一引数って何を渡してるの?
普通のプリミティブじゃないよね
2020/09/06(日) 15:27:49.33ID:FQOSALvE
長さだよ。2番目は容量な
2020/09/06(日) 15:50:34.25ID:iNxLllkp
[]intが第一引数で、0が第二引数じゃろ?
2020/09/06(日) 19:34:19.64ID:uoPkQvi9
言語仕様にスライス、マップ、チャネルの型って書いてあるじゃん
2020/09/06(日) 19:37:12.75ID:gKeBUEkF
その辺は最近のモダンな言語からしたらすげー泥臭い仕様だよな
2020/09/06(日) 20:33:01.20ID:gGwX7R3F
なんか全体的にそんなところがあるよな。べつに機能的に問題があるというわけじゃないんだが。
2020/09/06(日) 21:12:04.30ID:l3n8psbq
"[]int"だとstringだけど、ダブルクォーテーションなしだと何を渡してるんだろうと思って
2020/09/06(日) 21:17:56.45ID:uoPkQvi9
確かにもやっとしないでもないね
t := []string
とかで型の変数を作れる訳でもないのにポッと出てくる型指定
2020/09/06(日) 21:28:38.24ID:6MGWJWDR
引数に見えて引数ではない構文の一部
2020/09/06(日) 21:49:44.73ID:uoPkQvi9
makeは組み込み関数にカウントされてるから、むしろ型を変数として生成できないという縛りなんだな

滅多にmake関数使わないな
チャネルの容量を設定する時くらい
固定長配列なんて作らないし
2020/09/06(日) 21:53:27.07ID:uoPkQvi9
構文見てて思った

new関数なんてあったのか
使ったことある?
2020/09/07(月) 00:08:24.76ID:tKSaDgWF
makeが関数でrangeが式なの違和感あるんだよな
逆であるべきなのではと思ってしまう
2020/09/07(月) 00:52:09.45ID:ocp9ke30
その辺は一貫性より実用性を重視した結果だろう
2020/09/10(木) 17:49:37.70ID:iYKQgeEI
go: finding dmitri.shuralyov.com/gpu/mtl latest
go: downloading dmitri.shuralyov.com/gpu/mtl v0.0.0-20191203043605-d42048ed14fd
go: extracting dmitri.shuralyov.com/gpu/mtl v0.0.0-20191203043605-d42048ed14fd
build dmitri.shuralyov.com/gpu/mtl: cannot load dmitri.shuralyov.com/gpu/mtl: no Go source files

● 根本原因
dmitri.shuralyov.com が落ちてるんで GCP のビルドが通らない

● 状況
go.sum 見てみるとfirebaseが要求してるパッケージ
したがって firebase を使って GCP でサービスを提供しているすべてに影響するはず

こまるわー
2020/09/10(木) 17:52:24.85ID:iYKQgeEI
既存のパッケージがGOPATHにはあるはずなんだけど、どうしたらいい?
2020/09/10(木) 18:01:50.68ID:iYKQgeEI
firebaseにはissue上げたけど
2020/09/10(木) 18:56:30.40ID:iYKQgeEI
なんとなくGCPのビルドシステムの問題にも思えてきた
だってGOPATH(~/gopath/pkg)には一式存在してるもん
なんでダウンロード(というか最新版チェックしに行ってる?)できないからってビルドを失敗にすんのよ
2020/09/10(木) 19:25:21.92ID:iYKQgeEI
いや困ったね…

インポートを辿ったら
https://github.com/googleapis/google-cloud-go
が原因っぽい

個人ホストに依存しちゃうライブラリって、ビジネス的に極めて不味くないか?
2020/09/10(木) 19:46:17.35ID:QWaq+avL
個人ホスト?
2020/09/10(木) 20:19:53.75ID:iYKQgeEI
>>712
dmitri.shuralyov.com って個人じゃないのかな?
企業ってこともあるのか
2020/09/11(金) 00:38:28.29ID:u7dYfbNO
よかった復活した
そしてやはり個人持ちのホストの模様
ホストでしっくりこないならサーバー
Google Domainsでドメイン管理してるからGoogleCloud上にあるのかも
2020/09/11(金) 20:06:33.99ID:fDVUo6av
しかし個人のホストからimportするリスクやばいな
Goチームの人だから許されてるのか?
2020/09/11(金) 20:12:33.09ID:ICNKkV5S
GitHubかGoogleSourceRepositoryにホストすればいいのにな
2020/09/11(金) 20:20:51.53ID:ICNKkV5S
う、Google Source Repositoryって、もしかして
source.developers.google.com/p/プロジェクト/r/リポジトリ/...
ってパッケージ名になるのか?長
2020/09/29(火) 08:17:01.67ID:1HGJd50O
引数を値渡しするか、ポインタ渡しするか
それが問題だ

sliceは値渡しでも良いよね
要素を追加しようとすると結局新しいsliceが必要
ポインタのポインタとかやりたくないし
stringは普通は変化させる時は新しい物を作るから、値渡しで充分
空を表現するには空文字列で良いし

構造体はどうすべきか
全部ポインタ渡し?
2020/09/29(火) 08:42:58.32ID:ztORdlGy
>>718
基本的にポインタで渡すべきと思ってる
値を使うには細心の注意が必要になるから

速度的に有利とかいう話はあるけど
スライスなんかは内部にポインタ入ってるし、文字列だってポインタだから、メンバとしてそれらを持ってる構造体を値渡しするのもナンセンスじゃね?
それらのメンバにアクセスしたとたんにページフォルト起こる可能性があるから、速度面での優位は怪しくなるという意味でナンセンスだろうという
値渡しはスタックに積むだろう(それ以外に方法があるのか知らない)から、スタックを圧迫するはずという理屈も加味
2020/09/29(火) 09:38:24.05ID:rZRnYPTQ
>>719
いや、サイズが大きいのは基本的に可変長であるスライス、string、mapなのだから、それらだけは内部的にポインタを持って実質的に常にポインタ渡しとなるようにしておけば、常に値渡しでもパフォーマンス的にほぼ問題にならんだろうというのがGoの設計意図だよ
個人的には、同一の実体として振る舞うようなOOのインスタンスに近い性質の構造体はポインタ渡し、単なる値の寄せ集めは値渡しとして使い分ける
2020/09/29(火) 15:53:59.37ID:ztORdlGy
>>720
ググってみたら、goではスタック足りなくなると拡張すんのか……すげーな
2020/09/29(火) 16:39:20.25ID:aaxcyAZi
論理アドレス空間ははじめから確保してるんじゃないの?
だったら他の言語と変わらない気が
2020/09/29(火) 17:34:34.66ID:ztORdlGy
例えばjavaではStackOverflowErrorになるし、cだと検出すらされない(今は知らない
goでは関数呼び出し時にオーバーフローをチェックして拡張するらしく、初期値は4KBだとか
ほんまかいな?
2020/09/29(火) 17:41:44.13ID:ztORdlGy
考えてみれば何万とgoroutine作ってもびくともしないようにするには、それくらいやらなきゃダメだろうから納得すべきか
2020/09/29(火) 20:23:20.93ID:ztORdlGy
>>723
1.4までは8kB、今は2kB
1.4リリースノート
726デフォルトの名無しさん
垢版 |
2020/09/29(火) 23:23:58.36ID:UIxEJt2R
>>723
>cだと検出すらされない(今は知らない
今でもOS任せですよ。Windows だと例外としてキャッチできますが。
2020/09/30(水) 05:11:09.54ID:/dbaz1tV
Elixir は、10万の小プロセスが、並列で動く

結局、Rust, Elixir は、普及のキャズムを越えられなかったから、
Go の1強になってしまったけど
2020/09/30(水) 05:27:53.12ID:s3VbgSNe
かえすがえすも、名前がイケてないのが悔やまれる
もっとマシなネーミングをできなかったのか
2020/09/30(水) 12:14:35.40ID:/4YRR7IY
では、Gopher言語でよろしいか
2020/09/30(水) 12:40:46.26ID:NNWpaWfq
ごふぁっ、ゲホッがはっ、ゴホゴホッ
2020/09/30(水) 18:10:46.15ID:ktFuXCYv
正直goって流行っている感じじゃないんだよなぁ
めんどくさいし
2020/09/30(水) 19:21:27.15ID:baSuoz7K
むしろGoよりめんどくさくない言語の方が少ないだろ
2020/09/30(水) 20:05:41.54ID:HXdd4xfV
ゴリゴリ書かなきゃいけないという点で面倒くさいけどゴリゴリ書いてしまえるという点で面倒くさくない
2020/09/30(水) 20:17:57.84ID:pc2vUBN1
Pythonとかの思い付くまま適当に書いたらシンタックスシュガーでなんとなく動く、それを簡単だと言ってるんだと思う
2020/09/30(水) 20:32:41.83ID:pc2vUBN1
PHPとかの方面の人から見ると、面倒で使えないと思うんだろう
node.jsやらと比べて数倍の性能を叩き出すWebAPIをちょちょいと書けてしまうから手放せない
Webアプリなんて、WebAPIとJavaScriptとHTMLがあればすむ話だからPHPとかやる奴こそ面倒なことやってんなーと思う
2020/09/30(水) 21:03:01.73ID:zBrjSaD6
>>735
ひと昔前はそれが普通だったからねえ
railsもphpもサーバーがHTMLを組み立てるという思想ありきで生まれたから仕方ない
今その役目は消えたからほぼ全てのフレームワークがオーバースペックになってしまった
2020/10/07(水) 08:43:42.09ID:9tAnRZjq
Pythonでマップのインデックスで {(a,b): c} とやってるのを見て、ちょっと羨ましく感じた
Goだとタプルは型じゃないもんな
738デフォルトの名無しさん
垢版 |
2020/10/09(金) 10:30:34.93ID:fFeZzUQc
エディタは何使ってる?
2020/10/09(金) 10:40:12.61ID:cZJOIaI8
VSCode
VSCodeのGoの拡張機能は結構クソだが、Goばかり書くわけじゃないのでGoに最適なエディタはどれかとか興味ない
740デフォルトの名無しさん
垢版 |
2020/10/09(金) 10:45:34.46ID:fFeZzUQc
>>739 ありがとう。使ってみる。
2020/10/09(金) 11:57:27.87ID:CFMMOtfU
>>740
他のエディタ使ってないからVScode特化の話なのかわからないけど

おかしい動きを見せたら、まずコマンドで Restart Language Server
2020/10/09(金) 12:01:58.43ID:CFMMOtfU
>>740
それでもダメな場合
Install/Update Tools
全部チェックして実行
743デフォルトの名無しさん
垢版 |
2020/10/09(金) 12:20:13.85ID:fFeZzUQc
VSCODE良いね。
Goプログラマーの仲間入りしました。
2020/10/13(火) 13:52:15.74ID:oLYkpKK8
>>740
lint使えばvscodeでも快適だぞ
依存しているパッケージも拾って来てくれるから
2020/10/13(火) 16:42:37.40ID:UHobSDno
Goは補完が大事だから他の環境はマジで貧弱すぎる
vim拡張とかこれでコード書いてる人いるのか?と感じた
746デフォルトの名無しさん
垢版 |
2020/10/13(火) 23:14:35.57ID:vh7uCC06
俺は補完は好きじゃなくて逆に鬱陶しく感じてしまう。
タイピングのリズムというか、今xxxという操作/入力しようとしたのに余計なことすんな と思うことしばしば。
2020/10/14(水) 07:23:06.90ID:kUBYMwHY
わかりみ
748デフォルトの名無しさん
垢版 |
2020/10/14(水) 10:18:40.21ID:GsUUoEHv
「(」打つと勝手に「)」も入るやつとか
おせっかいに「()」の真ん中にカーソル移動するやつとか
自分でタイプすると hoge()) みたいになってうざい
2020/10/14(水) 10:40:49.08ID:W+IeOFJe
設定変えろよ無能
750デフォルトの名無しさん
垢版 |
2020/10/14(水) 22:53:52.84ID:Eee7omWn
変えてるに決まってるだろ
2020/10/14(水) 22:57:57.74ID:RfMuLTxu
go.modに勝手にgo1.13みたいなものが入ります
やめてほしいですが誰に言えばいいですか?
2020/10/15(木) 00:02:00.61ID:jde/MWAn
>>751
ロブパイク
2020/10/15(木) 13:01:09.76ID:AQ4Pln/N
自分で指定すると思ったけど
もしかすると、参照するパッケージに引きずられる可能性があるのか?
パッケージがリンクするランタイムの中で最新になっちゃうとしたらどうしようもないかな
2020/10/15(木) 17:14:56.53ID:AQ4Pln/N
ツールアップデートしたら#41870にバッチリ引っ掛かってしまった
755デフォルトの名無しさん
垢版 |
2020/10/28(水) 09:08:16.05ID:pr+rUhRZ
俺はコンパイラが無様すぎると思うんだけど、どう思う?

https://play.golang.org/p/XRFmBiqhqJp

インタフェースAを返すメソッドを持つインタフェースB。

そのメソッド実装がインタフェースAを実装しているポインタを返しても、

./prog.go:34:4: cannot use &Base literal (type *Base) as type IBase in assignment:
*Base does not implement IBase (wrong type for Sub method)
have Sub() *Sub
want Sub() ISub

と、インタフェースAを返しているとは認められない。
2020/10/28(水) 10:08:54.99ID:yBdqeWro
天才のお前が新しい言語でも作ってくれよ
757デフォルトの名無しさん
垢版 |
2020/10/28(水) 11:33:48.41ID:Mf8tEr2f
C / C++ のプリプロセッサのマクロって
#define A(X, ...) X A(__VA_ARGS__)
みたいな再帰的な処理出来ないけど
この問題昔から指摘されてるのに
40年経っても1000年経っても解決されないよね
解決しようと思えば出来るのに C++ の拡張とかばっかりやってる
2020/10/28(水) 11:46:44.44ID:HlOHZvAz
>>757 そしてあなたも解決しようと思わないのでしょう?
2020/10/28(水) 11:52:07.24ID:9TmkPH0P
>>757
「型無しのマクロを使うな。template使え。」という方向だよ。
C++で今さらそんな拡張ありえん。
760デフォルトの名無しさん
垢版 |
2020/10/28(水) 12:47:58.74ID:Mf8tEr2f
>>758
解決しようとした人は *by や python や D を造ってしまいましたね
既存の C/C++ そのものに手を入れるのは中の人以外には無駄な努力に感じます
再帰マクロ専用の ぷりぷりプロセッサを書くのは手かも知れません
あと #include __FILE__ でループしてる人はいるようです
https://qiita.com/alucky0707/items/3599cdcf973382df978b
2020/10/28(水) 12:50:42.86ID:sJQyfcEU
スレ違いも甚だしい
2020/10/29(木) 21:05:36.10ID:K8k/YFeK
>>760
スレ違いだが通りすがりに言っておくと、
マクロにそこまでの機能を求めるのなら、
自前でスクリプト言語(AWK/Perl/Python/Ruby)等でソースの事前処理をmakefileに書いた方がいい。
それだと無限に機能拡張出来る。

だからC++というかmakefileシステムでそれをやる意味はない。
よってまともな奴は誰もマクロの拡張なんかしようとは思わない。
「言語」にそれを持たせる意味がないから。
(言語による垂直統合ではなく、makefileによる水平分業で全く問題ないし、融通も利く)

ただしGoはそれを標準機能で付けてる。
これがどう役に立っているのかは知らん。
(Go generate、AST木が参照出来るので上記のマクロ拡張とは次元が違うが)
2020/10/30(金) 00:29:21.26ID:Nsw5dj/j
makefieて
2020/10/30(金) 09:21:51.84ID:rRvEIPSO
知らないだけかも知れないけど、generate が build と分けられてるのが使いづらく感じる
go.mod に generate のパラメーター書いておくと build で実行するとかじゃダメなのかな
765デフォルトの名無しさん
垢版 |
2020/10/30(金) 10:57:17.98ID:7MkyV1Cp
Qt良いよね
2020/10/30(金) 11:07:56.86ID:SoGDmizs
そもそもプリプロセッサーが何をやっているか考えたら再帰なんかできない事ぐらい分かるやろ
もう相当前のものだしなぁ
逆にC#とかだとCで出来たような事が出来ないから不便だと思った事があるわ
2020/10/30(金) 22:12:31.86ID:k5fqQBZK
いまどきポインタとかwww
2020/10/31(土) 11:21:06.88ID:9I3xwucX
今時も何もgolangではポインタはバリ現役
というか、golang使ったことないんだな哀れ
2020/10/31(土) 15:42:09.93ID:rQ5gc14Z
ポインタが散々叩かれて色んな言語で無くしたけど
最近のモダンな言語では復活してきてるのは面白い
2020/10/31(土) 16:08:49.76ID:73vG42Ru
ぽ、ポインタじゃねえし!リファレンスだし!
2020/10/31(土) 16:39:03.74ID:o6XGTKTG
つーか名前をへんてこにして誤魔化すとかじゃなく
リアルにポインタの概念(何かのオブジェクトを指す変数)を消し去ろうとしたら
あらゆるものをコピーでもっといてしかもそれらを常に同期して同じ値になるように
常に維持する仕組みにするしかないがそんな非効率きわまりない言語が実用に値するはずがない
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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