golang的初认识以及实践
这篇博客也算当做我这几点学习go语言的一个小总结和小复习吧golang的简单介绍Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。 Go是从2007年末由Robert Griesemer,Rob Pike,Ken Thompson主持开发,后来还加入了Ian Lance Taylor,Russ Cox等人, 并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。 golang的特点
go练习废话不对说了,先从各方面总结一下我学习的心得吧
程序代码: package main
import (
"fmt"
"os"
"bufio"
"io"
"log"
"strconv"
//"io/ioutil"
)
func self_logger(myerr interface{}) {
logfile,err := os.OpenFile("./ErrorLog",os.O_CREATE|os.O_APPEND|os.O_RDWR, 0)
if err != nil {
fmt.Printf("%srn",err.Error())
os.Exit(-1)
}
defer logfile.Close()
logger := log.New(logfile,"rn",log.Ldate|log.Ltime|log.Llongfile)
logger.Println(myerr)
}
func printUsage() {
fmt.Printf("Usage: ./selpg -s开始页号 -e结束页号 [ -l每页行号 | -f | 输入文件名]n")
}
func main() {
defer func() { // 必须要先声明defer,否则不能捕获到panic异常
if err := recover(); err != nil {
self_logger(err) // 这里的err其实就是panic传入的内容,55
}
}()
var b = os.Args
//length := len(b)
var lnum int = 12//default line number
var err error
var inputFile *os.File = os.Stdin
var outputFile *os.File = os.Stdout
var infile,outfile bool = false,false
var flag bool = false
var snum int = -1
var enum int = -1
for i,a := range b[1:] {
if a[0:2] == "-s" {
snum,err = strconv.Atoi(a[2:])
if (err != nil) {
printUsage()
panic(err)
}
} else if a[0:2] == "-e" {
enum,err = strconv.Atoi(a[2:])
if (err!= nil) {
printUsage()
panic(err)
}
} else if a[0:2] == "-l" {
lnum,err = strconv.Atoi(a[2:])
if (err!= nil) {
printUsage()
panic(err)
}
} else if a == "-f" {
flag = true
} else if infile == false {
inputFile,os.O_RDONLY, 0)
if err != nil {
errstr:= fmt.Sprintf("Can not open file:%s",a)
printUsage()
panic(errstr)
}
infile = true
defer inputFile.Close()
} else if outfile == false {
os.OpenFile(name,perm)
outputFile,a)
printUsage()
panic(errstr)
}
outfile = true
defer outputFile.Close()
} else {
fmt.Printf("Undefined option [%s]n",a)
errstr := fmt.Sprintf("Undefined option [%s]",a)
printUsage()
panic(errstr)
}
i++
}
if snum < 0||enum < 0 {
printUsage()
os.Exit(-1)
}
if (snum > enum) {
errstr := fmt.Sprintf("start num(%d) is gratter than end number(%d)",snum,enum)
panic(errstr)
}
if flag {
lnum = 1
}
rd := bufio.NewReader(inputFile)
wt := bufio.NewWriter(outputFile)
var lc int = 0
var pc int = 0
for true {
line,err := rd.ReadString('n') //以'n'为结束符读入一行
if err != nil || io.EOF == err {
break
}
lc++
if lc == lnum {
lc = 0;
pc++
}
if pc >= snum&&pc<=enum {
_,err := wt.WriteString(line)
if err != nil {
panic(err)
}
wt.Flush()
} else if pc > enum {
break
}
}
if pc < snum {
errstr := fmt.Sprintf("start number (and end number) is grater than the whole pages in the file")
panic(errstr)
}
if pc < enum {
errstr := fmt.Sprintf("end number is grater than the whole pages in the file")
panic(errstr)
}
}
这个程序的功能就是基本上实现命令行传输参数,类似于我们常用的 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |