通过if语句进行多重赋值

huangapple go评论120阅读模式
英文:

Multiple assignment by if statement

问题

可以通过if条件执行多个赋值吗?就像下面的代码一样?

  1. func SendEmail(url, email string) (string, error) {
  2. genUri := buildUri()
  3. if err := setRedisIdentity(genUri, email); err != nil; genUrl, err := buildActivateUrl(url, genUri); {
  4. return "", err
  5. }
  6. return "test", nil
  7. }

是的,可以在if条件中执行多个赋值操作。在你提供的代码中,if语句中的第一个赋值是err := setRedisIdentity(genUri, email),第二个赋值是genUrl, err := buildActivateUrl(url, genUri)。这两个赋值操作都会在if条件判断为真时执行。

英文:

It is possible to execute multiple assignment by if condition, like the following code?

  1. func SendEmail(url, email string) (string, error) {
  2. genUri := buildUri()
  3. if err := setRedisIdentity(genUri, email); err != nil; genUrl, err := buildActivateUrl(url, genUri); {
  4. return "", err
  5. }
  6. return "test", nil
  7. }

答案1

得分: 25

看起来你想要这样的代码:

  1. package main
  2. import "fmt"
  3. func a(int) int { return 7 }
  4. func b(int) int { return 42 }
  5. func main() {
  6. if x, y := a(1), b(2); x > 0 && x < y {
  7. fmt.Println("sometimes")
  8. }
  9. fmt.Println("always")
  10. }

输出结果:

  1. sometimes
  2. always
英文:

It looks like you want something like this:

  1. package main
  2. import &quot;fmt&quot;
  3. func a(int) int { return 7 }
  4. func b(int) int { return 42 }
  5. func main() {
  6. if x, y := a(1), b(2); x &gt; 0 &amp;&amp; x &lt; y {
  7. fmt.Println(&quot;sometimes&quot;)
  8. }
  9. fmt.Println(&quot;always&quot;)
  10. }

Output:

  1. sometimes
  2. always

答案2

得分: 13

不。if语句的开始只允许有一个“简单语句”,根据规范

推荐的方法是多个可能返回错误的测试,所以我认为你想要的是这样的:

  1. func SendEmail(url, email string) (string, error) {
  2. genUri := buildUri()
  3. if err := setRedisIdentity(genUri, email); err != nil {
  4. return "", err
  5. }
  6. if genUrl, err := buildActivateUrl(url, genUri); err != nil {
  7. return "", err
  8. }
  9. return "test", nil
  10. }
英文:

No. Only one 'simple statement' is permitted at the beginning of an if-statement, per the spec.

The recommended approach is multiple tests which might return an error, so I think you want something like:

  1. func SendEmail(url, email string) (string, error) {
  2. genUri := buildUri()
  3. if err := setRedisIdentity(genUri, email); err != nil {
  4. return &quot;&quot;, err
  5. }
  6. if genUrl, err := buildActivateUrl(url, genUri); err != nil {
  7. return &quot;&quot;, err
  8. }
  9. return &quot;test&quot;, nil
  10. }

huangapple
  • 本文由 发表于 2014年8月13日 17:22:37
  • 转载请务必保留本文链接:https://go.coder-hub.com/25282572.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定