鍍金池/ 問答/GO  數(shù)據(jù)庫(kù)/ go for循環(huán)中的變量問題

go for循環(huán)中的變量問題

看《Go語(yǔ)言圣經(jīng)》中遇到的疑問

// 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 = " "    // <-- 這個(gè)位置為什么要在循環(huán)當(dāng)中每次做賦值操作,而不是在循環(huán)之前發(fā)生?
  }
  fmt.Println(s)
}
回答
編輯回答
風(fēng)清揚(yáng)

其實(shí)把 sep 賦值移出到循環(huán)外也可以:

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

如果是樓上說的防止字符串之前出現(xiàn)空格,那么可以使用 strings.Join:

package main

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

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

代碼會(huì)更清晰.參考 func Join

2017年10月31日 22:52
編輯回答
北城荒

我想應(yīng)該輸出結(jié)果是將輸入的變量通過‘ ’連接后輸出,例如: args1 args2 args3,拼接好字符串后在復(fù)制,防止字符串第一位是' ', 如果在之前復(fù)制那么不就輸出 args1 args2...了么。

2018年7月2日 17:42