- 主题:go传string是值传递还是指针传递
要处理tcp报文,几千字节长
函数调用是传string 还是*string
--
FROM 106.120.101.*
传的是址
但是string的内容是immutable的
所以总之你也不会犯啥错。
【 在 lioncat7 (lioncat) 的大作中提到: 】
: 标 题: go传string是值传递还是指针传递
: 发信站: 水木社区 (Tue Dec 28 16:16:07 2021), 站内
:
: 要处理tcp报文,几千字节长
: 函数调用是传string 还是*string
: --
:
: ※ 来源:·水木社区
http://www.mysmth.net·[FROM: 106.120.101.*]
--
FROM 219.143.131.*
数据处理模块,穿的又是几千字节的
所以需要考虑效率
谢谢
【 在 Knightmare 的大作中提到: 】
: 传的是址
: 但是string的内容是immutable的
: 所以总之你也不会犯啥错。
: ...................
--
FROM 106.120.101.*
string类似slice,是一个结构体封装的。
传string的时候,传的是这个addr + len的结构体,传值传递。
string本身的payload是没有复制的。
【 在 lioncat7 (lioncat) 的大作中提到: 】
: 数据处理模块,穿的又是几千字节的
: 所以需要考虑效率
: 谢谢
: ...................
--
FROM 123.112.178.*
为啥不传[]byte ?
【 在 lioncat7 的大作中提到: 】
: 要处理tcp报文,几千字节长
: 函数调用是传string 还是*string
: --
:
发自「今日水木 on iPhone 12」
--
FROM 123.122.135.*
报文内容就是字符串 然后报文长度不固定 我们接收后需要根据特定字符split一个一个报文
请问一下split后的字符串,是重新分配的内存,还是只是对原来内存新位置的一个指针
【 在 laomanong 的大作中提到: 】
: 为啥不传[]byte ?
: 发自「今日水木 on iPhone 12」
--
FROM 222.128.160.*
应该还是指针。
反正 string 是只读的,所以编译器只要不是太傻的话肯定是尽量共享。
【 在 lioncat7 (lioncat) 的大作中提到: 】
: 报文内容就是字符串 然后报文长度不固定 我们接收后需要根据特定字符split一个一个报文
: 请问一下split后的字符串,是重新分配的内存,还是只是对原来内存新位置的一个指针
--
FROM 27.38.197.*
值传递
这个值有一个字段是指针
--
FROM 101.41.17.*
split后是重新生成的。如果用[]byte,可以在原始数据上进行修改
【 在 lioncat7 的大作中提到: 】
:
: 报文内容就是字符串 然后报文长度不固定 我们接收后需要根据特定字符split一个一个报文
: 请问一下split后的字符串,是重新分配的内存,还是只是对原来内存新位置的一个指针
: --
:
发自「今日水木 on iPhone 12」
--
FROM 123.122.135.*
哪里有重新生成? slice是共用的啊
func genSplit(s, sep string, sepSave, n int) []string {
if n == 0 {
return nil
}
if sep == "" {
return explode(s, n)
}
if n < 0 {
n = Count(s, sep) + 1
}
a := make([]string, n)
n--
i := 0
for i < n {
m := Index(s, sep)
if m < 0 {
break
}
a[i] = s[:m+sepSave]
s = s[m+len(sep):];
i++
}
a[i] = s
return a[:i+1]
}
【 在 laomanong (laomanong) 的大作中提到: 】
: split后是重新生成的。如果用[]byte,可以在原始数据上进行修改
: 发自「今日水木 on iPhone 12」
--
修改:atIE FROM 123.122.162.*
FROM 123.122.162.*