分享
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
要把一个string赋值给一个array,哥哥遇到一个纠结的困难,研究一番,发现主要原因是array和slice在golang里不是一个东西,本文提供两种解决方案。
在网络编程中network packet transfer,经常要定义固定的字节长度,如下面的f1:
package main
import"fmt"
type T1 struct{
f1 [5]byte// I use fixed size here for file format or network packet format.
f2 int32
}
func main(){
t := T1{"abcde",3}// t:= T1{[5]byte{'a','b','c','d','e'}, 3} // work, but ugly
fmt.Println(t)}
prog.go:8: cannot use "abcde" (type string) as type [5]uint8 in field value
if I change the line to t := T1{[5]byte("abcde"), 3}
prog.go:8: cannot convert "abcde" (type string) to type [5]uint8
直接用copy(t.f1,"abcde")也是不行的。。因为copy的第一个参数必须是slice,
方案1:利用f1[:],注意,这里f1实际上是一个fixed的array,而f1[:]是一个slice
package main
import"fmt"
type T1 struct{
f1 [5]byte
f2 int}
func main(){
t := T1{f2:3}
copy(t.f1[:],"abcde")
fmt.Println(t)}
方案2:遍历赋值,不太优美:)
var arr [20]byte
str :="abc"for k, v := range []byte(str){
arr[k]=byte(v)}
the end.
有疑问加站长微信联系(非本文作者))
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信750 次点击
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传