好记性不如烂笔头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. python 中__name__ = '__main__' 的作用

    有句话经典的概括了这段代码的意义: "Make a script both importable and executable" 意思就是说让你写的脚本模块既可以导入到别的模块中用 ...

  2. 黄聪:路由器WIFI连接无法正常访问个别网站及发送图片

    打开路由,路由默认MTU是1500,改成1472 就解决了

  3. WPF控件 RichTextBox查找定位匹配字符

    private void Search_Click(object sender, RoutedEventArgs e)//查询定位文本 { List<TextRange> textRang ...

  4. 简单了解undo

    ORACLE 数据库 DML语句执行之前,会将数据块修改前的信息 镜像保存到 undo 段 insert语句     rollback    将会执行一条deleter操作  (相对数据量最小,只需利 ...

  5. ubuntu下postgreSQL安装配置

    一.安装并配置,并设置远程登陆的用户名和密码 1.安装postgreSQL sudo apt-get update sudo apt-get install postgresql-9.4 在Ubunt ...

  6. RabbitMQ(五)

    SSL 官方地址:http://www.rabbitmq.com/ssl.html 百科: SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport L ...

  7. webpack 往右一点之 “模块这个东西”

    为什么会考虑模块? webapp,页面初始化和使用过程中会加载越来越多的javascript代码 --- 给前端的开发流程和资源组织带来挑战 ---前端需要模块系统 模块系统是干什么的呢? 模块的定义 ...

  8. cron 定时器简单入门

    cron:计划任务,是任务在约定的时间执行已经计划好的工作,根据配置文件约定的时间来执行特定的任务. 编写测试类继承 IJob ,实现Execute 此方法就是用于定时的任务 配置定时时间: 先创建w ...

  9. 软件测试之loadrunner学习笔记-02集合点

    loadrunner学习笔记-02集合点 集合点函数可以帮助我们生成有效可控的并发操作.虽然在Controller中多用户负载的Vuser是一起开始运行脚本的,但是由于计算机的串行处理机制,脚本的运行 ...

  10. JS-为金额添加千分位逗号分割符

    前言:这个功能在前端页面中使用的还是比较多的,正好我们的项目中也有使用此功能,不过YY同学写的代码不像个方法的样子,一个入口中间又插了几道子,所             以,我写了下面这个方法,经过测 ...