= 和 :=/range/切片

Golang
453
0
0
2022-04-11
标签   Golang基础

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/...