Go- 文件读写 -2
发布于: 2021 年 09 月 08 日

Go 学习笔记,学习内容《Go入门指南》
主要介绍以下内容:
读取命令行参数
命令行解析
利用切片读写文件
代码示例可以直接运行
package main
import ( "flag" "fmt" "os" "strings")
func printDivider(str ...string) { fmt.Println() fmt.Println("-----------------------------------------------") if len(str) > 0 { fmt.Println(str) }}
var NewLine = flag.Bool("n", false, "print newline") // 变量类型 *boolvar HasSpace = flag.Int("s", 1, "print space") // 变量类型 *int
const ( Space = " " Newline = "\n")
func main() { /* 读取命令行参数 命令行参数保存在切片:os.Args[]中,命令行参数按照空格进行分割,索引1开始是参数,索引0是程序名 */ printDivider("读取命令行参数") fmt.Printf("Program name: %s\n", os.Args[0]) fmt.Printf("Len of Args: %d\n", len(os.Args)) who := "Marry " if len(os.Args) > 1 { who += strings.Join(os.Args[1:], " ") } fmt.Println("Hello ", who)
/* 命令行解析 以下代码可使用命令行: go run '.\039_Read&WriteFile-2.go' -s 1 Jack Bob go run '.\039_Read&WriteFile-2.go' -n Jack Bob */ printDivider("命令行解析") flag.PrintDefaults() fmt.Println("----------------------") flag.Parse()
for i := 0; i < flag.NArg(); i++ { fmt.Println(flag.Arg(i)) }
fmt.Printf("NewLine: %t\n", *NewLine) // 输出:true 或 false fmt.Printf("HasSpace: %d\n", *HasSpace) // 输出:1 var s string = "" for i := 0; i < flag.NArg(); i++ { if i > 0 { if *NewLine { s += Newline } else if *HasSpace == 1 { s += Space } } s += flag.Arg(i) } fmt.Println(s)}复制代码
package main
import ( "flag" "fmt" "os")
func printDivider(str ...string) { fmt.Println() fmt.Println("-----------------------------------------------") if len(str) > 0 { fmt.Println(str) }}
func main() { /* 利用切片读写文件 */ printDivider("利用切片读写文件") flag.Parse() if flag.NArg() == 0 { cat(os.Stdin) }
for i := 0; i < flag.NArg(); i++ { f, err := os.Open(flag.Arg(i)) if f == nil { fmt.Fprintf(os.Stderr, "cat: can not open file: %s, error: %s\n", flag.Arg(i), err) }
cat(f) f.Close() }}
func cat(f *os.File) { const NBUF = 512 var buf [NBUF]byte
for { switch nr, err := f.Read(buf[:]); true { case nr < 0: fmt.Fprintf(os.Stderr, "cat: error reading: %s\n", err.Error()) os.Exit(1) case nr == 0: return case nr > 0: if nw, ew := os.Stdout.Write(buf[0:nr]); nw != nr { fmt.Fprintf(os.Stderr, "cat: error write: %s\n", ew.Error()) } } }}复制代码
划线
评论
复制
发布于: 2021 年 09 月 08 日阅读数: 4
版权声明: 本文为 InfoQ 作者【HelloBug】的原创文章。
原文链接:【http://xie.infoq.cn/article/acc95a2f6ea72beb1ec122153】。
本文遵守【CC BY-NC-ND】协议,转载请保留原文出处及本版权声明。
HelloBug
关注
还未添加个人签名 2018.09.20 加入
还未添加个人简介











评论