Java转Go学习之旅 | Go入门(1)

入门

    • 命令行参数
    • 找出重复行
      • 常规版本
      • 涉及文件操作

命令行参数

命令行参数以os包中Args名字的变量供程序访问,在os包外面,使用os.Args这个名字

  • 变量os.Args是一个字符串slice
  • os.Args[0]:命令本身的名字
  • os.Args[1:]:另外的元素,是程序开始执行时的参数
package main  
  
import (  
   "fmt"  
   "os"   
   "strings"
)  
  
func main() {  
   //输出命令行名字  
   fmt.Println(os.Args[0])  
  
   s, sep := "", ""  
   // 每一次迭代,range产生一对值:索引和这个索引处元素的值  
   for _, arg := range os.Args[1:] {  
      s += sep + arg  
      sep = " "  
   }  
   fmt.Println(s)  
  
   fmt.Println(strings.Join(os.Args[1:], ", "))  
}
  • 空标识符_:可以用在任何语法需要变量名但是逻辑不需要的地方

找出重复行

常规版本

// dup 输出标准输入中出现次数大于1的行,前面是次数  
package main  
  
import (  
   "bufio"  
   "fmt"   
   "os"
)  
  
func main() {  
   counts := make(map[string]int)  
   input := bufio.NewScanner(os.Stdin)  
   for input.Scan() {  
      counts[input.Text()]++  
   }  
   for line, n := range counts {  
      if n > 1 {  
         fmt.Printf("%d: %s\n", n, line)  
      }  
   }  
}

涉及文件操作

package main  
  
import (  
   "fmt"  
   "io/ioutil"   "os"   "strings")  
  
func main() {  
   counts := make(map[string]int)  
   for _, filename := range os.Args[1:] {  
      data, err := ioutil.ReadFile(filename)  
      if err != nil {  
         fmt.Fprintf(os.Stderr, "dup2: %v\n", err)  
         continue  
      }  
      for _, line := range strings.Split(string(data), "\n") {  
         counts[line]++  
      }  
   }  
   for line, n := range counts {  
      if n > 1 {  
         fmt.Printf("%d: %s\n", n, line)  
      }  
   }  
}

你可能感兴趣的:(Go语言之旅,java,golang,学习)