第一个golang程序 ( v1.0 v2.0 )

前端之家收集整理的这篇文章主要介绍了第一个golang程序 ( v1.0 v2.0 )前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

v2.0@H_403_2@

===============
@H_403_2@

package mainpackage main@H_403_2@

import (@H_403_2@
"bufio"@H_403_2@
"flag"@H_403_2@
"fmt"@H_403_2@
"io"@H_403_2@
"log"@H_403_2@
"os"@H_403_2@
"os/exec"@H_403_2@
"path/filepath"@H_403_2@
"strings"@H_403_2@
"time"@H_403_2@
)@H_403_2@
const (@H_403_2@
filename = "c:\\myetc\\remote.etc"@H_403_2@
)@H_403_2@
func main() {@H_403_2@
var servicefilepath string@H_403_2@
var serviceIP string@H_403_2@
var passwd string@H_403_2@
var serviceusername string@H_403_2@
var port string@H_403_2@
//参数判断@H_403_2@
if len(os.Args) == 1 {@H_403_2@
fmt.Printf("usage: %s filename1 filename2 ...\n",filepath.Base(os.Args[0]))@H_403_2@
return@H_403_2@
}@H_403_2@
//判断文件是否存在@H_403_2@
_,err := os.Stat(filename)@H_403_2@
if err != nil {@H_403_2@
log.Print("文件不存在!")@H_403_2@
return@H_403_2@
}@H_403_2@
f,err := os.Open(filename) //打开文件@H_403_2@
//打开文件出错处理,也可以是 defer f.Close(),这里这样写是可以在里面添加内容@H_403_2@
defer func() {@H_403_2@
f.Close()@H_403_2@
}()@H_403_2@
if nil == err {@H_403_2@
buff := bufio.NewReader(f) //读入缓存@H_403_2@
for {@H_403_2@
line,err := buff.ReadString('\n') //以'\n'为结束符读入一行@H_403_2@
if err != nil || io.EOF == err {@H_403_2@
break@H_403_2@
}@H_403_2@
//如果是#开头的则认为是注释符@H_403_2@
strings.Trim(line," ")@H_403_2@
if ok := strings.Contains(line,"#"); ok {@H_403_2@
continue@H_403_2@
}@H_403_2@
//去回车换行符@H_403_2@
//样例 m_ta/m_ta@192.168.224.128:22:/home/m_ta/src@H_403_2@
 // splitstrings := strings.Split(strings.Replace(line,"\r\n","",-1),":")
           //取值写是不是很好,以后再改进 
  // servicefilepath = splitstrings[2]@H_403_2@
 // port = splitstrings[1]@H_403_2@
 // tmp := strings.Split(splitstrings[0],"@")@H_403_2@
 // serviceIP = tmp[1]@H_403_2@
  // tmp2 := strings.Split(tmp[0],"/")@H_403_2@
 // passwd = tmp2[0]@H_403_2@
 // serviceusername = tmp2[1]

          //用以下方法来进行分割
         splitstrings := strings.FieldsFunc(strings.Replace(line,func(char rune) bool {@H_403_2@
switch char {@H_403_2@
case ':','/','@':@H_403_2@
return true@H_403_2@
}@H_403_2@
return false@H_403_2@
})@H_403_2@
   passwd,serviceusername,serviceIP,port = splitstrings[0],splitstrings[1],splitstrings[2],splitstrings[3] 
            servicefilepath = "/" + strings.Join(splitstrings[4:],"/")@H_403_2@

@H_403_2@
}@H_403_2@
parameter := serviceusername + "@" + serviceIP + ":" + servicefilepath@H_403_2@
flag.Parse() // Scans the arg list and sets up flags@H_403_2@
for i := 0; i < flag.NArg(); i++ {@H_403_2@
cmd := exec.Command("pscp.exe","-P",port,"-pw",passwd,flag.Arg(i),parameter)@H_403_2@
err := cmd.Run()@H_403_2@
if err != nil {@H_403_2@
log.Print(err)@H_403_2@
} else {@H_403_2@
log.Print("OK!")@H_403_2@
}@H_403_2@
}@H_403_2@
time.Sleep(1 * time.Second)@H_403_2@
}@H_403_2@
}


v.10
=========================
@H_403_2@
import (
"flag"
"log"
"os/exec"
"strconv"
"time"
)

func main() {
port:=22
passwd:="hstest"
serviceusername:="hstest"
serviceIP:="192.168.224.128"
servicefilepath:="/home/hstest/src"
parameter:= serviceusername + "@" + serviceIP + ":" + servicefilepath

flag.Parse() // Scans the arg list and sets up flags
for i := 0; i < flag.NArg(); i++ {
cmd:=exec.Command("pscp.exe",strconv.Itoa(port),parameter)@H_403_2@
err:=cmd.Run()
if err != nil {
log.Print(err)
}else{
log.Print("OK!")
@H_403_2@

}@H_403_2@

}@H_403_2@

time.Sleep(1*time.Second)
@H_403_2@

}
@H_403_2@

功能: 把文件上传到指定服务器, 在windows中,右键->打开, 可以直接上传指定文件,但不能上传多个文件,命令行可以
@H_403_2@

文件名为: Upfile.go@H_403_2@

生成的执行文件为:Upfile.exe@H_403_2@

用法为: Upfile filename1 filename2 @H_403_2@

猜你在找的Go相关文章