要把一个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.

golang中赋值string到array的更多相关文章

  1. golang []byte和string的高性能转换

    golang []byte和string的高性能转换 在fasthttp的最佳实践中有这么一句话: Avoid conversion between []byte and string, since ...

  2. Javascript中String、Array常用方法介绍

    string和array作为javascript内置对象,其中许多方法无论是在开发过程中,还是在面试的时候都有机会被面试官问到,这里对经常用到的方法做一个介绍,这些方法都有过很多的实际应用场景,所以对 ...

  3. golang 中string和int类型相互转换

    总结了golang中字符串和各种int类型之间的相互转换方式: string转成int: int, err := strconv.Atoi(string)string转成int64: int64, e ...

  4. golang中Array与Slice

    在golang中有数组和Slice两种数据结构,Slice是基于数组的实现,是长度动态不固定的数据结构,本质上是一个对数组字序列的引用,提供了对数组的轻量级访问.那么在go的函数中以数组或Slice为 ...

  5. 说说不知道的Golang中参数传递

    本文由云+社区发表 导言 几乎每一个C++开发人员,都被面试过有关于函数参数是值传递还是引用传递的问题,其实不止于C++,任何一个语言中,我们都需要关心函数在参数传递时的行为.在golang中存在着m ...

  6. GoLang基础数据类型--->数组(array)详解

    GoLang基础数据类型--->数组(array)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Golang数组简介 数组是Go语言编程中最常用的数据结构之一.顾名 ...

  7. golang中,new和make的区别

    在golang中,make和new都是分配内存的,但是它们之间还是有些区别的,只有理解了它们之间的不同,才能在合适的场合使用. 简单来说,new只是分配内存,不初始化内存: 而make即分配又初始化内 ...

  8. 速战速决 (2) - PHP: 数据类型 bool, int, float, string, object, array

    [源码下载] 速战速决 (2) - PHP: 数据类型 bool, int, float, string, object, array 作者:webabcd 介绍速战速决 之 PHP 数据类型 boo ...

  9. golang中的reflect包用法

    最近在写一个自动生成api文档的功能,用到了reflect包来给结构体赋值,给空数组新增一个元素,这样只要定义一个input结构体和一个output的结构体,并填写一些相关tag信息,就能使用程序来生 ...

随机推荐

  1. classes system in sencha touch

    //http://www.sencha.com/learn/sencha-class-system var Person = new Ext.Class({ name: 'Mr. Unknown', ...

  2. writeToFile 读写文件问题

    关于 writeToFile 读写文件:当字典中键值对以 Model(例如:studentModel)为值时发现 Dictionary 调用 writeToFile 方法无法生成 plist 文件,经 ...

  3. Java之向左添加零(000001)

    int i_m = 270000 ; String str_m = String.valueOf(i_m); String str ="000000"; str_m=str.sub ...

  4. 聊聊 Statsd 和 Collectd 那点事!

    StatsD 是由 Etsy 开发并发布的汇总和总结应用指标的一个简单的守护进程,近些年来发展迅速,已经变成了一个用于收集应用性能指标的统一的协议. 关于 Statsd 的使用已经有很多文章介绍过,所 ...

  5. 解决Ubuntu root账户的问题

    问题的提出:在Linux环境下,许多操作需要有管理员权限才能进行.如果没有root权限,就连基本的文件拷贝操作都只能在用户文件夹下进行,而对于Ubuntu系统,安装时是没有设定root帐号的,那么怎样 ...

  6. Oracle11g密码区分大小写导致database link无法连接

    http://f.dataguru.cn/thread-128013-1-1.html Oracle11g的密码默认是区分大小写的,该特性通过初始化参数sec_case_sensitive_logon ...

  7. 如何让Activiti-Explorer使用sql server数据库

    从官网下载的Activiti-explorer的war文件内部默认是使用h2内存数据库的,如果想改用其他的数据库来做持久化,比如sql server,需要做如下配置. 1)修改db.propertie ...

  8. .NET事件的指导原则

    C#允许编写所需的各种类型的事件.但是,为了与.NET Framwork的组件相兼容,开发人员必须遵循微软为此建立的一系列指导原则.这些指导原则的核心是,事件处理程序必须拥有两个参数.第一个参数是一个 ...

  9. deque用法 和与vector的区别

    deque是双向开口的连续性存储空间.虽说是连续性存储空间,但这种连续性只是表面上的,实际上它的内存是动态分配的,它在堆上分配了一块一块的动态储存区,每一块动态存储去本身是连续的,deque自身的机制 ...

  10. JAVA线程优化

    Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了, ...