2016-12-28 34 views
0

您好我已經在golang中生成了Md5和uuid,但現在我想使用命令行參數爲多個文件生成它,所以我到底該怎麼做。這是我已經生成我MD5和UUID:如何在golang中生成多個uuid和md5文件

package main 

import (
     "crypto/rand" 
     "crypto/md5" 
     "fmt" 
     "io" 
     "os" 
     "log" 
     "text/template" 
     ) 

type Data struct { 
    Uuid string 
    Md5 string 
} 

func main() { 

    uuid, err := newUUID() 
     if err != nil { 
      fmt.Printf("error: %v\n", err) 
     } 

    fmt.Printf("UUID: %s\n", uuid) 

     md5 := Getmd5(uuid) 

     fmt.Printf("Checksum: %s\n",md5) 

     fillData := Data{uuid, md5} 
    file, err := os.Create("text.txt") 
      if err != nil { 
       return 
      } 
      defer file.Close() 

    templ, err := template.ParseFiles("template.html") 
     if err !=nil{ 
      log.Fatalln(err) 
     } 
    err = templ.Execute(file,fillData) 
     if err != nil{ 
      log.Fatalln(err) 
     } 
} 

// newUUID generates a random UUID according to RFC 4122 
func newUUID() (string, error) { 
uuid := make([]byte, 16) 
      n, err := io.ReadFull(rand.Reader, uuid) 
      if n != len(uuid) || err != nil { 
       return "", err 
      } 
     // variant bits 
     uuid[8] = uuid[8]&^0xc0 | 0x80 
      // version 4 (pseudo-random) 
      uuid[6] = uuid[6]&^0xf0 | 0x40 
      return fmt.Sprintf("%x-%x-%x-%x-%x", uuid[0:4], uuid[4:6], uuid[6:8], uuid[8:10], uuid[10:]), nil 
} 

func Getmd5(uuid string) (string) { 
data := []byte(uuid) 
      //md5_buffer := fmt.Sprintf("%x", md5.Sum(data)) 
      md5_buffer := md5.Sum(data) 
      return fmt.Sprintf("{0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x};\n",md5_buffer[0:1], 
        md5_buffer[1:2],md5_buffer[2:3],md5_buffer[3:4],md5_buffer[4:5],md5_buffer[5:6],md5_buffer[6:7],md5_buffer[7:8], 
        md5_buffer[8:9],md5_buffer[9:10],md5_buffer[10:11],md5_buffer[11:12],md5_buffer[12:13],md5_buffer[13:14],md5_buffer[14:15], 
        md5_buffer[15:16]) 

} 

誰能幫助我嗎?

+1

你能表現出一些代碼,你已經嘗試過? –

+0

你能清楚你到底是什麼意思。你在問如何接受golang的命令行爭論? –

+0

是@Sarathsp如何在golang中接受命令行參數 –

回答

0

您可以使用os.Args接受命令行arguements

os.Args提供了直接訪問原始命令行參數。請注意,此片中的第一個值是程序的路徑,並且os.Args[1:]保存了程序的參數。

你的程序是這樣的,看看createFilegetNumberOfFiles功能和main

package main 

import (
    "crypto/md5" 
    "crypto/rand" 
    "errors" 
    "fmt" 
    "io" 
    "log" 
    "os" 
    "strconv" 
    "text/template" 
) 

type Data struct { 
    Uuid string 
    Md5 string 
} 

func createFile(uuid string) { 
    md5 := Getmd5(uuid) 
    fmt.Printf("Checksum: %s\n", md5) 
    fillData := Data{uuid, md5} 
    file, err := os.Create(uuid + ".txt") 
    if err != nil { 
     return 
    } 
    defer file.Close() 

    templ, err := template.ParseFiles("template.html") 
    if err != nil { 
     log.Fatalln(err) 
    } 
    err = templ.Execute(file, fillData) 
    if err != nil { 
     log.Fatalln(err) 
    } 
} 

func getNumberOfFiles() (num int, err error) { 
    if len(os.Args) == 1 { 
     return 0, errors.New("Not enough arguements") 
    } 
    if num, err = strconv.Atoi(os.Args[1]); err != nil { 
     return 
    } 
    return num, nil 
} 

func main() { 
    numberOfFiles, err := getNumberOfFiles() 
    if err != nil { 
     fmt.Println(err.Error()) 
    } 
    fmt.Printf("Creating %d files", numberOfFiles) 
    for i := 0; i < numberOfFiles; i++ { 
     uuid, err := newUUID() 
     if err != nil { 
      fmt.Printf("error: %v\n", err) 
     } 
     createFile(uuid) 
    } 
} 

// newUUID generates a random UUID according to RFC 4122 
func newUUID() (string, error) { 
    uuid := make([]byte, 16) 
    n, err := io.ReadFull(rand.Reader, uuid) 
    if n != len(uuid) || err != nil { 
     return "", err 
    } 
    // variant bits 
    uuid[8] = uuid[8]&^0xc0 | 0x80 
    // version 4 (pseudo-random) 
    uuid[6] = uuid[6]&^0xf0 | 0x40 
    return fmt.Sprintf("%x-%x-%x-%x-%x", uuid[0:4], uuid[4:6], uuid[6:8], uuid[8:10], uuid[10:]), nil 
} 

func Getmd5(uuid string) string { 
    data := []byte(uuid) 
    //md5_buffer := fmt.Sprintf("%x", md5.Sum(data)) 
    md5_buffer := md5.Sum(data) 
    return fmt.Sprintf("{0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x};\n", md5_buffer[0:1], 
     md5_buffer[1:2], md5_buffer[2:3], md5_buffer[3:4], md5_buffer[4:5], md5_buffer[5:6], md5_buffer[6:7], md5_buffer[7:8], 
     md5_buffer[8:9], md5_buffer[9:10], md5_buffer[10:11], md5_buffer[11:12], md5_buffer[12:13], md5_buffer[13:14], md5_buffer[14:15], 
     md5_buffer[15:16]) 

} 
+0

謝謝@Sarathsp這清除了如何使用命令行參數的想法,但它將如何幫助生成多個文件。 –

+0

我不清楚多個文件?現在您可以運行任何文件的腳本並獲得md5文件的總和。這不是你需要的嗎?如果不是,你需要什麼? –

+0

實際上,在運行我的腳本時,它會創建一個文件,並且會生成md5和uuid,現在我必須生成多個文件才能生成多個md5和uuid。意思是當我給命令行參數爲例如5然後應該創建5個文件與所有不同的md5和uuid。 –