itself 0.1.1

A useful tool collection
package main

import (
	"bufio"
	"bytes"
	"fmt"
	"github.com/BurntSushi/toml"
	"io"
	"net"
	"os"
	"os/exec"
	"strings"
	"time"
)

// https://www.tizi365.com/archives/319.html

// Config 我们先根据toml配置文件定义struct
// 他们的关系都是一一对应,toml配置文件定义的字段是什么类型,struct字段就是什么类型
type Cargo struct {
	Package struct {
		Name        string   `toml:"name"`
		Version     string   `toml:"version"`
		Authors     []string `toml:"authors"`
		Edition     string   `toml:"edition"`
		Description string   `toml:"description"`
		License     string   `toml:"license"`
	} `toml:"package"`
	Dependencies struct {
	} `toml:"dependencies"`
}

func main() {

	fi, err := os.Open("/Users/fliter/go/src/shuang/httpp/no_reg_pure.txt")
	if err != nil {
		fmt.Printf("Error: %s\n", err)
		return
	}
	defer fi.Close()

	br := bufio.NewReader(fi)
	for {
		a, _, c := br.ReadLine()
		if c == io.EOF {
			break
		}

		keyword := string(a)
		//keyword = "adult"
		deal2(keyword)
		time.Sleep(3*time.Second)
		//break
	}

}
func deal2(keyword string) {
	// 首先初始化struct对象,用于保存配置文件信息
	var conf Cargo

	// 通过toml.DecodeFile将toml配置文件的内容,解析到struct对象
	if _, err := toml.DecodeFile("/Users/fliter/rust-lab/hello-rust/Cargo.toml", &conf); err != nil {
		// handle error
	}

	// 可以通过conf读取配置
	fmt.Println(conf.Package.Name)

	conf.Package.Name = strings.TrimSpace(keyword)

	//TestEncodeRoundTrip()

	var (
		firstBuffer bytes.Buffer
	)
	err := toml.NewEncoder(&firstBuffer).Encode(conf)
	if err != nil {
		fmt.Println("err:", err)
	}

	fmt.Println(firstBuffer.String())

	if errW := WriteToFile("/Users/fliter/rust-lab/hello-rust/Cargo.toml", firstBuffer.String()); errW != nil {
		fmt.Printf("keyword%s, errW%v", keyword, errW)
	}



	//执行命令行操作
	command := exec.Command("sh", "./operate.sh")
	//errC := command.Run()
	//if errC != nil{
	//	fmt.Println(errC.Error(),errC)
	//}

	var out bytes.Buffer
	var stderr bytes.Buffer
	command.Stdout = &out
	command.Stderr = &stderr
	errC := command.Run()
	if errC != nil {
		fmt.Println(fmt.Sprint(errC) + ": " + stderr.String())
		return
	}
	fmt.Println("Result: " + out.String())



	//
	////执行命令行操作
	//command := exec.Command("cd", "/Users/fliter/rust-lab/hello-rust")
	////errC := command.Run()
	////if errC != nil{
	////	fmt.Println(errC.Error(),errC)
	////}
	//
	//var out bytes.Buffer
	//var stderr bytes.Buffer
	//command.Stdout = &out
	//command.Stderr = &stderr
	//errC := command.Run()
	//if errC != nil {
	//	fmt.Println(fmt.Sprint(errC) + ": " + stderr.String())
	//	return
	//}
	//fmt.Println("Result: " + out.String())
	//
	//command1 := exec.Command("git", "add", "-A")
	////errC1 := command1.Run()
	////if errC1 != nil{
	////	fmt.Println(errC1.Error())
	////}
	//
	//var out1 bytes.Buffer
	//var stderr1 bytes.Buffer
	//command1.Stdout = &out1
	//command1.Stderr = &stderr1
	//errC1 := command1.Run()
	//if errC1 != nil {
	//	fmt.Println(fmt.Sprint(errC1) + ": " + stderr1.String())
	//	return
	//}
	//fmt.Println("Result: " + out1.String())
	//
	//
	//command2 := exec.Command("git", "commit", "-m", "add new code")
	////errC2 := command2.Run()
	////if errC2 != nil {
	////	fmt.Println(errC2.Error())
	////}
	//
	//var out2 bytes.Buffer
	//var stderr2 bytes.Buffer
	//command2.Stdout = &out2
	//command2.Stderr = &stderr2
	//errC2 := command2.Run()
	//if errC2 != nil {
	//	fmt.Println(fmt.Sprint(errC2) + ": " + stderr2.String())
	//	return
	//}
	//fmt.Println("Result: " + out2.String())
	//
	//
	//time.Sleep(2e9)
	//
	//command3 := exec.Command("git", "push", "-f")
	////errC3 := command3.Run()
	////if errC3 != nil {
	////	fmt.Println(errC3.Error())
	////}
	//
	//var out3 bytes.Buffer
	//var stderr3 bytes.Buffer
	//command3.Stdout = &out3
	//command3.Stderr = &stderr3
	//errC3 := command3.Run()
	//if errC3 != nil {
	//	fmt.Println(fmt.Sprint(errC3) + ": " + stderr3.String())
	//	return
	//}
	//fmt.Println("Result: " + out3.String())
	//
	//
	//
	//command30 := exec.Command("rm", "Cargo.lock")
	////errC3 := command3.Run()
	////if errC3 != nil {
	////	fmt.Println(errC3.Error())
	////}
	//
	//var out30 bytes.Buffer
	//var stderr30 bytes.Buffer
	//command30.Stdout = &out30
	//command30.Stderr = &stderr30
	//errC30 := command30.Run()
	//if errC30 != nil {
	//	fmt.Println(fmt.Sprint(errC30) + ": " + stderr30.String())
	//	return
	//}
	//fmt.Println("Result: " + out30.String())
	//
	//
	//
	//
	//
	//command4 := exec.Command("cargo", "publish")
	////errC4 := command4.Run()
	////if errC4 != nil {
	////	fmt.Println(errC4.Error())
	////}
	//
	//var out4 bytes.Buffer
	//var stderr4 bytes.Buffer
	//command4.Stdout = &out4
	//command4.Stderr = &stderr4
	//errC4 := command4.Run()
	//if errC4 != nil {
	//	fmt.Println(fmt.Sprint(errC4) + ": " + stderr4.String())
	//	return
	//}
	//fmt.Println("Result: " + out4.String())

}

func WriteToFile(fileName string, content string) error {
	f, err := os.OpenFile(fileName, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0644)
	if err != nil {
		fmt.Println("file create failed. err: " + err.Error())
	} else {
		// offset
		//os.Truncate(filename, 0) //clear
		n, _ := f.Seek(0, os.SEEK_END)
		_, err = f.WriteAt([]byte(content), n)
		//fmt.Println("write succeed!")
		defer f.Close()
	}
	return err
}

func TestEncodeRoundTrip() {
	type Config struct {
		Age        int
		Cats       []string
		Pi         float64
		Perfection []int
		DOB        time.Time
		Ipaddress  net.IP
	}

	var inputs = Config{
		Age:        13,
		Cats:       []string{"one", "two", "three"},
		Pi:         3.145,
		Perfection: []int{11, 2, 3, 4},
		DOB:        time.Now(),
		Ipaddress:  net.ParseIP("192.168.59.254"),
	}

	var (
		firstBuffer  bytes.Buffer
		secondBuffer bytes.Buffer
		outputs      Config
	)
	err := toml.NewEncoder(&firstBuffer).Encode(inputs)
	if err != nil {
		fmt.Println("err:", err)
	}
	_, err = toml.Decode(firstBuffer.String(), &outputs)
	if err != nil {
		fmt.Println("err:", err)
	}
	err = toml.NewEncoder(&secondBuffer).Encode(outputs)
	if err != nil {
		fmt.Println("err:", err)
	}
	if firstBuffer.String() != secondBuffer.String() {
		fmt.Println("err:", err)
	}

	fmt.Println(firstBuffer.String())

}