相关疑难解决方法(0)

如何在Go中生成固定长度的随机字符串?

我想在Go中只有一个随机字符串(大写或小写),没有数字.什么是最快最简单的方法?

string random go

270
推荐指数
9
解决办法
15万
查看次数

ResponseWriter.Write和io.WriteString有什么区别?

我已经看到了三种将内容写入HTTP响应的方法:

func Handler(w http.ResponseWriter, req *http.Request) {
    io.WriteString(w, "blabla.\n")
}
Run Code Online (Sandbox Code Playgroud)

和:

func Handler(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("blabla\n"))
}
Run Code Online (Sandbox Code Playgroud)

还有:

fmt.Fprintf(w, "blabla")
Run Code Online (Sandbox Code Playgroud)

他们之间有什么区别?哪一个更喜欢使用?

string http go slice

30
推荐指数
2
解决办法
2万
查看次数

[]字节(字符串)有多贵?

让我们转换string[]byte:

func toBytes(s string) []byte {
  return []byte(s) // What happens here?
}
Run Code Online (Sandbox Code Playgroud)

这个演员阵营有多贵?正在进行复制吗?就我在Go规范中看到的那样:字符串的行为类似于字节切片但是不可变,这至少应该涉及复制以确保后续切片操作不会修改我们的字符串s.反向对话会发生什么?[]byte <-> string会话是否涉及编码/解码,如utf8 < - >符文?

performance type-conversion go

19
推荐指数
2
解决办法
4258
查看次数

如何在golang中使用utf8将[]符号编码为[]字节?

所以很容易将a解码[]byte为a []rune(简单地转换为string,然后转换为[]rune非常好的工作,我假设它默认为utf8并且使用填充字节用于invalids).我的问题是 - 你怎么想把它解码[]rune[]byteutf8形式?

我错过了什么或者我是否已经为我的每一个符文手动调用EncodeRune[]rune?当然有一个编码器,我可以简单地传递Writer给.

string unicode utf-8 type-conversion go

16
推荐指数
1
解决办法
2万
查看次数

符文 vs 字节范围在字符串上

根据https://blog.golang.org/strings和我的测试,看起来当我们range是一个字符串时,我们得到的字符是rune类型,但是如果我们通过 获取它str[index],它们将是byte类型,这是为什么呢?

go rune

12
推荐指数
2
解决办法
2634
查看次数

字符串切片是否执行底层数据的复制?

我正在尝试string使用utf8库有效地计算 utf-8中的符文。此示例是否最佳,因为它不复制基础数据?
https://golang.org/pkg/unicode/utf8/#example_DecodeRuneInString

func main() {
    str := "Hello, ??" // let's assume a runtime-provided string
    for len(str) > 0 {
        r, size := utf8.DecodeRuneInString(str)
        fmt.Printf("%c %v\n", r, size)
        str = str[size:] // performs copy?
    }
}
Run Code Online (Sandbox Code Playgroud)

我在(不安全的)反射库中找到了StringHeader。这是stringGo中 a 的确切结构吗?如果是这样,可以想象,对字符串进行切片只是更新Data或分配一个新的字符串StringHeader

type StringHeader struct {
        Data uintptr
        Len  int
}
Run Code Online (Sandbox Code Playgroud)

奖励:在哪里可以找到执行string切片的代码,以便我可以自己查找?有这些吗?
https://golang.org/src/runtime/slice.go
https://golang.org/src/runtime/string.go

相关SO答案,从转化时表明运行时字符串招致拷贝string[]byte

string utf-8 go slice

6
推荐指数
1
解决办法
883
查看次数

类型转换在内部如何工作?相同的内存利用率是多少?

Go类型转换在内部如何工作?

类型转换的内存利用率是多少?例如:

var str1 string
str1 = "26MB string data"
byt := []byte(str1)
str2 := string(byt)
Run Code Online (Sandbox Code Playgroud)

每当我键入转换任何变量时,它将消耗更多的内存吗?

我对此很担心,因为当我尝试解组时,会出现“ 致命错误:运行时:内存不足

err = json.Unmarshal([]byte(str1), &obj)
Run Code Online (Sandbox Code Playgroud)

str1值来自HTTP响应,但使用ioutils.ReadAll读取,因此它包含完整的响应。

string type-conversion go slice

4
推荐指数
1
解决办法
634
查看次数

如何使用 unsafe 从没有内存复制的字符串中获取字节切片

我已经阅读了关于“ https://github.com/golang/go/issues/25484 ”关于从[]byteto 的无复制转换string

我想知道是否有办法将字符串转换为没有内存复制的字节片?

我正在编写一个处理 terra 字节数据的程序,如果每个字符串在内存中复制两次,则会减慢进度。而且我不关心可变/不安全,只关心内部使用,我只需要尽可能快的速度。

例子:

var s string
// some processing on s, for some reasons, I must use string here
// ...
// then output to a writer
gzipWriter.Write([]byte(s))  // !!! Here I want to avoid the memory copy, no WriteString
Run Code Online (Sandbox Code Playgroud)

所以问题是:有没有办法防止内存复制?我知道也许我需要 unsafe 包,但我不知道如何。我已经搜索了一段时间,直到现在还没有答案,SO 也没有显示相关的答案有效。

string performance go slice

4
推荐指数
4
解决办法
3321
查看次数

标签 统计

go ×8

string ×6

slice ×4

type-conversion ×3

performance ×2

utf-8 ×2

http ×1

random ×1

rune ×1

unicode ×1