go for循环中的变量问题

看《Go语言圣经》中遇到的疑问

// Echo1 prints its command-line arguments.
package main

import (
  "fmt"
  "os"
)

func main() {
  var s, sep string
  for i := 1; i < len(os.Args); i++ {
    s += sep + os.Args[i]
    sep = " "    // <-- 这个位置为什么要在循环当中每次做赋值操作,而不是在循环之前发生?
  }
  fmt.Println(s)
}
阅读 6.8k
2 个回答

我想应该输出结果是将输入的变量通过‘ ’连接后输出,例如: args1 args2 args3,拼接好字符串后在复制,防止字符串第一位是' ', 如果在之前复制那么不就输出 args1 args2...了么。

其实把 sep 赋值移出到循环外也可以:

func main() {
    var s, sep string
    sep = " " 
    for i := 1; i < len(os.Args); i++ {
        s += sep + os.Args[i]
    }
    fmt.Println(s)
}

如果是楼上说的防止字符串之前出现空格,那么可以使用 strings.Join:

package main

import (
    "fmt"
    "os"
    "strings"
)

func main() {
    var sep = " "
    var s = strings.Join(os.Args[1:], sep)
    fmt.Println(s)
}

代码会更清晰.参考 func Join

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题