go demo小结

时间:2025-02-20 17:54:42
go常用demo小结

/*
 * 使用命令行参数输入 另一种flag随后补充
 */
package main

import (
	"fmt"
	"os"
	"reflect"
	"strconv"
)

var Usage = func() {
	("USAGE: calc command [arguments] ...")
	("\nThe commands are:\n\tadd\tAddition of two values.\n\tsqrt\tSquare root of a non-negative value.")
}

func main() {
	args := 
	if args == nil || len(args) < 2 {
		Usage()
		return
	}
	("args[0] = ", args[0])
	("args[1] = ", args[1])

	args2, _ := (args[2])
	("args2 = ", args2, (args2))

	if args[1] == "out" {

		a := 5
		("a", a)
	}

	//("a", a) //a :作用域只是在if中
}


/*
 *byte_to_int.go 整形转换成字节 字节转换成整形
 */
package main

import (
	"bytes"
	"encoding/binary"
	"fmt"
	"reflect"
)

//整形转换成字节
func IntToBytes(n int) []byte {
	tmp := int32(n)
	bytesBuffer := ([]byte{})
	(bytesBuffer, , &tmp)
	return ()
}

//字节转换成整形
func BytesToInt(b []byte) int {
	bytesBuffer := (b)
	var tmp int32
	(bytesBuffer, , &tmp)
	return int(tmp)
}

func main() {

	a := 128
	b := IntToBytes(a)
	("b = ", b, len(b), (b))

	var c = []byte{0x00, 0x00, 0x00, 0x08}
	d := BytesToInt(c)
	("d = ", d, (d))

	(c, string(c))

}


/*
 * 多个[]byte数组合并成一个[]byte
 */
package main

import (
	"bytes"
	"fmt"
	"reflect"
)

//BytesCombine 多个[]byte数组合并成一个[]byte
func BytesCombine(pBytes ...[]byte) []byte {
	len := len(pBytes)
	s := make([][]byte, len)
	for index := 0; index < len; index++ {
		s[index] = pBytes[index]
	}
	sep := []byte("")
	return (s, sep)
}

//BytesCombine 多个[]byte数组合并成一个[]byte
func PlusBytesCombine(pBytes ...[]byte) []byte {
	return (pBytes, []byte(""))
}

func main() {
	var a = []byte{1, 2, 3, 4}
	var b = []byte{1, 2, 3, 4}
	var c = []byte{1, 2, 3, 4}

	(a, b, c)

	d := BytesCombine(a, b, c)
	(d)

	e := PlusBytesCombine(a, b, c)
	("e =", e, (e))
}


/*
 * 压缩 解压[]byte
 */
package main

import (
	"bytes"
	"compress/zlib"
	"fmt"
	"io/ioutil"
)

//压缩byte
func ZipBytes(input []byte) []byte {
	var buf 
	compressor, err := (&buf, )
	if err != nil {
		return input
	}
	(input)
	()
	return ()
}

//解压byte
func UnzipBytes(input []byte) []byte {
	b := (input)
	r, err := (b)
	defer ()
	if err != nil {
		panic(err)
	}
	data, _ := (r)
	return data
}

func main() {
	var input = []byte("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKsAAAAgCAYAAABtn4gCAAAI9klEQVR4Xu2cfYxcVRmHn3Pu3Nm6lXa2ta0AYlsgFSGgThMU0W5hGkqApNGARk3cGm3BRN3FYGuCISrBXaNphcSkG2I3hn9gY2gSNWq32AoE1C6KRihFti2QSgvsTmm783HvOa+zM69cSS8Tacsq7n2SX87cj5P7ZvLs2ztnbseICG8HMjIsbxMyMnIoxhja8fJnriuYMNdjOsIVNhd0Y0wBRbxH6nHZ16OdUot2iXNDC3/2mzJtOImOnpHJ2p4Xr13ZkDTYJLHrwRgw4L1gAptIFzt87AoSuzXi/BqJ3KZ/XL1iSGLXd9aOh8u81WRksh5cefmUeFuBgmBABHEeEziwBrUVvCCxayWaSow419MY17zw4eVrz3ls9zbeKjIyWV+4bPkmiVyvCtnqps6Bta2uahJZxQs4jziHxP7fxS1I7B947tJLN5/7xBN9tIeN37yNN0EXME6LecAEGfR/746ZJeuBSy9RUVsiGucxsYPAYuxUzOtlFQEniG8JS+xRaTW+d/+y97P46Sf7yMg4")
	zipInput := ZipBytes(input)
	("input =", len(input))
	("zipIput =", len(zipInput))

	UnZipOut := UnzipBytes(zipInput)
	("UnZipOut =", UnZipOut, "\n", len(UnZipOut))

}


/*
 * base64编码 解码
 */
 package main

import (
	"encoding/base64"
	"fmt"
	"reflect"
)

func main() {
	input := []byte("hello golang base64 快乐编程http:// +~")

	// 演示base64编码 输入类型:[]byte类型 输出类型:string类型
	encodeString := (input)
	(encodeString, (encodeString))

	// 对上面的编码结果进行base64解码 输入类型:string类型 输出类型:[]byte类型
	decodeBytes, err := (encodeString)
	if err != nil {
		panic(err)
	}
	(string(decodeBytes), (decodeBytes))
}


/*
 *gen_rsakey.go 产生rsa公私钥
 */
 package main

import (
	"crypto/rand"
	"crypto/rsa"
	"crypto/x509"
	"encoding/pem"
	"flag"
	"log"
	"os"
)

func main() {
	var bits int
	(&bits, "b", 1024, "密钥长度,默认为1024位")
	if err := GenRsaKey(bits); err != nil {
		("密钥文件生成失败!")
	}
	("密钥文件生成成功!")
}

func GenRsaKey(bits int) error {
	// 生成私钥文件
	privateKey, err := (, bits)
	if err != nil {
		return err
	}
	derStream := x509.MarshalPKCS1PrivateKey(privateKey)
	block := &{
		Type:  "私钥",
		Bytes: derStream,
	}
	file, err := ("vgate_private.pem")
	if err != nil {
		return err
	}
	err = (file, block)
	if err != nil {
		return err
	}
	// 生成公钥文件
	publicKey := &
	derPkix, err := (publicKey)
	if err != nil {
		return err
	}
	block = &{
		Type:  "公钥",
		Bytes: derPkix,
	}
	file, err = ("vgate_public.pem")
	if err != nil {
		return err
	}
	err = (file, block)
	if err != nil {
		return err
	}
	return nil
}


/*
 * rsa示例
 */
package main

import (
	"crypto"
	"crypto/rand"
	"crypto/rsa"
	"crypto/x509"
	"encoding/hex"
	"encoding/pem"
	"errors"
	"fmt"
	"io/ioutil"
	"os"

	"reflect"
)

var privateKey, publicKey []byte

func init() {
	var err error
	publicKey, err = ("")
	if err != nil {
		(-1)
	}
	privateKey, err = ("")
	if err != nil {
		(-1)
	}
}

func main() {
	var data []byte
	var err error
	data, err = RsaEncrypt([]byte("hello world"))
	if err != nil {
		panic(err)
	}
	(string(data))
	origData, err := RsaDecrypt(data)
	if err != nil {
		panic(err)
	}
	(string(origData))

	src := "test sign"
	signData, err := RsaSign([]byte(src), crypto.MD5)
	if err != nil {
		panic(err)
	}
	sign := (signData)
	("signData type:", (signData))
	("sign type:", (sign))
	(sign)
	(len(sign))
	(len(signData))

	signB, err := (sign)

	err = RsaVerify([]byte(src), signB, crypto.MD5)
	if err != nil {
		panic(err)
	}
	("verify success")
}

// Rsa加密
func RsaEncrypt(origData []byte) ([]byte, error) {
	block, _ := (publicKey)
	if block == nil {
		return nil, ("public key error")
	}
	pubInterface, err := ()
	if err != nil {
		return nil, err
	}
	pub := pubInterface.(*)
	return rsa.EncryptPKCS1v15(, pub, origData)
}

// Rsa解密
func RsaDecrypt(ciphertext []byte) ([]byte, error) {
	block, _ := (privateKey)
	if block == nil {
		return nil, ("private key error!")
	}
	priv, err := x509.ParsePKCS1PrivateKey()
	if err != nil {
		return nil, err
	}
	return rsa.DecryptPKCS1v15(, priv, ciphertext)
}

//Rsa签名
func RsaSign(src []byte, hash ) ([]byte, error) {
	block, _ := (privateKey)
	if block == nil {
		return nil, ("private key error!")
	}
	priv, err := x509.ParsePKCS1PrivateKey()
	if err != nil {
		return nil, err
	}

	h := ()
	(src)
	hashed := (nil)
	return rsa.SignPKCS1v15(, priv, hash, hashed)
}

//Rsa验签
func RsaVerify(src []byte, sign []byte, hash ) error {
	block, _ := (publicKey)
	if block == nil {
		return nil
	}
	pubInterface, err := ()
	if err != nil {
		return nil
	}
	pub := pubInterface.(*)

	h := ()
	(src)
	hashed := (nil)
	return rsa.VerifyPKCS1v15(pub, hash, hashed, sign)
}


/*
 * aes示例
 */
 package main

import (
	"crypto/aes"
	"crypto/cipher"
	"fmt"
)

type AesEncrypt struct {
}

//加密字符串 输入类型:string 返回类型:[]byte
func (this *AesEncrypt) Encrypt(key []byte, strMesg string) ([]byte, error) {

	var iv = []byte(key)[:]
	encrypted := make([]byte, len(strMesg))
	aesBlockEncrypter, err := (key)
	if err != nil {
		return nil, err
	}
	aesEncrypter := (aesBlockEncrypter, iv)
	(encrypted, []byte(strMesg))
	return encrypted, nil
}

//解密字符串 输入类型:[]byte  返回类型:string
func (this *AesEncrypt) Decrypt(key []byte, src []byte) (strDesc string, err error) {
	defer func() {
		//错误处理
		if e := recover(); e != nil {
			err = e.(error)
		}
	}()

	var iv = []byte(key)[:]
	decrypted := make([]byte, len(src))
	var aesBlockDecrypter 
	aesBlockDecrypter, err = ([]byte(key))
	if err != nil {
		return "", err
	}
	aesDecrypter := (aesBlockDecrypter, iv)
	(decrypted, src)
	return string(decrypted), nil
}

func main() {
	aesEnc := AesEncrypt{}
	key := "1234567890123456"

	arrEncrypt, err := ([]byte(key), "0123456789abcdef123")
	if err != nil {
		(arrEncrypt)
		return
	}
	(arrEncrypt)

	strMsg, err := ([]byte(key), arrEncrypt)
	if err != nil {
		(arrEncrypt)
		return
	}
	(strMsg)
}


/*
 * md5示例
 */
package main

import (
	"crypto/md5"
	"encoding/hex"
	"fmt"
)

type MD5Client struct {
}

var MD5 = MD5Client{}

func (this *MD5Client) Encrypt(plantext []byte) []byte {
	result := (plantext)
	return result[:]
}

func main() {
	sum := ([]byte(`红薯鸭`))
	("sum is:", sum)

	sumStr := (sum)

	("sumStr is:", sumStr)
}