草庐IT

go - 为什么我说 8 时 Golang 不给我 8 个字节?

我认为x:=make([]byte,N)应该定义一个N字节的片段。我得到0x015f82a975f9752b作为输出,在base2中是:000101011111100000101010100101110101111110010111010100101011不是8。我错过了什么?请参阅下面的genSalt()函数及其输出。packagemainimport("crypto/rand""crypto/sha256""fmt""golang.org/x/crypto/pbkdf2""log")//generateasaltwithNrandombytesfuncgenSalt()[]byte

go - 除非 EOF,否则只读取 n 个字节?

我正在使用返回io.Reader的函数从Internet下载文件。我想以正好2048个block的形式处理文件,直到由于EOF而不再可能。io.ReadFull函数几乎就是我想要的:buf:=make([]byte,2048)for{if_,err:=io.ReadFull(reader,buf);err==io.EOF{returnio.ErrUnexpectedEOF}elseiferr!=nil{returnerr}//Doprocessingonbuf}问题在于并非所有文件都是2048字节的倍数,因此最后一个block可能只是例如500字节,io.ReadFull将因此返回Er

java - 缺少前 16 个字符 - Java AES CBC 加密和 golang 解密

我使用以下代码在Java中加密和解密数据。加密和解密工作正常。importjavax.crypto.Cipher;importjavax.crypto.SecretKey;importjavax.crypto.spec.IvParameterSpec;importjavax.crypto.spec.SecretKeySpec;importjavax.xml.bind.DatatypeConverter;importjava.security.SecureRandom;publicclassMainNew{publicstaticvoidmain(String[]args)throwsE

go - 如何在 Golang 中删除大文件的前 N ​​个字节?

这个问题在这里已经有了答案:deletefirstNbytesfromatextfile(1个回答)关闭4年前。我有一个大约10G的大文件,我想删除这个文件的前10个字节。如果我使用ioutil.ReadFile(),整个文件将被分配到内存中。这是不可能的!另一个想法是我逐行读取这个文件。删除数据后,我应该逐行写入剩余数据。这样可以节省内存,但有没有更好的办法呢?喜欢拆分阅读器还是拆分文件?

struct - golang 2个 slice 类型,1个字段

鉴于golang不支持union,最好的实现方式是什么:typefoostruct{words[]stringnums[]int}这样一次只能使用words或nums。我试过的一件事是:typefoostruct{values[]interface{}}但我更喜欢将类型限制为所提到的两个或带有指针的东西。 最佳答案 使用foo包来隐藏实现。例如,packagefooconst(typeWords=iota+1typeNums)typeFoostruct{fooTypebytewords[]stringnums[]int}funcNe

go - 无法在 Go 中读取大于 1024 个字符的输入

我正在使用fmt.Scanf读取Golang中的字符串输入。但是当我们传入大量输入(>1024个字符)时,命令会停止。我使用的是Go版本go1.8.3darwin/amd64。这是代码packagemainimport"fmt"funcmain(){varsstringfmt.Scanf("%s",&s)fmt.Println(s)}这是失败的负载https://pastebin.com/raw/fJ4QAZUZGo似乎在标记1024个字符的有效载荷中接受输入直到Jy。那么1024是一个限制还是什么?PS-我已经在那个链接上篡改了编码的cookie,所以不用担心。

regex - 替换字符串中除最后 4 个字符外的所有字符

使用Go,如何将字符串中除最后4个字符之外的所有字符替换为“X”?这适用于php/javascript但不适用于golang,因为不支持“?=”。\w(?=\w{4,}$)试过了,还是不行。我找不到任何类似的golang(\w)(?:\w{4,}$)JavaScriptworkinglinkGonon-workinglink 最佳答案 处理多UTF-8字节字符的一个简单而有效的解决方案是将string转换为[]rune,用'X'覆盖runes(最后4个除外),然后转换回string。funcmaskLeft(sstring)stri

go - 在 Go 中使用 conn.Read() 读取前几个字节后,如何继续读取剩余字节?

我正在尝试从Go中的tcp连接读取数据。我有一个特定的标题格式,我试图首先解析。所以读取前12个字节,其中包含与header关联的信息。这告诉我剩余的消息长度是一定数量的字节。在本例中为1607字节。我在读取header字节的地方尝试了以下代码,然后尝试读取剩余的字节。import("net"log"github.com/sirupsen/logrus""bytes""encoding/binary")funchandleRequest(connnet.Conn){//StructstomakeheaderparsingeasierstypeencapSTHdrMsgTypeuint1

string - 如何从 Go 中的字符串中替换第 n 个字符

我想替换原字符串中的第n个字符。我可以使用chars[i]访问字符串中的第n个字符,但是当我为chars[i]赋值时,出现错误。packagemainimport"fmt"funcmain(){varchars="abcdef"fmt.Println(string(chars[3]))chars[3]="z"//isnotworking} 最佳答案 字符串是不可变的。chars=chars[:3]+"z"+chars[4:] 关于string-如何从Go中的字符串中替换第n个字符,我们在

git - 在 SourceTree 中将提交消息主题保持在 50 个字符以下

在从Hg迁移到Git的过程中,我也在复习提交消息的编写。我发现关于Git行长度的常见建议是:第一行/主题行最多50个字符;后续行最多72个字符。我目前的大部分Git工作都是使用SourceTree完成的。我意识到上面的1和2只是典型的建议,而不是规则。但是,无论它们的状态如何,我都想让SourceTree帮助我同时遵循这两个建议。为此,我启用了以下设置:☑Usefixed-widthfontforcommitmessages☑Displayacolumnguideincommetmessageat[72]characters但是,这仅对第一条指南提供有限的支持(主题行在SourceTr