golang array, slice, string笔记

本来想写一篇关于golang io的笔记,但是在学习io之前必须了解array, slice, string概念,因此将在下篇写golang io.

array:

数组的长度是该数组类型的一部分,例如var buffer [256]byte 的类型是[256]byte, len(buffer)总是返回256.

slice:

一个slice描述一个数组中连续的一部分,例如var slice = buffer[100:250]。slice也可以从slice产生,如var slice2 = slice[5:10],其中slice的type是[]byte。slice并不真正存储数据,它只是包含一个指向数据的pointer,你可以把它当成这样的一个结构:

type sliceHeader struct {
    Length        int
    Capacity      int
    ZerothElement *byte
}
其中Capacity等于slice所指的数组的大小减去ZeroElement的index。我们还可以用make函数来创建slice,slice := make([]int, 10, 15)其中第二个参数是slice的长度,第三个参数是slice的Capacity。或者用直接量slice := []int{0, 1, 2, 3, 4}。

string:

可以把string看作一个只读的byte slice。例如var sample string = "\xdb\xb2\x3d" 是一个长度为3的byte slice.对于其中非ASCII的unicode数据将被格式化为UTF-8。

Code point指一个unicode值,由几个byte组成。一个character字符可以由几个Code point,甚至不同的Code point组成。golang使用rune来代表code point,类型为int32,在golang中character都被normalize成一个rune。

时间: 2024-10-25 02:32:28

golang array, slice, string笔记的相关文章

golang的slice了解及验证

golang 中slice的操作 golang收获 如果只是分配了 var st []SelfType, 进行赋值,那么就会是吧,除非使用 make 分配一个内存空间 注意, slice在make的时候可以制定 len, cap长度, len,cap的区别在于: len是当前slice中的element的长度, cap是slice的长度(在自动扩展之后) slice在使用的时候最好要区分出数据量的大小是否可以预期,如果是数据量很大,且不确认会有多少的时候,使用append的时候会浪费时间在内存c

golang []byte转string

golang中,字符切片[]byte转换成string最简单的方式是 package main import ( "fmt" _ "unsafe" ) func main() { bytes := []byte("I am byte array !") str := string(bytes) bytes[0] = 'i'//注意这一行,bytes在这里修改了数据,但是str打印出来的依然没变化, fmt.Println(str) } 打印信息:

Array和String方法总结—实例

说明:每一部分总结后面有实例代码,代码中黄色框的方法不会改变原数组.                  代表array和string共有的方法             代表参数 Array --普通方法 栈:   pop()   push(多个项) 队列:shift()  unshift(多个项) 排序:sort([函数])  reverse() 转换:toString()  toLocateString()   join([分隔符]) 操作:concat([多个项])     slice(起点

GO語言基礎教程:array,slice,map

這節課我們來講解數組,切片和map,或許您是從其他語言轉到GO語言這邊的,那麼在其他語言的影響下您可能會不太適應GO語言的數組,因為GO語言把數組給拆分成了array,slice和map,接下來的時間讓我們一起研究一下這三者的差異以及用法.首先我們說一下array的部份: 1.數組的長度屬於數組的一部份,我們看下邊的例子 a:=[1]int{}和b:=[2]int{} a和b都是數組,但是他們的長度不同,在GO語言中會認為是不同的兩種類型,既然是不同的類型,那麼他們就不能進行比較或直接賦值的操作

JavaScript-----14.内置对象 Array()和String()

5. 数组对象 5.1数组的创建 之前提到过数组的创建方式 字面量 new Array() //创建数组的两种方式 //1.利用数组字面量 var arr = [1, 2, 3]; console.log(arr); //2.利用new Arry() var arr1 = new Array(); //创建一个空数组 console.log(arr1); //[] var arr2 = new Array(2); //创建一个长度为2的空数组 console.log(arr2); //(2)[e

Bean、List、Map、Array、String与JSON字符串的相互转换

import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.math.BigDecimal; import java.math.BigInteger; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map;

JS服务器端开发基础篇(Array.slice方法)

Array.slice方法在众多的JS数组中属于比较复杂的一个方法,搜索网络上很多资料都没有发现系统的总结.特别归纳如下,不完全处还希望各位批评指正. 格式: arrayObj.slice(start, [end]) 功能:返回指定数组的一个子数组,并不修改原来数组. 参数: start:必需.arrayObj的指定部分的开头. end:可选.arrayObj的指定部分的结尾. 数组使用来看,这个方法类似于串操作中的substr函数.但是,当参数为负数时,情况就复杂了. 具体情况详见下面的代码示

golang的slice作为函数参数传值的坑

直接贴代码 func sliceModify(slice []int) { // slice[0] = 88 slice = append(slice, 6) } func main() { slice := []int{1, 2, 3, 4, 5} sliceModify(slice) fmt.Println(slice) } 返回的没变,坑爹的,这个设计太那啥了,可以正确跑出效果的版本如下: func sliceModify(slice *[]int) { *slice = append(*

javaScript array.slice和array.splice

1. slice Array.slice(start,end) 方法可从已有的数组中返回选定的元素 start 为起始下标 end 为结束下标(可为空,为空时默认结束下标为数组的长度) 注意:此方法不会修改原有数组 var arr = [1,2,3], brr = arr.slice(0,1); alert(brr)://1 alert(arr);//123 2. splice Array.splice(index,howmany,item1,.....,itemX) 方法向/从数组中添加/删除