golang 对字符串按照长度划分,每隔固定长度增加一个指定字符,传参修改对比返回值修改的典型优势

func split(key string,temp *string){
    if len(key)<=64 {
        *temp = *temp+key+"\n"
    }
    for i:=0;i<len(key);i++{
        if (i+1)%64==0{
            *temp = *temp+key[:i+1]+"\n"
            fmt.Println(len(*temp)-1)
            key = key[i+1:]
            split(key,temp)
            break
        }
    }
}

可以根据需要,把\n和64,修改成指定字符和指定长度,也可以写进形参数里,这里懒得改了,这里的业务场景是,对不具备头尾以及换行符的rsa 公钥//私钥 进行切割。

这里如果想要通过返回值的方式来split,只能定义一个全局变量temp,逐步切割吞吐给temp,而这显然不符合对象化的思想,即在一个工具包里,有var temp 这样的状态量.
还有一个大坑就是,可能写成:

for _,v:=range key{
key = key[0:i]+"\n"+key[i+1,:]
}

这样的话,这个for的key每次迭代都会变长,会出现越界错误,
所以用指针参数,就能达到伪全局变量效果
贴一下rsa 处理不带头尾public和private key的全部代码

...
func TestFormateKey(t *testing.T)  {
    rs := formatKey("MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDZsfv1qscqYdy4vY+P4e3cAtmvppXQcRvrF1cB4drkv0haU24Y7m5qYtT52Kr539RdbKKdLAM6s20lWy7+5C0DgacdwYWd/7PeCELyEipZJL07Vro7Ate8Bfjya+wltGK9+XNUIHiumUKULW4KDx21+1NLAUeJ6PeW+DAkmJWF6QIDAQAB", 1, true)

    t.Log(rs)
}
...
...
//key是否具有头尾换行不交由程序判断
//keyType=1,为key增加头尾,并每间隔64位换行
//ifPublic true 为公钥, false为私钥
//keyType=0,不变
func formateKey(key string, keyType int, ifPublic bool) string {
    if keyType == 0 {
        return key
    }
    if ifPublic {
        var publicHeader = "\n-----BEGIN PUBLIC KEY-----\n"
        var publicTail = "-----END PUBLIC KEY-----\n"
        var temp string
        split(key,&temp)
        return publicHeader+temp+publicTail
    }else{
        var publicHeader = "\n-----BEGIN RSA PRIVATE KEY-----\n"
        var publicTail = "-----END RSA PRIVATE KEY-----\n"
        var temp string
        split(key,&temp)
        return publicHeader+temp+publicTail
    }
}

func split(key string,temp *string){
    if len(key)<=64 {
        *temp = *temp+key+"\n"
    }
    for i:=0;i<len(key);i++{
        if (i+1)%64==0{
            *temp = *temp+key[:i+1]+"\n"
            fmt.Println(len(*temp)-1)
            key = key[i+1:]
            split(key,temp)
            break
        }
    }
}
...
结果:
    -----BEGIN PUBLIC KEY-----
        MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDZsfv1qscqYdy4vY+P4e3cAtmv
        ppXQcRvrF1cB4drkv0haU24Y7m5qYtT52Kr539RdbKKdLAM6s20lWy7+5C0Dgacd
        wYWd/7PeCELyEipZJL07Vro7Ate8Bfjya+wltGK9+XNUIHiumUKULW4KDx21+1NL
        AUeJ6PeW+DAkmJWF6QIDAQAB
        -----END PUBLIC KEY-----

猜你喜欢

转载自blog.csdn.net/fwhezfwhez/article/details/80058569