私はマルチlangウェブサイトを作成しています。 私はユーザーのクッキーから言語情報を読みました。en.go
gr.go
など モジュールのタイプはmap[string]string
です。ここでの問題はjavacriptです。lang[cookies.lang]["whatever message"].'But go does not support accessing struct members in this way. I could make switch case or
map [string] map [string]文字列 `とすべての可能な言語をマップしますが、これは非常に余分な作業です。 golangがjs bracketの表記法のようなメンバーにアクセスする方法を提供していますか? Not:スタックにも同様の質問があり、誰かが "リフレクト"パッケージを使用するよう書いていましたが、それがどのように動作し、自分で再生できなかったのか、自分で再生できなかったのか分かりませんでした。golangのjavascriptのような動的構造体メンバ名
0
A
答えて
1
可能なルートの1つはmap[string]map[string]string
です。
基本翻訳変数を宣言する基本パッケージを用意し、翻訳モジュールでinit
関数を使用して、関連するサブマップを作成することができます。別のパッケージとして、または別々のファイルとして扱いたい場合は、基本的にオプションです(パッケージとしては、コンパイル時にどの言語を含めるかを制御することができます)。
あなたはパッケージのルートを行けば、私は次の構造を提案する:
package "base"
var Lang map[string]map[string]string
そして、それぞれの言語固有のパッケージで:
package "<language code>"
import "language/base"
var code = "<langcode>"
func init() {
d := map[string]string{}
d[<phrase1>] = "your translation here"
d[<phrase2>] = "another translation here"
// Do this for all the translations
base.Lang[code] = d
}
翻訳/ベースに、その後
translation/base This is where you export from
translation/<language> These are "import only" packages
を
これをメインプログラムから使用できます。
package "..."
import (
"language/base"
_ "language/lang1" // We are only interested in side-effects
_ "language/lang2" // Same here...
)
別個のパッケージを使用していないのは、ほぼ同じです。すべてのファイルが同じパッケージに含まれていることを確認するだけで、Lang
変数のパッケージプレフィックスをスキップできます。
おもちゃの例on the Go Playgroundには、すべての "偽装"ビットがインライン化されています。
+0
それは私も思ったことです。私はそれを言いましたが、これは唯一のケースではありません。私はなぜそれが私はupvoted動的な呼び出しが必要ですが、これは正確に答えていないと私はとにかくこれを行うには行く方法です探していますあなたは動的に呼び出すことがたくさんある – nikoss
関連する問題
- 1. 構造体プロパティへのGolang動的アクセス
- 2. 構造体メンバ
- 3. golang構造体
- 4. 構造体変数と構造体メンバ
- 5. インクリメント構造体のメンバ
- 6. 構造体メンバのマクロ
- 7. 構造体メンバの型キャスト
- 8. 構造体メンバへのポインタ
- 9. Golangで構造体メンバをポインタにするのは一般的ですか?
- 10. Golang構造体/インタフェース
- 11. Golangで動的な構造体を返す方法は?
- 12. メンバの有無による構造体
- 13. Golang JSONの構造体は、
- 14. Golang構造体の比較
- 15. Golangの不変構造体
- 16. パラメータとしての動的構造体Golang
- 17. 構造体を別の構造体メンバにキャストする方法
- 18. 構造のGolang動的作成メンバー
- 19. Cの構造体の動的配列の構造体の動的配列
- 20. Golang変数構造体フィールド
- 21. Golang RethinkDB ChangeFeed構造体
- 22. Golang構造体定義パターン
- 23. 構造体メンバが構造体へのポインタで更新されない
- 24. 構造体のメンバにアクセスし、一定
- 25. CORBA IDL:構造体メンバのデフォルト値
- 26. 構造体のメンバを初期化
- 27. C++:どのように(構造体ベクター中に位置)構造体のメンバにデータを挿入する
- 28. 動的な構造体配列エラー
- 29. 構造体のメンバをRustの同じ構造体のメソッドに渡す
- 30. Beego/Golang - 構造体へのクエリ値
ここに、 'reflect'を使って名前に基づいて構造体値のフィールドにアクセスするいくつかの例を挙げます:[1](http://stackoverflow.com/a/30889373/1705598); [2](http://stackoverflow.com/a/39968350/1705598); [3](http://stackoverflow.com/questions/30913483/golang-sort-struct-fields-in-alphabetical-order/30915092#30915092); [4](http://stackoverflow.com/a/33142636/1705598)。 – icza
人がメモなしでマイナスポイントを与える理由は何ですか?どのように愚かな質問ですか?マイナスに投票した人は私が思うどんな技術にも精通しています – nikoss
@nikossこれは、「JavaScriptをGoに書くにはどうすればいいのですか?」と非常によく似ていると思います。あなたは、異なる能力を持っています。すべてのことで、 'map [string] map [string] string'はGoの正しい解決策だと思っています。構造体を使用したり、動的にパッケージを検索したり、 – Vatine