【go语言基础】-数据操作

发布时间 2023-04-03 11:12:54作者: wanghhhh

一. 数组

1. 特征

静态语言的数组特征:

1.大小确定

2.类型一致

只能取值,修改值

由于数组长度固定,在Go里很少直接使用

2. 定义

// 3种方式,声明,初始,省略号

// 变量arr1类型为[5]int
var arr1 [5]int

// 变量arr2类型为[3]int,同时初始化赋值
var arr2 [5]int = [5]int{1,2,3}

// 让编译器自己数,结果为[3]int
arr3 := [...]int{1,2,3}

// 错误例子,因为[3]int和[4]int是两种类型
arr3 := [4]int{1,2,3,4}
  • 数组长度是数组类型的一部分,[3]int[5]int就是两种类型。
  • 数组长度必须是常量表达式,即这个表达式的值在编译阶段就可以确定。
package main

import (
    "fmt"
)

func printArray(toPrint [5]string) {
    //[]string这是切片类型
    toPrint[0] = "bobby"
    fmt.Println(toPrint)
}

func main() {
    //go语言中的数组和python的list可以对应起来理解,slice和python的list更像
    //静态语言中的数组: 1. 大小确定 2. 类型一致
    //数组的申明
    //var courses [10] string
    //var courses = [5]string{"django", "scrapy", "tornado"}
    course := [5]string{"django", "scrapy", "tornado"}
    //静态语言要求严格, 动态语言是一门动态类型的

    //1. 修改值, 取值: 删除值, 添加某一个值, 数组一开始就要指定大小
    //取值, 修改值
    fmt.Println(course[0])
    //修改值
    course[0] = "django3"
    fmt.Println(course)

    //数组的另一种创建方式
    //var a [4] float32
    var a = [4]float32{1.0}
    fmt.Println(a)

    var c = [5] int{'A', 'B'}
    fmt.Println(c)

    //首次接触到了省略号
    d := [...]int{1,2,3,4,5}
    fmt.Println(d)

    e := [5]int{4:100}
    fmt.Println(e)
    
    f := [...]int{0:1, 4:1, 9:100}
    fmt.Println(f)

    //数组操作第一种场景: 求长度
    fmt.Println(len(f))
    //数组操作第二种场景: 遍历数组

    for i, value := range course {
        fmt.Println(i, value)
    }

    //使用for range求和
    sum := 0
    for _, value := range f {
        sum += value
    }
    fmt.Println(sum)

    //使用for语句也可以遍历数组
    sum = 0
    for i := 0; i<len(course); i++{
        sum += f[i]
    }
    fmt.Println(sum)

    //数组是值类型
    courseA := [3]string{"django", "scrapy", "tornado"}
    courseB := [...]string{"django1", "scrapy1", "tornado1", "python+go", "asyncio"}
    //courseA和courseB应该是同一种类型, 都是数组类型
    //在go语言中,courseA和courseB都是数组,但是不是同一种类型
    fmt.Printf("%T\n", courseA)
    fmt.Printf("%T\n", courseB)
    //如果courseA和courseB是一种类型的话 为什么前面要加一个数组, 长度不一样的数组类型是不一样
    //正是基于这些,在go语言中函数传递参数的时候,数组作为参数 实际调用的时候是值传递
    printArray(courseB)
    fmt.Println(courseB)
}

3. 操作

(1)求长度

arr1 := [...]{1,2,3}
lenth := len(arr1)

(2)遍历数组

package main

import "fmt"

func main() {

   f := [...]int{0: 1, 9: 100}

   for i, v := range f {
      fmt.Println(i, v)
   }

   // 使用for range求和
   sum := 0
   for _, v := range f {
      sum += v
   }
   fmt.Println(sum)

   // 使用for语句也可以遍历数组
   sum2 := 0
   for i := 0; i < len(f); i++ {
      sum2 += f[i]
   }
   fmt.Println(sum2)
}