Go 如何使用标志选择要调用的函数

Go 如何使用标志选择要调用的函数,go,flags,Go,Flags,您好,这是我第一次尝试编写一个实际的Go命令行程序,所以请原谅我从互联网上删除了一些代码。我实际上要做的是,在仍然能够选择src文件和dest文件的情况下,能够选择何时加密或解密。提前感谢您的帮助。我找不到任何确凿的证据来解释这一点,或者至少找不到任何我能理解的东西 package main import ( "crypto/aes" "crypto/cipher" "crypto/rand" "errors" "io" "io/ioutil" "log" "os" ) func decry

您好,这是我第一次尝试编写一个实际的Go命令行程序,所以请原谅我从互联网上删除了一些代码。我实际上要做的是,在仍然能够选择src文件和dest文件的情况下,能够选择何时加密或解密。提前感谢您的帮助。我找不到任何确凿的证据来解释这一点,或者至少找不到任何我能理解的东西

package main

import (
"crypto/aes"
"crypto/cipher"
"crypto/rand"
"errors"
"io"
"io/ioutil"
"log"
"os"
)

func decrypt(key, ciphertext []byte) (plaintext []byte, err error) {

  var block cipher.Block

  if block, err = aes.NewCipher(key); err != nil {
      return
 }

  if len(ciphertext) < aes.BlockSize {
    err = errors.New("ciphertext too short")
    return
 }

  iv := ciphertext[:aes.BlockSize]
  ciphertext = ciphertext[aes.BlockSize:]

  cfb := cipher.NewCFBDecrypter(block, iv)
  cfb.XORKeyStream(ciphertext, ciphertext)

  plaintext = ciphertext

   return
 }

func encrypt(key, text []byte) (ciphertext []byte, err error) {

  var block cipher.Block

  if block, err = aes.NewCipher(key); err != nil {
      return nil, err
 }

  ciphertext = make([]byte, aes.BlockSize+len(string(text)))


  iv := ciphertext[:aes.BlockSize]
  if _, err = io.ReadFull(rand.Reader, iv); err != nil {
      return
 }

  cfb := cipher.NewCFBEncrypter(block, iv)
  cfb.XORKeyStream(ciphertext[aes.BlockSize:], text)

  return
 }

func encryptFileData(srcFile, destFile string) {
  if len(os.Args) > 1 {
      srcFile = os.Args[1]
  }
  if len(os.Args) > 2 {
      destFile = os.Args[2]
 }
  var cipherText, plainText []byte
  var err error



  key := []byte("abcdefg123456789")

  plainText, _ = ioutil.ReadFile(srcFile)
  if cipherText, err = encrypt(key, plainText); err != nil {
      log.Fatal(err)
  }
  ioutil.WriteFile(destFile, cipherText, 0755)

   return
  }

func decryptFileData(srcFile, destFile string) {
  if len(os.Args) > 1 {
      srcFile = os.Args[1]
  }
  if len(os.Args) > 2 {
      destFile = os.Args[2]
  }
  var cipherText, plainText []byte
  var err error

  key := []byte("abcdefg123456789")

  cipherText, _ = ioutil.ReadFile(srcFile)
  if plainText, err = decrypt(key, cipherText); err != nil {
      log.Fatal(err)
  }
  ioutil.WriteFile(destFile, plainText, 0755)

  return
  }

func main() {
  encryptFileData(os.Args[1], os.Args[2])
  decryptFileData(os.Args[1], os.Args[2])
}
主程序包
进口(
“加密/aes”
“加密/密码”
“加密/兰德”
“错误”
“io”
“io/ioutil”
“日志”
“操作系统”
)
func解密(密钥,密文[]字节)(明文[]字节,错误){
分组密码
如果是块,err=aes.NewCipher(key);err!=nil{
返回
}
如果len(密文)1{
srcFile=os.Args[1]
}
如果len(os.Args)>2{
destFile=os.Args[2]
}
var密文,明文[]字节
变量错误
键:=[]字节(“abcdefg123456789”)
纯文本,Util=ioutil.ReadFile(srcFile)
如果是密文,err=encrypt(密钥,明文);err!=nil{
log.Fatal(错误)
}
ioutil.WriteFile(destFile,密文,0755)
返回
}
func解密文件数据(srcFile,destFile字符串){
如果len(os.Args)>1{
srcFile=os.Args[1]
}
如果len(os.Args)>2{
destFile=os.Args[2]
}
var密文,明文[]字节
变量错误
键:=[]字节(“abcdefg123456789”)
密文,Util=ioutil.ReadFile(srcFile)
如果是明文,err=解密(密钥,密文);err!=nil{
log.Fatal(错误)
}
ioutil.WriteFile(destFile,明文,0755)
返回
}
func main(){
encryptFileData(os.Args[1],os.Args[2])
解密文件数据(os.Args[1],os.Args[2])
}
使用该软件包。例如:

func main() {
    encrypt := flag.Bool("encrypt", false, "encrypt file")
    decrypt := flag.Bool("decrypt", false, "decrypt file")
    flag.Parse()

    srcFile, destFile := flag.Arg(0), flag.Arg(1)
    if *encrypt {
        encryptFileData(srcFile, destFile)
    }

    if *decrypt {
        decryptFileData(srcFile, destFile)
    }
}
使用软件包。例如:

func main() {
    encrypt := flag.Bool("encrypt", false, "encrypt file")
    decrypt := flag.Bool("decrypt", false, "decrypt file")
    flag.Parse()

    srcFile, destFile := flag.Arg(0), flag.Arg(1)
    if *encrypt {
        encryptFileData(srcFile, destFile)
    }

    if *decrypt {
        decryptFileData(srcFile, destFile)
    }
}

这个包可能会有帮助。我试着看了看,我不知道需要做什么。如果我应该重写,或者如果我可以使用我已经拥有的东西。这个软件包可能会有帮助。我试图查看它,但我不知道需要做什么。如果我应该重写,或者如果我可以使用我已经拥有的。这个deff让我走上了实现我想要的目标的轨道。非常感谢你。这个deff让我走上了实现目标的轨道。非常感谢你。