好记性不如烂笔头o_O

 slice切片不会开辟新的空间

a := []int{0,1,2,3}
b := make([]int, 8)
b = a[:]
b[2] = 9
fmt.Println(a)
fmt.Println(b)
输出:
[0 1 9 3]
[0 1 9 3]

string底层是用byte数组存的,并且是不可以改变的。

可以用  k := []rune(string) rune等效int32  k := []byte(string) 提取出数据(存于新开辟的空间)。不能使用 []int 提取。

[]byte 跟 [7]byte不能相互赋值。当函数的参数是 [7]byte的时候,就不能将 k := make([]byte, 7) 当做形参传递进去,会编译报错;只能var k [7]byte。还有一个很重要的现象:

package main
import "fmt"
type T struct {
v []byte
c int
}
func main() {
var k = make([]byte, )
t := T{k, }
t.v[] =
fmt.Println(k)
fmt.Println(t)
}

输出:

[      ]
{[ ] }
package main
import "fmt"
type T struct {
v []byte
c int
}
func main() {
var k []byte
t := T{k, }
t.v[] =
fmt.Println(k)
fmt.Println(t)
}

输出:

[      ]
{[ ] }

说明 [7]byte将整个数据给复制过去了,而[]byte只是复制了数组的信息。


下面看看给string赋值

package main
import "fmt" func main() {
//var k []byte
var k1 = []byte{'a','b','c','d'} //s := string(k)
s1 := string(k1)
fmt.Println(s1)
}
输出:abcd

将上述代码注释去掉之后会编译报错。

可以总结出 string 与 []byte之间可以相互强制类型转换。[]rune也可以,不过rune是int32的别名,当里面的一个单元存储的是中文字的时候,转换成string会占用3个字节。

golang中string以及slice之间的一些问题的更多相关文章

  1. C#中String 与Color之间的相互转换

    C#中String 与Color之间的相互转换 ————————————宋兴柱     其实,我们平常如果要在数据库存放Color类型值的话,肯定会在数据库中建立varchar类型.对吧.但是Colo ...

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

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

  3. Golang中string和[]byte的对比

    golang string和[]byte的对比 为啥string和[]byte类型转换需要一定的代价? 为啥内置函数copy会有一种特殊情况copy(dst []byte, src string) i ...

  4. go中string和slice no-copy转换

    在go里面,string和slice的互换是需要进行内存拷贝的,虽然在底层,它们都只是用 pointer + len来表示的一段内存. 通常,我们不会在意string和slice的转换带来的内存拷贝性 ...

  5. golang中Array与Slice

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

  6. golang 中 string 转换 []byte 的一道笔试题

    背景 去面试的时候遇到一道和 string 相关的题目,记录一下用到的知识点.题目如下: s:="123" ps:=&s b:=[]byte(s) pb:=&b s ...

  7. javascript中string与int之间的转换

    string转int javascript中提供了两种方法转换为数值(int): var str='15'; var str8='015'; var strChar='12abc'; //first ...

  8. java中String,StringBuffer,StringBuilder之间的区别

    文章转载自:http://www.cnblogs.com/frankliiu-java/archive/2010/07/05/1771537.html String是固定长度的字符串,如果要发生变化必 ...

  9. javascript中String 对象slice 和substring 区别

      1.slice(start,stop)和substring(start,stop)  方法都是用于提取字符串中从start开始到stop-1间的字符(因为字符串索引是从0开始).其中 start必 ...

随机推荐

  1. CSS中的绝对定位与相对定位

    层级关系为:<div ----------- position:relative; 不是最近的祖先定位元素,不是参照物<div----------没有设置为定位元素,不是参照物<di ...

  2. Socket与Http方式解析发送xml消息封装中间件jar包

    最近项目代码中太多重复的编写Document,不同的接口需要不同的模板,于是重写提取公共部分打成jar包,方便各个系统统一使用~ 提取结构: Http连接方式: import java.nio.cha ...

  3. MyEclipse运行前自动保存

    MyEclipse中又一坑人设置.运行编译好的代码,如果不手动保存的话,MyEclipse是不会自动保存的.所以,在运行前如果对代码做了修改,运行的依然是上一次的结果. 修改这个反人类设置步骤如下: ...

  4. Mysql数据库中存储中文为乱码

    1. 修改数据库的编码格式为utf8 2. 修改表的编码格式为utf8 3. 修改字段的编码格式为utf8 祝你好运!

  5. Python基础篇【第3篇】: Python正则表达式

    正则表达式 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大.正则表达式是一个特殊的 ...

  6. C语音常用库和函数

    #include <assert.h> //设定插入点 #include <ctype.h> //字符处理 #include <errno.h> //定义错误码 # ...

  7. Netbeans导入Nutch1.2

    Windows 环境下,Netbeans下导入Nutch1.2. 测试环境:  Nutch 1.2  Netbean7.4  Java 1.8.0_20  cygwin 安装步骤: 1.安装: ...

  8. Java开发必会的Linux命令

    Java开发必会的Linux命令 作为一个Java开发人员,有些常用的Linux命令必须掌握.即时平时开发过程中不使用Linux(Unix)或者mac系统,也需要熟练掌握Linux命令.因为很多服务器 ...

  9. openwrt编译环境搭建

    1,首先安装ubuntu系统,这里安装的是虚拟机 2,安装openwrt编译所需环境  apt-get install build-essential libncures5-dev gawk libs ...

  10. java BigDecimal add 等方法遇到的问题

    //这篇随笔是为了提醒自己避免重复错误 //原先的代码是这样的,想着输出会是9.00,可是结果却是0.00 BigDecimal day_fee = new BigDecimal("0.00 ...