好记性不如烂笔头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. C#.Net Mvc运营监控,计算方法/接口/action/页面执行时间

    1.建立一个TimingActionFilter过滤器 public class TimingActionFilter : ActionFilterAttribute { public overrid ...

  2. c# MessageBox 用法大全

    我们在程序中经常会用到MessageBox. 1.MessageBox.Show("Hello~~~~"); 最简单的,只显示提示信息. 2.MessageBox.Show(&qu ...

  3. USACO 滑雪课程

    #include<cstdio> #include<iostream> using namespace std; int T,S,N,maxd; ],lv[],next[],f ...

  4. php判断是否是微信客户端的浏览器访问

    代码: $user_agent = $_SERVER['HTTP_USER_AGENT']; if (strpos($user_agent, 'MicroMessenger') === false) ...

  5. C# 托管和非托管混合编程

    在非托管模块中实现你比较重要的算法,然后通过 CLR 的平台互操作,来使托管代码调用它,这样程序仍然能够正常工作,但对非托管的本地代码进行反编译,就很困难.   最直接的实现托管与非托管编程的方法就是 ...

  6. LAMP_03_Win下Apache+PHP+MySQL整合

    文件: Apache :  首先修改Apache的配置文件,让Apache支持解析PHP文件.Apache配置文件在Apache安装目录的conf目录下的httpd.conf.1. 让Apache可以 ...

  7. FPGA低级建模---按键去抖动

    FPGA低级建模,原则上一个模块一个功能,如按键去抖动建模中,有两个模块. 1.detect_module 这个是按键检测模块,主要检测按键的高低电平变化,现在按键是按下还是释放. 2.delay_m ...

  8. spring @Scheduled注解执行定时任务

    以前框架使用quartz框架执行定时调度问题. 这配置太麻烦.每个调度都需要多加在spring的配置中. 能不能减少配置的量从而提高开发效率. 最近看了看spring的 scheduled的使用注解的 ...

  9. IOS 判断耳机插入/拔出

    一. 方式 1.注册监听 //注册监听耳机设备的插入/拔出 AudioSessionAddPropertyListener (kAudioSessionProperty_AudioRouteChang ...

  10. zookeeper分布式部署-mac先测试

    由于平台马上要引入zookeeper+dubbo,为了解决zookeeper单个实例运行的风险,需要做个集群. 1,先说配置:zoo.cfg十分简单,分两种情况: 一种是在一台机器采用不同的端口配置多 ...