Goの関数でデフォルト値を指定する方法はありますか?私はドキュメントでこれを見つけようとしていますが、これが可能であることを指定するものは何も見つかりません。Goのメソッドのデフォルト値
答えて
いいえ、Googleでの権限は、それをサポートしないことを選択しました。
https://groups.google.com/forum/#!topic/golang-nuts/-5MCaivW0qQ
NOが、デフォルト値を実装するために他のいくつかのオプションがあります。件名にはgood blog postsがいくつかありますが、具体的な例がいくつかあります。
オプション1:発信者がデフォルト値を使用することを選択
// Both parameters are optional, use empty string for default value
func Concat1(a string, b int) string {
if a == "" {
a = "default-a"
}
if b == 0 {
b = 5
}
return fmt.Sprintf("%s%d", a, b)
}
オプション2:端
// a is required, b is optional.
// Only the first value in b_optional will be used.
func Concat2(a string, b_optional ...int) string {
b := 5
if len(b_optional) > 0 {
b = b_optional[0]
}
return fmt.Sprintf("%s%d", a, b)
}
オプションで単一オプションのパラメータ3:設定構造体
// A declarative default value syntax
// Empty values will be replaced with defaults
type Parameters struct {
A string `default:"default-a"` // this only works with strings
B string // default is 5
}
func Concat3(prm Parameters) string {
typ := reflect.TypeOf(prm)
if prm.A == "" {
f, _ := typ.FieldByName("A")
prm.A = f.Tag.Get("default")
}
if prm.B == 0 {
prm.B = 5
}
return fmt.Sprintf("%s%d", prm.A, prm.B)
}
オプション4:パース全可変長引数(ジャバスクリプトスタイル)
func Concat4(args ...interface{}) string {
a := "default-a"
b := 5
for _, arg := range args {
switch t := arg.(type) {
case string:
a = t
case int:
b = t
default:
panic("Unknown argument")
}
}
return fmt.Sprintf("%s%d", a, b)
}
何が苦しいですか。 'func Concat1(文字列= 'foo'、b int = 10)文字列{'他のほとんどの現代の言語のように...これは、与えられた例のどれもコードの1行に相当するものになります。 – Rotareti
2つの異なる関数を記述し、それが呼び出し元に任せて、それらが期待することを明示するかどうかを選択できますか? – ProgramCpp
いいえ、デフォルトを指定する方法はありません。私はこれが、ライター側でもう少し時間を費やして(そして、うまくいけば考えて)、可読性を高めるために意図的に行われたと信じています。
私は "デフォルト"を持つ適切なアプローチは、より一般的な機能にそのデフォルトを供給する新しい機能を持つことだと思います。これを持って、あなたのコードはあなたの意図でより明確になります。たとえば、
func SaySomething(say string) {
// All the complicated bits involved in saying something
}
func SayHello() {
SaySomething("Hello")
}
ほとんどの努力で、私は共通のことをして汎用関数を再利用しました。多くのライブラリでこれを見ることができます。たとえばfmt.Println
は、そうでなければfmt.Print
の改行を追加するだけです。しかし、誰かのコードを読むときに、彼らが呼び出す機能によって何をするつもりであるかは明らかです。デフォルト値では、何が起こっているのかわからないでしょう。デフォルト値が実際に何であるかを参照する関数に行く必要はありません。
- 1. C#でメソッドのパラメータ配列のデフォルト値
- 2. Goのヌル値
- 3. アクセス制御可能なメソッドのデフォルト値
- 4. 選択トリガのデフォルト値Javascriptメソッド
- 5. Javaクライアント - Go Http Mux Server - goメソッドで空のパラメータ
- 6. goサーバーのServeHTTPメソッドの宣言
- 7. GoとJavaScriptのメソッドの実行コンテキスト
- 8. google go相当のJava finalizeメソッド
- 9. goのために、どのようにデフォルトのnetgoをデフォルトにしますか?
- 10. この__init __()メソッドの定義のデフォルトのパラメータ値は?
- 11. symfonyのルーティング:経路()メソッドは、デフォルトのPARAM値を
- 12. RequestParamのSpringのデフォルト値がメソッド呼び出しと同じ
- 13. patchValueメソッドのemitEventのデフォルト値は何ですか?
- 14. インスタンスメンバのデフォルトの引数値をメソッドに渡すには?
- 15. switchメソッドはデフォルト値のみを返します
- 16. メソッドのデフォルト値としてself。*を使用する
- 17. Goテンプレートのsql.NullStringの値をプリント
- 18. テキストボックスのデフォルト値
- 19. GetCultureInfoのデフォルト値
- 20. IP_MULTICAST_IFのデフォルト値
- 21. ラジオボタンのデフォルト値
- 22. デフォルトのテキストボックス値
- 23. ドロップダウンリストのデフォルト値
- 24. フィールドのデフォルト値
- 25. クエリパラメータのデフォルト値
- 26. アポストロフィのデフォルト値
- 27. __PTRDIFF_TYPE__のデフォルト値
- 28. Djangoのデフォルト値
- 29. mysqlのデフォルト値?
- 30. コンボボックスのデフォルト値
また、この[公式の声明とのディスカッション](https://groups.google.com/forum/#!msg/golang-nuts/3Go3gPNIPaw/Pv2B5udjDgMJ)と[この関連する質問](http://stackoverflow.com/questions/2032149/optional-parameters)。 – nemo