zoukankan      html  css  js  c++  java
  • go的基础数据类型

    基础的数据类型:

    布尔类型:bool
    整型:int8、uint8(byte)、int16、int(平台相关)、uint(平台相关)、uintptr(同指针,32位平台为4字节,64位平台为8字节)
    浮点类型:float32、float64
    复数类型:complex64、complex128
    字符串:string
    字符类型:rune
    错误类型:error

    复合类型:

    指针(pointer)
    数组(array)
    切片(slice)
    字典(map)
    通道(chan)
    结构体(struct)
    接口(interface)
    Go 语言在声明变量时,自动对变量对应的内存区域进行初始化操作。每个变量会初始化其类型的默认值,例如:
    整型和浮点型变量的默认值为 0。
    字符串变量的默认值为空字符串。
    布尔型变量默认为 bool。
    切片、函数、指针变量的默认为 nil。

    一、布尔类型

    var v1 bool
    v1 = true

    布尔类型不能接受其他类型的赋值,不支持自动或强制的类型转换。

    二、字符类型

    var str string
    str = "Hello world"

    三、数组类型

    声明变量及初始化第一种:

    var team [3]string
    team[0] = "hammer"
    team[1] = "soldier"
    team[2] = "mum"

    声明变量及初始化第二种:

    var a [5] int = [5]int{1,2,3,4,5}
    var a = [5]int{1,2,3,4,5}
    var a = [5]int{1,2,3}
    var a = [...]int{1,2,3,4,5}
    var a = [5]string{1:'abc',4:'efg'}

    四、切片

    切片借助数组的创建:

    var a [5]int
    var b []int = a[0:1]
    var b []int= []int{1,2,3,4,5}

    直接创建:

    a := make([]int,5)//初始元素个数为5的数组切片,元素初始值为0
    a := make([]int,5,10)//初始元素个数为5的数组切片,元素初始值为0,并预留10个元素的存储空间

    len(a):数组切片中当前存储的元素个数。
    cap(a):返回的是数组切片分配的内存空间。

    切片没有删除功能。

    向切片数组中追加值:

    第一种:

    a := make([]int,5)//初始元素个数为5的数组切片,元素初始值为0
    a = append(a, 1,2,3)

    第二种:

    a := []int{1,2,3}
    b = append(b,a...)

     切片的拷贝:

    slice1 := []int{1,2,3,4,5}
    slice2 := []int{3,4,5}
    copy(slice2,slice1) //只会复制slice1的前3个元素到slice2中
    copy(slice1,slice2) //只会复制slice2的前3个元素到slice1中的前3个位置

    切片的排序:

    sort.Strings(slice1)
    sort.Ints(slice1)

    五、map

    map的创建和初始化第一种:

    var a map[string]string = map[string]string{"hello":"world"}

    map的创建和初始化第二种:

    a := make(map[string]string, 10)
    a["hello"] = "world"

    相关操作:

    val, ok:= a["hello"]     //查找
    for k, v := range a {  //遍历
        fmt.Println(k,v)
    }
    
    delete(a, "hello")     //删除
    len(a)                //长度

    sync.Map有以下特性:

    • 无须初始化,直接声明即可。
    • sync.Map 不能使用 map 的方式进行取值和设置等操作,而是使用 sync.Map 的方法进行调用。Store 表示存储,Load 表示获取,Delete 表示删除。
    • 使用 Range 配合一个回调函数进行遍历操作,通过回调函数返回内部遍历出来的值。Range 参数中的回调函数的返回值功能是:需要继续迭代遍历时,返回 true;终止迭代遍历时,返回 false。
    var scene sync.Map
    // 将键值对保存到sync.Map
    scene.Store("greece", 97)
    scene.Store("london", 100)
    scene.Store("egypt", 200)
    // 从sync.Map中根据键取值
    fmt.Println(scene.Load("london"))
    // 根据键删除对应的键值对
    scene.Delete("london")
    // 遍历所有sync.Map中的键值对
    scene.Range(func(k, v interface{}) bool {
        fmt.Println("iterate:", k, v)
        return true
    })

    六、 列表 list

     Go 语言中,将列表使用 container/list 包来实现,内部的实现原理是双链表。列表能够高效地进行任意位置的元素插入和删除操作。

    列表与切片和 map 不同的是,列表并没有具体元素类型的限制。

    列表的初始化一:

    lis := list.New()

    列表的初始化二:

    var lis list.List

    列表的相关操作:

    双链表支持从队列前方或后方插入元素,分别对应的方法是 PushFront 和 PushBack。

    提示

    这两个方法都会返回一个 *list.Element 结构。如果在以后的使用中需要删除插入的元素,则只能通过 *list.Element 配合 Remove() 方法进行删除,这种方法可以让删除更加效率化,也是双链表特性之一。

    lis := list.New()
    // 尾部添加
    lis.PushBack("canon")
    // 头部添加
    lis.PushFront(67)
    // 尾部添加后保存元素句柄
    element := lis.PushBack("fist")
    // 在fist之后添加high
    lis.InsertAfter("high", element)
    // 在fist之前添加noon
    lis.InsertBefore("noon", element)
    // 删除
    lis.Remove(element)
  • 相关阅读:
    Vue-发布订阅机制(bus)实现非父子组件的传值
    01. jupyter环境安装
    人工智能
    Javascript
    JavaScript
    MongoDB
    MongoDB
    人工智能
    Flask
    Flask
  • 原文地址:https://www.cnblogs.com/domestique/p/9977210.html
Copyright © 2011-2022 走看看