2016-12-28 25 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ゴランのコマンドライン引数を受け取る方法 –

答えて

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

実際に私のスクリプトを実行すると、1つのファイルが作成され、md5とuuidが生成され、複数のmd5とuuidを生成するために複数のファイルを生成します。コマンドライン引数を与えるときの意味5では、すべての異なるmd5とuuidを持つ5つのファイルを作成する必要があります。 –

関連する問題