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") // 变量类型 *bool
var 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 加入
还未添加个人简介
评论