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

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


4
Goでローカルパッケージをインポートする方法は?
ローカライズしたいサンプルコードを作成するのは初めてです。 元のmain.goインポートステートメントでは、次のようになりました。 import ( "log" "net/http" "github.com/foo/bar/myapp/common" "github.com/foo/bar/myapp/routers" ) 今私は持っていてcommon、routersパッケージします/home/me/go/src/myapp そこで、importステートメントを次のように変換しました。 import ( "log" "net/http" "./common" "./routers" ) しかし、実行するgo install myappと、次のエラーが発生します。 can't load package: /home/me/go/src/myapp/main.go:7:3: local import "./common" in non-local package また、importステートメントでcommonandのrouters代わりに./commonandを使用すると./routers、次のようになります。 myapp/main.go:7:3: cannot find package "common" in any of: /usr/local/go/src/common (from $GOROOT) /home/me/go/src/common (from $GOPATH) myapp/main.go:8:2: cannot find package …
100 go 



3
GoでJSONをマップに部分的に非整列化
私のWebSocketサーバーはJSONデータを受信して​​非整列化します。このデータは、常にキーと値のペアを持つオブジェクトにラップされます。キー文字列は値の識別子として機能し、Goサーバーにそれがどのような値であるかを伝えます。値のタイプを知ることで、値を正しいタイプの構造体に非整列化するJSONに進むことができます。 各jsonオブジェクトには、複数のキーと値のペアが含まれる場合があります。 JSONの例: { "sendMsg":{"user":"ANisus","msg":"Trying to send a message"}, "say":"Hello" } "encoding/json"これを行うためにパッケージを使用する簡単な方法はありますか? package main import ( "encoding/json" "fmt" ) // the struct for the value of a "sendMsg"-command type sendMsg struct { user string msg string } // The type for the value of a "say"-command type say string func …
98 json  map  go 

4
Goにポインターがあることの意味は何ですか?
Goのポインターは関数の引数の変更を許可することを知っていますが、(適切なconstまたはmutable修飾子を使用して)参照のみを採用した方が簡単ではなかったでしょう。これで、ポインターが用意され、マップやチャネルなどの一部の組み込み型については、暗黙的に参照渡しされます。 何かが足りないのですか、それともGoのポインターが不必要な複雑なものなのですか?
98 pointers  go 

3
「bytes.Bufferにはio.Writerが実装されていません」というエラーメッセージが表示される
私はいくつかのGoオブジェクトにio.Writerを実装させようとしていますが、ファイルまたはファイルのようなオブジェクトではなく文字列に書き込みます。bytes.Buffer実装しているのでうまくいくと思いましたWrite(p []byte)。しかし、私がこれを試すと: import "bufio" import "bytes" func main() { var b bytes.Buffer foo := bufio.NewWriter(b) } 次のエラーが発生します。 cannot use b (type bytes.Buffer) as type io.Writer in function argument: bytes.Buffer does not implement io.Writer (Write method has pointer receiver) インターフェイスが明確に実装されているので、混乱しています。このエラーを解決するにはどうすればよいですか?
98 go 

4
response.Bodyを閉じないとどうなりますか?
Goでは、いくつかのhttp応答があり、電話をかけるのを忘れることがあります。 resp.Body.Close() この場合はどうなりますか?メモリリークはありますか?またdefer resp.Body.Close()、応答オブジェクトを取得した直後に挿入しても安全ですか? client := http.DefaultClient resp, err := client.Do(req) defer resp.Body.Close() if err != nil { return nil, err } エラーが発生した場合はrespどうresp.Bodyなりますか?
98 go 

2
なぜエイリアス関数を入力してキャストせずに使用できるのですか?
Goで、新しいタイプを定義する場合: type MyInt int その後MyInt、intを期待する関数にa を渡すことはできません。逆も同様です。 func test(i MyInt) { //do something with i } func main() { anInt := 0 test(anInt) //doesn't work, int is not of type MyInt } いいよ しかし、なぜ同じことが関数に当てはまらないのですか?例えば: type MyFunc func(i int) func (m MyFunc) Run(i int) { m(i) } func run(f MyFunc, i int) …
97 types  casting  go 

4
Goでの単体テストと統合テストの分離
GoLang(testify)で単体テストと統合テストを分離するための確立されたベストプラクティスはありますか?ユニットテスト(外部リソースに依存しないため非常に高速に実行される)と統合テスト(外部リソースに依存するため実行速度が遅い)が混在しています。ですから、統合テストを含めるかどうかを制御できるようにしたいのですgo test。 最も簡単な方法は、mainで-integrateフラグを定義することです。 var runIntegrationTests = flag.Bool("integration", false , "Run the integration tests (in addition to the unit tests)") そして、すべての統合テストの先頭にifステートメントを追加するには: if !*runIntegrationTests { this.T().Skip("To run this test, use: go test -integration") } これは私ができる最善のことですか?私はtestifyのドキュメントを検索して、おそらく命名規則やこれを実現する何かがあるかどうかを確認しましたが、何も見つかりませんでした。何か不足していますか?

5
日付/時刻比較を行う方法
Goで日付を比較するオプションはありますか?日付と時刻に基づいて、データを個別に並べ替える必要があります。そのため、ある範囲内で発生する限り、ある範囲内で発生するオブジェクトを許可する場合があります。このモデルでは、最も古い日付、最も新しい時刻/最新の日付、最新の時刻を選択し、それらをUnix()秒で比較するだけでは不十分です。私は提案を本当にいただければ幸いです。 最終的に、時間解析文字列比較モジュールを作成して、時間が範囲内かどうかを確認しました。ただし、これはうまくいきません。いくつかの大きな問題があります。楽しみのためにここに投稿しますが、時間を比較するためのより良い方法があることを願っています。 package main import ( "strconv" "strings" ) func tryIndex(arr []string, index int, def string) string { if index <= len(arr)-1 { return arr[index] } return def } /* * Takes two strings of format "hh:mm:ss" and compares them. * Takes a function to compare individual sections (split by …

10
インターフェイス{}をintに変換します
JSONから値を取得してそれをintにキャストしようとしていますが、機能せず、適切に行う方法がわかりません。 エラーメッセージは次のとおりです。 ...cannot convert val (type interface {}) to type int: need type assertion そしてコード: var f interface{} err = json.Unmarshal([]byte(jsonStr), &f) if err != nil { utility.CreateErrorResponse(w, "Error: failed to parse JSON data.") return } m := f.(map[string]interface{}) val, ok := m["area_id"] if !ok { utility.CreateErrorResponse(w, "Error: Area ID …
97 go 

8
Golang未使用インポートエラーを無効にする方法
デフォルトでは、Goは未使用のインポートをエラーとして扱い、インポートを削除するように強制します。この動作を変更したい、たとえば警告に変更したいという希望があるかどうか知りたい。 この問題は非常に煩わしく、Goでのコーディングを楽しむことができません。 たとえば、一部のコードをテストして、セグメント/関数を無効にしました。libの一部の関数(fmt、エラーなど)は使用されなくなりましたが、少しテストした後、関数を再度有効にする必要があります。これらのインポートを削除しない限り、プログラムはコンパイルされません。数分後、libを再インポートする必要があります。 GAEプログラムを開発するとき、私はこのプロセスを何度も繰り返していました。
96 go 

3
スライスを格納するインターフェース上の範囲{}
あなたが受け入れる関数を持っているシナリオを考えるとt interface{}。tスライスであると判断された場合、そのスライスをどのようにrange上書きしますか? func main() { data := []string{"one","two","three"} test(data) moredata := []int{1,2,3} test(data) } func test(t interface{}) { switch reflect.TypeOf(t).Kind() { case reflect.Slice: // how do I iterate here? for _,value := range t { fmt.Println(value) } } } Go Playgroundの例:http : //play.golang.org/p/DNldAlNShB

6
[]文字列を[]インターフェース{}に変換できません
私はいくつかのコードを書いていますが、引数をキャッチして渡すためfmt.Println に必要です(スペースで区切られ、改行が続く引数を書き込むというデフォルトの動作が必要です)。ただし、時間[]interface {}がかかりますが、をflag.Args()返します[]string。 コード例は次のとおりです。 package main import ( "fmt" "flag" ) func main() { flag.Parse() fmt.Println(flag.Args()...) } これにより、次のエラーが返されます。 ./example.go:10: cannot use args (type []string) as type []interface {} in function argument これはバグですか?べきではないfmt.Println取る任意の配列を?ちなみに、私もこれをやろうとしました: var args = []interface{}(flag.Args()) しかし、次のエラーが発生します。 cannot convert flag.Args() (type []string) to type []interface {} これを回避する「実行」方法はありますか?

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