タグ付けされた質問 「go」

Goはオープンソースのプログラミング言語です。それは静的に型付けされており、Cから緩やかに派生した構文で、自動メモリ管理、タイプセーフティ、いくつかの動的型付け機能、可変長配列(スライスと呼ばれる)やキー値マップなどの追加の組み込み型、および大規模な標準ライブラリ。

5
Go HTTPハンドラーで、ResponseWriterが値であるのに、Requestがポインターであるのはなぜですか?
私はGAE用のアプリを書くことでGoを学んでいます。これは、ハンドラー関数のシグネチャです。 func handle(w http.ResponseWriter, r *http.Request) {} 私はここではポインタ初心者ですが、なぜRequestオブジェクトはポインタなのResponseWriterですか?このようにする必要はありますか、それともある種の高度なポインタベースのコードを可能にするためだけですか?
84 pointers  go 

5
Goオブジェクトのポインタ値を出力するにはどうすればよいですか?ポインタ値はどういう意味ですか?
私はGoで遊んでいるだけで、構造体が値または参照によって渡されるときの優れたメンタルモデルをまだ持っていません。 これは非常にばかげた質問かもしれませんが、少し実験して、同じオブジェクトで作業しているのか、それともコピーを作成したのか(値で渡したのか)を確認したいと思います。 オブジェクトのポインター(またはポインター値がgcによって変更された場合は内部ID)を出力する方法はありますか? package main import ( "runtime" ) type Something struct { number int queue chan int } func gotest( s *Something, done chan bool ) { println( "from gotest:") println( &s ) for num := range s.queue { println( num ) s.number = num } done <- true …
83 go 

7
Go言語の代入演算子
最近、私はグーグルの新しいプログラミング言語Goで遊んでいました 代入演算子の:=前に等号がコロンがあるのはなぜだろうと思ってい= た言語の作者がname := "John"代わりに使用したいと思った特別な理由はありますかname = "John"
83 syntax  go 

4
Golangで文字列からfloat64に型変換してJSONをデコードする方法は?
次のような浮動小数点数でJSON文字列をデコードする必要があります。 {"name":"Galaxy Nexus", "price":"3460.00"} 以下のGolangコードを使用します。 package main import ( "encoding/json" "fmt" ) type Product struct { Name string Price float64 } func main() { s := `{"name":"Galaxy Nexus", "price":"3460.00"}` var pro Product err := json.Unmarshal([]byte(s), &pro) if err == nil { fmt.Printf("%+v\n", pro) } else { fmt.Println(err) fmt.Printf("%+v\n", pro) } …
83 json  go 

2
GoでPOSTリクエストを送信するにはどうすればよいですか?
POSTリクエストを作成しようとしていますが、実行できません。反対側では何も受信されません。 これはどのように機能することになっていますか?PostForm機能は知っていますがhttputil、テストできないので使えないと思いますよね? hc := http.Client{} req, err := http.NewRequest("POST", APIURL, nil) form := url.Values{} form.Add("ln", c.ln) form.Add("ip", c.ip) form.Add("ua", c.ua) req.PostForm = form req.Header.Add("Content-Type", "application/x-www-form-urlencoded") glog.Info("form was %v", form) resp, err := hc.Do(req)
83 go 

3
gogetとgoinstallの違いは何ですか?
goツールでしばらく遊んだ後、それは次のようになりますgo get: (オプションで)ダウンロード、 コンパイル、 とインストール go install単純にソフトウェアの一部 コンパイルします とインストール それ。この場合、go installコマンドがgo get優先されるのに、なぜコマンドが存在するのですか?
83 go 

4
ゴルーチンからの戻り値のキャッチ
以下のコードは、「予期しない実行」というコンパイルエラーを示します。 x := go doSomething(arg) func doSomething(arg int) int{ ... return my_int_value } goroutineを使用せずに、関数を正常に呼び出すと、戻り値をフェッチできることはわかっています。または、チャンネルなどを使用できます。 私の質問は、なぜこのような戻り値をゴルーチンからフェッチできないのかということです。

1
Goがアセンブリをリンクしていません:未定義の外部関数
私は主に学習目的でいくつかのSIMDを書こうとしています。Goがアセンブリをリンクできることは知っていますが、正しく機能させることができません。 これが私が作ることができる最も最小限の例です(要素ごとのベクトル乗算): vec_amd64.s(注:実際のファイルには、RETエラーが発生するため、下に空白行があります) // func mul(v1, v2 Vec4) Vec4 TEXT .mul(SB),4,$0-48 MOVUPS v1+0(FP), X0 MOVUPS v2+16(FP), X1 MULPS X1, X0 // also tried ret+32 since I've seen some places do that MOVUPS X0, toReturn+32(FP) RET vec.go package simd type Vec4 [4]float32 func (v1 Vec4) Mul(v2 Vec4) Vec4 { return Vec4{v1[0] …
82 assembly  go 

12
コンパイルされたファイルサイズを減らす方法は?
cを比較してみましょう:Hello_world.c: #include<stdio.h> int main(){ printf("Hello world!"); } Hello_world.go: package main import "fmt" func main(){ fmt.Printf("Hello world!") } 両方をコンパイルします。 $gcc Hello_world.c -o Hello_c $8g Hello_world.go -o Hello_go.8 $8l Hello_go.8 -o Hello_go で、それ何? $ls -ls ... 5,4K 2010-10-05 11:09 Hello_c ... 991K 2010-10-05 11:17 Hello_go 約1MbHelloworld。私をからかってるの?私は何が間違っていますか? (Hello_goを削除-> 893Kのみ)
82 go 

7
Goでリストがあまり使用されないのはなぜですか?
私はGoを初めて使用し、非常に興奮しています。しかし、私が広範囲に使用したすべての言語(Delphi、C#、C ++、Python)では、リストは配列ではなく動的にサイズ変更できるため、非常に重要です。 Golangには確かにlist.List構造体がありますが、それに関するドキュメントはほとんどありません-Go By Exampleでも、私が持っている3冊のGoブック(Summerfield、Chisnal、Balbaert)でも、それらはすべて配列とスライスに多くの時間を費やしています。次に、マップにスキップします。ソースのコード例では、list.List。もほとんどまたはまったく使用されていません。 また、PythonとRangeは異なり、Listではサポートされていないようです-大きな欠点IMO。私は何かが足りないのですか? スライスは確かに優れていますが、ハードコードされたサイズの配列に基づいている必要があります。そこでListが登場します。ハードコードされた配列サイズなしでGoで配列/スライスを作成する方法はありますか?リストが無視されるのはなぜですか?
82 arrays  list  go 

5
1つのチャネルでリッスンしている複数のゴルーチン
同じチャネルで同時に受信しようとしている複数のゴルーチンがあります。チャネルで受信を開始する最後のゴルーチンが値を取得しているようです。これは言語仕様のどこかにありますか、それとも未定義の動作ですか? c := make(chan string) for i := 0; i < 5; i++ { go func(i int) { <-c c <- fmt.Sprintf("goroutine %d", i) }(i) } c <- "hi" fmt.Println(<-c) 出力: goroutine 4 遊び場での例 編集: 思ったより複雑だと気づきました。メッセージはすべてのゴルーチンに渡されます。 c := make(chan string) for i := 0; i < 5; i++ { go …
82 go 

8
Goのシャッフル配列
次のPythonコードをGoに翻訳しようとしました import random list = [i for i in range(1, 25)] random.shuffle(list) print(list) しかし、シャッフル関数がなく、インターフェイスを実装して型を変換する必要があったため、Goバージョンは長くて扱いにくいことがわかりました。 私のコードの慣用的なGoバージョンは何でしょうか?
82 arrays  go 

9
Golangでのhttp接続の再利用
私は現在、GolangでHTTP投稿を行うときに接続を再利用する方法を見つけるのに苦労しています。 私は次のようなトランスポートとクライアントを作成しました: // Create a new transport and HTTP client tr := &http.Transport{} client := &http.Client{Transport: tr} 次に、このクライアントポインターを、次のように同じエンドポイントに複数の投稿を行うゴルーチンに渡します。 r, err := client.Post(url, "application/json", post) netstatを見ると、これによりすべての投稿に新しい接続が発生し、多数の同時接続が開かれているように見えます。 この場合、接続を再利用する正しい方法は何ですか?
82 go 

4
Goに要件をインストールするにはどうすればよいですか?「パッケージが見つかりません」
私はGoを初めて使用し、最小限のドキュメントでGoプロジェクトをセットアップしようとしています:https://github.com/alphagov/metadata-api クローンを作成しましたが、試してみるgo buildと次の警告が表示されます。 main.go:8:2: cannot find package "github.com/Sirupsen/logrus" in any of: /usr/local/Cellar/go/1.3.3/libexec/src/pkg/github.com/Sirupsen/logrus (from $GOROOT) /Users/me/go/src/github.com/Sirupsen/logrus (from $GOPATH) main.go:14:2: cannot find package "github.com/alphagov/metadata-api/content_api" in any of: /usr/local/Cellar/go/1.3.3/libexec/src/pkg/github.com/alphagov/metadata-api/content_api (from $GOROOT) /Users/me/go/src/github.com/alphagov/metadata-api/content_api (from $GOPATH) これは、Goと同等の要件をインストールしていないためだと思いますか? 私のGOPATH設定: metadata-api$ echo $GOPATH /Users/me/go そして、Go実行可能ファイルは metadata-ape$ echo $PATH ....:/Users/me/go/bin Goがこれらのパッケージを見つけるのを助けるために何をする必要がありますか?
82 go 

8
チャンネルを読まずにチャンネルが閉じているかどうかを確認するにはどうすればよいですか?
これは、@ Jimtによって書かれたGoのワーカーとコントローラーモードの良い例です。「golangで他のゴルーチンを一時停止および再開するためのエレガントな方法はありますか?」 package main import ( "fmt" "runtime" "sync" "time" ) // Possible worker states. const ( Stopped = 0 Paused = 1 Running = 2 ) // Maximum number of workers. const WorkerCount = 1000 func main() { // Launch workers. var wg sync.WaitGroup wg.Add(WorkerCount + 1) workers := …
82 go  channel 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.