= 和 :=/range/切片

Go 语言中 = 和 := 有什么区别

使用 = 前必须先用var声明

var a
a = 100
//或
var b = 100
//或
var c int = 100

:= 是声明并赋值,并且系统自动推断类型,不需要var关键字

d := 100

range函数

range函数可以用来遍历数组,切片,通道或者Map。

用于遍历数组、切片时,返回索引和元素;用于遍历Map时,返回键和值;用于遍历通道,只有一个返回值。各种类型的返回值参考下表:

// range函数使示例
package main

import (
    "fmt"
)

func main()  {
    fmt.Println("----切片迭代----")
    nums := []int{1,2,3,4,5,6}
    for k , v := range nums {
        fmt.Printf("key : %v value : %v \n",k,v)
    }

    fmt.Println("----map迭代----")
    kvs := map[string]string{
        "name": "zhangsan",
        "sex":  "男",
    }
    for mk , mv := range kvs {
        fmt.Printf("mk : %v mv : %v \n",mk,mv)
    }

    fmt.Println("----字符串迭代----")
    for sk, sv := range "hello world!"  {
        //注意这里单个字符输出的是ASCII码,
        //用 %c 代表输出字符
        fmt.Printf("sk : %v sv : %c \n",sk,sv)
    }

    fmt.Println("----channel迭代----")
    ch := make(chan int, 10)
    ch <- 11
    ch <- 12

    close(ch) // 不用的时候记得关掉,不关掉又没有另一个goroutine存在会死锁

    for x := range ch {
        fmt.Println(x)
    }

}
//结果
----切片迭代----
key : 0 value : 1 
key : 1 value : 2 
key : 2 value : 3 
key : 3 value : 4 
key : 4 value : 5 
key : 5 value : 6 
----map迭代----
mk : name mv : zhangsan 
mk : sex mv :----字符串迭代----
sk : 0 sv : h 
sk : 1 sv : e 
sk : 2 sv : l 
sk : 3 sv : l 
sk : 4 sv : o 
sk : 5 sv :   
sk : 6 sv : w 
sk : 7 sv : o 
sk : 8 sv : r 
sk : 9 sv : l 
sk : 10 sv : d 
sk : 11 sv : ! 
----channel迭代----
11
12

切片(slice)

概念

切片是一个引用类型,可以创建”字符串”切片,可以创建”整型”切片等

切片和数组的区别( 重点)

  1. 切片和数组相似,它们都是保存相同数据类型元素的容器,但是切片的元素个数是可变的, 数组不可变

  2. 切片不需要明确指定元素的个数

创建切片方法

var i []int      //创建int类型切片
var s []string   //创建string类型切片

切片的内部实现

切片是一个很小的对象,它对底层的数组(内部是通过数组保存数据的)进行了抽象,并提供相关的操作方法;切片是有三个字段的数据结构,这3个字段分别是: 指向底层数组的指针、切片访问的元素的个数(即长度)、切片允许增长到的元素个数

字符串类型切片 和 字符串类型数组对比

//创建 "字符串"类型的切片
myStr2 := []string{"zhangsan", "list", "wangwu"}
fmt.Println(myStr2)
fmt.Printf("%T \n",myStr2)
//结果:
[zhangsan list wangwu]  #字符串类型切片打印的结果
[]string                #字符串类型的切片
---------------------------------------------------------
//创建"字符串"类型的数组
myStr3 := [3]string{"zhangsan","lisi","wangwu"}
fmt.Println(myStr3)
fmt.Printf("%T",myStr3)
//结果:
[zhangsan lisi wangwu]  
[3]string   #字符串类型的数组

参考:www.cnblogs.com/chadiandianwenrou/...

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!