# Go基础之--数组和切片

## 数组

var a[3][2]

```a := [2]int{1, 2}
b := [...]int{1, 2}
c := [2]int{3, 2}
d := [3]int{1, 2}
fmt.Println(a == b, a == c, b == c)
fmt.Println(a == d)```

## 切片slice

slice 表示一个拥有相同类型元素的可变长的序列

slice的初始化 var a[5] int //这是定义一个数组 var b[]int = a[0,2] var b[]int = a[0:5] var b[]int = a[:] var b[]int = a[:3]

var b[] int = []int{1,2,3,4}

slice的底层实现就是一个数组，通常我们会叫做slice的底层数组。 slice具有三个属性：指针，长度和容量，如下图

slice创建

make([]type,len,cap) make([]type,len)

```s1 := []int{1, 2, 3, 7, 8}
s2 := []int{4, 5, 6}
copy(s2, s1)
fmt.Printf("%#v\n", s2)```

```s1 := []int{1, 2, 3, 7, 8}
s2 := []int{4, 5, 6}
copy(s1, s2)
fmt.Printf("%#v\n", s1)```

```var runnes []rune
for _, v := range "hello,go" {
runnes = append(runnes, v)
}
fmt.Printf("%q\n", runnes)```

```s1 := []int{1, 2, 3}
s1 = append(s1, 4, 5)
fmt.Printf("%#v\n", s1)```

```s1 := []int{1, 2, 3}
s2 := []int{4, 5}
s1 = append(s1, s2...)
fmt.Printf("%#v\n", s1)```

```func appendInt(x []int, y int) []int {
var z []int
zlen := len(x) + 1
if zlen <= cap(x) {
//slice仍有增长空间扩展slice内容
z = x[:zlen]
} else {
//slice 已经没有空间，为他分配一个新的底层数组
//当然实际go底层扩展的时候的策略可能复杂的多，这里是通过扩展一倍为例子
zcap := zlen
if zcap < 2*len(x) {
zcap = 2 * len(x)
}
z = make([]int, zlen, zcap)
copy(z, x)
}
z[len(x)] = y
return z   ```

```package main

import (
"fmt"
)

func changeString(str1 string) {
var runnes = []rune(str1)
runnes[0] = 'h'
res := string(runnes)
fmt.Println(res)
}

func main() {
changeString("Hello,Go")
}```

```func reverseStr(str1 string) {
var runes = []rune(str1)
var res string
for i := len(runes) - 1; i >= 0; i-- {
res += string(runes[i])
}
fmt.Println(res)
}```

```func reverseStr2(str1 string) {
var runes = []rune(str1)
for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
runes[i], runes[j] = runes[j], runes[i]
}
res := string(runes)
fmt.Println(res)
}```

GO当中的：string rune,byte

var a = "我爱你go" fmt.Println(len(a))

var a = "我爱你go" fmt.Println(len([]rune(a)))

## 时间和日期类型

time.Now().Day()

time.Now().Minute()

time.Now().Month()

time.Now().Year()

time.Duration用来表示纳秒

const ( Nanosecond Duration = 1 Microsecond =1000 * Nanosecond Millisecond =1000 * Microsecond Second =1000 * Millisecond Minute =60 * Second Hour =60 * Minute )

132 篇文章48 人订阅

0 条评论

## 相关文章

### Go语言interface详解

interface Go语言里面设计最精妙的应该算interface，它让面向对象，内容组织实现非常的方便，当你看完这一章，你就会被interface的巧妙设计...

3717

3637

1043

### Go语言interface详解

interface Go语言里面设计最精妙的应该算interface，它让面向对象，内容组织实现非常的方便，当你看完这一章，你就会被interface的巧妙设计...

3709

### .NET面试题系列[12] - C# 3.0 LINQ的准备工作

"为了使LINQ能够正常工作，代码必须简化到它要求的程度。" - Jon Skeet

1133

1483

### \$.each()与\$(selector).each()区别详解

\$.each()与\$(selector).each()不同, 后者专用于jquery对象的遍历, 前者可用于遍历任何的集合(无论是数组或对象),如果是数组,回...

37012

3527

3686

4630