2017-11-20 14 views
-2

場合、私は、構造体は、私はinvitecodeフィールドから取得したかどうかを確認したいんでした私は構造体のフィールドへの割り当て値は空

... 

r.ParseForm() 

new user := &data{ 
    invitecode: r.FormValue("invitecode"), 
    fname: r.FormValue("fname") 
    lname: r.FormValue("lname") 
} 

を解析した後、フォームデータの取得から移入

type data struct { 
    invitecode string 
    fname string 
    lname string 
} 

が定義されていますフォームは空であり、そうであれば、関数を呼び出すことによってそれを設定しますが、そうでない場合は、取得された値を入力します(invitecode:newUser.invitecode == "" {"Mr"} else {lnames.title} )。私はgoに質問の使用や読んだと思ったテナント演算子がないと理解しています。hereherehere & hereはif else文を使用していますが、動作しないようです。私は、新しい変数を割り当てる際にチェックが必要な解決策を探しています。以下のコードを試しても動作しないようです。どんな助けもありがとう。

user := &data{ /* ... */ } 

if user.invitecode == "" { 
    user.invitecode = "Mr" 
} else { 
    user.invitecode = lnames.title 
} 
+1

'if'文を使用していくつか問題がありますか?引用したコードには、あなたが何を記述しようとしているのかは何もありません。 – Adrian

+0

私は何をしようとしているのかを示すために質問を更新しました – driftavalii

答えて

2

Goは三元系を持っていない:

package main 

import (
    "fmt" 
) 

type data struct { 
    invitecode string 
    fname  string 
    lname  string 
} 

func main() { 
    var user data 

    newUser := map[string]string{"invitecode": "", "fname": "Dude", "lname": "Did"} 
    user = &data{ 
     invitecode: if newUser.invitecode == "" {"Mr"} else {lnames.title}, 
     fname:  newUser.fname, 
     lname:  newUser.lname, 
    } 
    fmt.Println(user) 
} 
+0

ありがとう、一度にすべてのフィールドを割り当てようとしましたが、他のフィールドをelseブロックに割り当てることができ、それを行う適切な方法ですか? – driftavalii

+0

確かに、それがあなたの探している行動なら。 – Adrian

1

あなたは三項演算子は(または/ else文場合)他の言語では、あなたは、単に手続きを行う必要がありますあなたのようなインラインif ... elseステートメントを使用することはできませんまた、コードに表示されているように、インラインでifを実行することもできません。通常のifブロックを実行する必要があります:

user = &data{} 
if newUser.inviteCode = "" { 
    user.invitecode = "Mr" 
} else { 
    user.invitecode = lnames.title 
} 

などです。あなたは、関数に、これを抽出することができます:

func coalesce(args ...string) string { 
    for _,str := range args { 
     if str != "" { 
      return str 
     } 
    } 
    return "" 
} 

そしてそうのようにそれを使用します。もちろん

user.invitecode = coalesce(lnames.title, "Mr") 

、あなたは複数のタイプ(文字列だけでなく)を扱う場合、あなたはそのような機能が必要になります各タイプごとに

+0

ありがとう、このように多くのコードを必要としているようです。 – driftavalii

+0

うまく行くように見えるように明快に明快に設計されていません。 – maerics

+1

「見える」とは言えませんが、Goはその方法で_explicitly_に設計されました。言語の開発者はGoエラー処理についてさまざまなブログで数回述べています。彼らの見解は、非常に具体的かつ公然とその明快さ>簡潔さです。 – Kaedys

関連する問題