- 主题:求指路:udp发送固定长度sring
写完了, 感谢指路
部分关键代码
import (
"encoding/binary"
)
buff := bytes.NewBuffer([]byte{})
var abc int32
abc = 7777
err = binary.Write(buff, binary.BigEndian, &abc)
if err != nil {
log.Panic(err)
}
content := "abcdefg"
err = binary.Write(buff, binary.BigEndian, []byte(content))
if err != nil {
log.Panic(err)
}
var zeroByte uint8
/* fixed length 27 bytes */
end := 27 - len(content)
for i := 1; i <= end; i++ {
err = binary.Write(buff, binary.BigEndian, &zeroByte)
if err != nil {
log.Panic(err)
}
}
sendBuff := buff.Bytes()
_, err = socket.Write(sendBuff) // 发送数据
if err != nil {
fmt.Println("发送数据失败,err: ", err)
return
}
【 在 flw 的大作中提到: 】
: 你这里的 test.abc = 5 最好改成 test.abc = htons(5),
: 然后 Go 这边你用 encoding/binary 就可以读了,参见:
: $ go doc encoding/binary.Read
: ...................
--
修改:lioncat7 FROM 106.120.101.*
FROM 106.120.101.*
27 bytes 那里可以简化一下,
直接用 bytes.Repeat 生成个切片发出去就好了,类似于 memset:
$ go doc bytes.Repeat
package bytes // import "bytes"
func Repeat(b []byte, count int) []byte
Repeat returns a new byte slice consisting of count copies of b.
It panics if count is negative or if the result of (len(b) * count)
overflows.
【 在 lioncat7 (lioncat) 的大作中提到: 】
: 写完了, 感谢指路
: 部分关键代码
: import (
: "encoding/binary"
: )
: buff := bytes.NewBuffer([]byte{})
: var abc int32
: abc = 7777
: err = binary.Write(buff, binary.BigEndian, &abc)
: if err != nil {
: log.Panic(err)
: }
: content := "abcdefg"
: err = binary.Write(buff, binary.BigEndian, []byte(content))
: if err != nil {
: log.Panic(err)
: }
: var zeroByte uint8
: /* fixed length 27 bytes */
: end := 27 - len(content)
: for i := 1; i <= end; i++ {
: err = binary.Write(buff, binary.BigEndian, &zeroByte)
: if err != nil {
: log.Panic(err)
: }
: }
: sendBuff := buff.Bytes()
: _, err = socket.Write(sendBuff) // 发送数据
: if err != nil {
: fmt.Println("发送数据失败,err: ", err)
: return
: }
--
FROM 27.38.197.*
第一次写go,[]byte(zeroByte)这块说无法转换
var zeroByte uint8
repeateTime := 27 - len(incoming.SrcAddr)
if repeateTime != 0 {
binary.Write(buff, binary.BigEndian, bytes.Repeat([]byte(zeroByte), repeateTime))
}
【 在 flw 的大作中提到: 】
: 27 bytes 那里可以简化一下,
: 直接用 bytes.Repeat 生成个切片发出去就好了,类似于 memset:
: $ go doc bytes.Repeat
: ...................
--
FROM 106.120.101.*
type byte = uint8
直接用byte就可以了,不需要用uint8
【 在 lioncat7 (lioncat) 的大作中提到: 】
: 第一次写go,[]byte(zeroByte)这块说无法转换
: var zeroByte uint8
: repeateTime := 27 - len(incoming.SrcAddr)
: ...................
--
FROM 123.122.161.*
解决了
repeateTime := 27 - len(incoming.SrcAddr)
if repeateTime != 0 {
binary.Write(buff, binary.BigEndian, bytes.Repeat([]byte{0}, repeateTime))
}
另外请问下 我只过了一遍 the go programming language
如果想快速过一下go都提供了哪些基础库 有什么推荐么
【 在 flw 的大作中提到: 】
: 27 bytes 那里可以简化一下,
: 直接用 bytes.Repeat 生成个切片发出去就好了,类似于 memset:
: $ go doc bytes.Repeat
: ...................
--
FROM 106.120.101.*
直接看手册,甚至看源码
有几个实用的命令,给你介绍一下。假设你用的是 Go 的较新版本,那么:
$ GO111MODULE=off GOPATH=$(go env GOROOT) go list all
就可以看到所有的标准库,相应的源代码就在 cd $(go env GOROOT)/src 下面,
然后你再用:
$ GO111MODULE=off go doc encoding/binary
就可以看到每个模块的文档,进一步关于 API 的文档也是可以看到的,
你自己 go help doc 了解一下
我为了方便起见,把上面的命令封装了一个别名,特别好用:
$ alias golist='GO111MODULE=off GOPATH=$(go env GOROOT) cachecmd -async -ttl=100000m -key="golist" go list all 2>/dev/null | grep -v "vendor\|internal\|example" | fzf --preview "go doc {}" --bind "enter:execute:(go doc {}) | less" --bind "ctrl-f:page-down" --bind "ctrl-b:page-up"'
命令比较复杂,主要是:
* 使用 go list all 来获取所有的模块列表
* 使用 go doc 来查看模块文档
* 使用 cachecmd 来加速 go list all
* 使用 fzf 来预览列表、过滤列表和快速补全,以及预览文档内容
希望对版友有所帮助。
BTW:刚想起来其实还有个 web 版的工具,好像叫 godoc 什么的,但似乎新版本已经移除了,
官网的文档也是这个 godoc 生成的,但因为在墙外再加上我喜欢看 term 所以就没折腾本地的 godoc
印象中 godoc 里的内容还是很全的,自己安装的第三方包也都会生成文档。
【 在 lioncat7 (lioncat) 的大作中提到: 】
: 解决了
: repeateTime := 27 - len(incoming.SrcAddr)
: if repeateTime != 0 {
: binary.Write(buff, binary.BigEndian, bytes.Repeat([]byte{0}, repeateTime))
: }
: 另外请问下 我只过了一遍 the go programming language
: 如果想快速过一下go都提供了哪些基础库 有什么推荐么
--
修改:flw FROM 27.38.197.*
FROM 27.38.197.*
谢谢
【 在 flw 的大作中提到: 】
: 直接看手册,甚至看源码
: 有几个实用的命令,给你介绍一下。假设你用的是 Go 的较新版本,那么:
: $ GO111MODULE=off GOPATH=$(go env GOROOT) go list all
: ...................
--
FROM 106.120.101.*