写点什么

Go- 文件读写 -2

用户头像
HelloBug
关注
发布于: 2021 年 09 月 08 日
Go- 文件读写-2

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
用户头像

HelloBug

关注

还未添加个人签名 2018.09.20 加入

还未添加个人简介

评论

发布
暂无评论
Go- 文件读写-2