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

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

4
Go構造体をJSONに変換する
jsonパッケージを使用してGo構造体をJSONに変換しようとしていますが、取得できるのはだけ{}です。まったく明白なことだと思いますが、わかりません。 package main import ( "fmt" "encoding/json" ) type User struct { name string } func main() { user := &User{name:"Frank"} b, err := json.Marshal(user) if err != nil { fmt.Printf("Error: %s", err) return; } fmt.Println(string(b)) } それを実行しようとすると、次のようになります。 $ 6g test.go && 6l -o test test.6 && ./test {}
181 json  go 

11
構造体からフィールドを削除するか、JSONレスポンスでフィールドを非表示にする
GoでAPIを作成しました。このAPIは、呼び出されたときにクエリを実行し、構造体のインスタンスを作成してから、その構造体をJSONとしてエンコードしてから、呼び出し元に送り返します。ここで、「fields」GETパラメータを渡して、呼び出し元が返してほしい特定のフィールドを選択できるようにしたいと思います。 これは、フィールドの値に応じて、構造体が変化することを意味します。構造体からフィールドを削除する方法はありますか?または、少なくともJSON応答で動的に非表示にしますか?(注:空の値がある場合があるため、JSON omitEmptyタグはここでは機能しません)これらのいずれも可能でない場合、これを処理するためのより良い方法に関する提案はありますか?前もって感謝します。 私が使用している構造体の小さいバージョンは以下の通りです: type SearchResult struct { Date string `json:"date"` IdCompany int `json:"idCompany"` Company string `json:"company"` IdIndustry interface{} `json:"idIndustry"` Industry string `json:"industry"` IdContinent interface{} `json:"idContinent"` Continent string `json:"continent"` IdCountry interface{} `json:"idCountry"` Country string `json:"country"` IdState interface{} `json:"idState"` State string `json:"state"` IdCity interface{} `json:"idCity"` City string `json:"city"` } //SearchResult type …
181 json  go 

5
カスタムパッケージの使用方法
Goでカスタムパッケージを作成して使用しようとしています。それはおそらく非常に明白なものですが、これについては多くの情報を見つけることができません。基本的に、私はこれら2つのファイルを同じフォルダーに入れます。 mylib.go package mylib type SomeType struct { } main.go package main import ( "mylib" ) func main() { } しようとするとgo run main.go、次のエラーが発生します。 main.go:4:2: import "mylib": cannot find package go build mylib.go最初に実行しようとしましたが、何も実行していないようです(ファイルが生成されず、エラーメッセージも表示されません)。だから私はこれをどうやってできるのですか?
178 import  package  go 

2
バイトスライスをio.Readerに変換する
私のプロジェクトでは、要求の応答からのバイトスライスがあります。 defer resp.Body.Close() if resp.StatusCode != http.StatusOK { log.Println("StatusCode为" + strconv.Itoa(resp.StatusCode)) return } respByte, err := ioutil.ReadAll(resp.Body) if err != nil { log.Println("fail to read response data") return } これは機能しますが、応答の本文を取得したい場合io.Reader、どのように変換しますか?新しいリーダー/ライターを試しましたが、うまくいきませんでした。
177 go 

4
データ(タイプインターフェース{})をタイプ文字列に変換できません:タイプアサーションが必要です
私は行くのはかなり新しいです、そして私はこの通知パッケージで遊んでいました。 最初は次のようなコードがありました。 func doit(w http.ResponseWriter, r *http.Request) { notify.Post("my_event", "Hello World!") fmt.Fprint(w, "+OK") } 上記Hello World!の関数には改行を追加したかっdoitたのですが、これはかなり簡単なことですが、handlerその後は次のようになります。 func handler(w http.ResponseWriter, r *http.Request) { myEventChan := make(chan interface{}) notify.Start("my_event", myEventChan) data := <-myEventChan fmt.Fprint(w, data + "\n") } 後go run: $ go run lp.go # command-line-arguments ./lp.go:15: invalid operation: data + "\n" …
176 go  type-mismatch 

2
GoでのJSON Marshalを使用した小文字のJSONキー名
"encoding/json"パッケージを使用して、アプリケーションのインポートされたパッケージの1つで宣言された構造体をマーシャリングしたいと思います。 例えば。: type T struct { Foo int } インポートされるため、構造体で使用可能な(エクスポートされた)フィールドはすべて大文字で始まります。しかし、私は小文字のキー名が欲しいです: out, err := json.Marshal(&T{Foo: 42}) 結果として {「フー」:42} でも欲しい {"foo":42} 問題を簡単な方法で回避することは可能ですか?
175 json  go  marshalling 

10
整数の範囲を反復する方法はありますか?
Goの範囲はマップとスライスを反復処理できますが、次のような数値の範囲を反復処理する方法があるかどうか疑問に思っていました。 for i := range [1..10] { fmt.Println(i) } または、RubyがRangeクラスで行うようにGoで整数の範囲を表す方法はありますか?
175 go 


12
GoでC ++を使用する方法
新しいGo言語でC ++コードを呼び出すにはどうすればよいですか?つまり、C ++クラスをラップしてGoで使用するにはどうすればよいですか?
173 c++  wrapper  go 

7
gopathなしでローカルパッケージをインポートする方法
私は使用しましたGOPATHが、この現在の問題で私が直面しているのは役に立ちません。プロジェクトに固有のパッケージを作成できるようにしたい: myproject/ ├── binary1.go ├── binary2.go ├── package1.go └── package2.go 私は複数の方法を試してみましたが、どのように得るかpackage1.goで動作するようにbinary1.goか、binary2.goというように? 例えば; 私のことができるようにしたいimport "package1"し、次に実行することができgo build binary1.go、すべてがエラーがパッケージが上で見つけることができないというスローされることなく、罰金を動作しますGOROOTかGOPATH。この種の機能が必要な理由は、大規模プロジェクトのためです。他の複数のパッケージを参照したり、それらを1つの大きなファイルに保持したりする必要はありません。
171 go  package 

2
スライスの最後の要素を取得する方法は?
スライスの最後の要素を抽出するためのGoの方法は何ですか? var slice []int slice = append(slice, 2) slice = append(slice, 7) slice[len(slice)-1:][0] // Retrieves the last element 上記の解決策は機能しますが、扱いにくいようです。
166 go  slice 

5
goでmap [key]を削除しますか?
私は地図を持っています: var sessions = map[string] chan int{} どうすれば削除できsessions[key]ますか?私は試した: sessions[key] = nil,false; それはうまくいきませんでした。 アップデート(2011年11月): マップエントリを削除するための特別な構文は、Goバージョン1では削除されています。 Go 1は、特別なマップ割り当てを削除し、新しい組み込み関数を導入します。delete:delete(m, x)式によって取得されたマップエントリを削除しますm[x]。...
166 map  go 

8
HTTPヘッダーの設定
Go Webサーバーにヘッダーを設定しようとしています。gorilla/muxとnet/httpパッケージを使用しています。 Access-Control-Allow-Origin: *クロスドメインAJAXを許可するように設定します。 これが私のGoコードです: func saveHandler(w http.ResponseWriter, r *http.Request) { // do some stuff with the request data } func main() { r := mux.NewRouter() r.HandleFunc("/save", saveHandler) http.Handle("/", r) http.ListenAndServe(":"+port, nil) } net/http私はどのように設定されたレスポンスヘッダに正確にはわからない-パッケージは、それがクライアントであるかのようにHTTPリクエストヘッダを送信する記述文書を持っていますか?
165 http  go  cors  http-headers 

5
Goでの構造体のスタックとヒープの割り当て、およびガベージコレクションとの関係
私はGoを始めたばかりで、自動変数がスタックに存在し、割り当てられたメモリがヒープに存在するCスタイルのスタックベースのプログラミングと、Pythonスタイルのスタックベースのプログラミングが、スタック上に存在するものだけが、ヒープ上のオブジェクトへの参照/ポインターです。 私の知る限り、次の2つの関数は同じ出力を提供します。 func myFunction() (*MyStructType, error) { var chunk *MyStructType = new(HeaderChunk) ... return chunk, nil } func myFunction() (*MyStructType, error) { var chunk MyStructType ... return &chunk, nil } つまり、新しい構造体を割り当ててそれを返します。 それをCで書いた場合、最初のオブジェクトはヒープにオブジェクトを配置し、2番目のオブジェクトはスタックにオブジェクトを配置します。1つ目はヒープへのポインターを返し、2つ目はスタックへのポインターを返します。これは、関数が戻ったときまでに蒸発していたものであり、これは悪いことです。 Python(またはC#を除く他の多くの現代言語)で記述した場合、例2は不可能でした。 Goガベージは両方の値を収集するので、上記の両方の形式で問題ありません。 引用するには: Cとは異なり、ローカル変数のアドレスを返すことはまったく問題ありません。変数に関連付けられたストレージは、関数が戻った後も存続します。実際、複合リテラルのアドレスを取得すると、評価されるたびに新しいインスタンスが割り当てられるため、これらの最後の2行を組み合わせることができます。 http://golang.org/doc/effective_go.html#functions しかし、それはいくつかの質問を提起します。 1-例1では、構造体はヒープで宣言されています。例2はどうですか?それはCの場合と同じようにスタックで宣言されていますか、それともヒープに移動しますか? 2-例2がスタックで宣言されている場合、関数が戻った後、例2はどのように利用可能のままですか? 3-例2が実際にヒープで宣言されている場合、構造体は参照ではなく値で渡されるのはなぜですか。この場合のポインタのポイントは何ですか?

6
Goでのnil検出
Goには、次のようにnilを検出するためのコードがたくさんあります。 if err != nil { // handle the error } しかし、私はこのような構造体を持っています: type Config struct { host string port float64 } そして私がするとき、configはConfigのインスタンスです: if config == nil { } コンパイルエラーがあり、nilをConfig型に変換できません
165 go  null 

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