zoukankan      html  css  js  c++  java
  • Go基础语法

    1、数据类型

    go语言支持的基础类型

    整型:int,int8,int16,int32,int64

    无符号整型:uint,uint8,uint16,uint32,uint64

    其中默认类型为int,int表示32位或64位与操作系统有关

    字节:byte

    布尔:bool

    浮点型:float32,float64,默认类型为float64

    复数:complex64(32位实部和虚部),complex128(63位实部和虚部),默认类型为complex128

    指针:uintptr,本质为无符整型uint8

    字符串:string

    字符:rune,本质为int32,可表示unicode编码

    错误类型:error,本质为接口

    go支持的复合类型

    指针*,数组,结构体struct

    切片slice,字典map,通道channel,接口interface

    基础类型的默认值

    数据类型 默认值
    整型 0
    浮点型 0
    布尔值 false
    字符串 ""


    值类型和引用类型:

    值类型和引用类型的区别在于,在赋值或作为函数参数调用时,值类型会复制一份新的拷贝,新数据的修改不会影响原数据,而引用类型只会复制变量的引用,引用数据的修改会影响原数据

    值类型:基础数据类型,指针,数组,结构体

    引用类型:切片,map,channel,interface

    数组和切片的定义

    // 数组定义
    a :=[5]int{1,2,3,4,5}
    a := [...]int{1,2,3,4,5}
    // 切片定义
    a :=[]int{1,2,3,4,5}
    a := a[1:3]
    

    切片底层实际是一个三元组:指针、len、cap

    使用make创建切片

    make是Go语言的内置函数
    mySlice1 := make([]int, 5)   //元素个数为5 ,初始值为0
    mySlice2 := make([]int, 5, 10)   //len为5,cap为10
    mySlice3 := []int{1, 2, 3, 4, 5}   //len为5,cap为5
    mySlice4 := mySlice3 [1:3]  // len为2,cap为4,容量为1到最后
    

    切片的容量增长:
    函数append会智能地处理底层数组的容量增长,在切片容量小于1000个元素时, 总是会成倍地增加容量,一旦元素个数超过1000,时,容量的增长因子会设为1.25,也就是每次增加25%的容量

    各个类型所占的内存(64位环境):

    指针类型:8个字节

    string类型:16个字节,包含一个指针,指向真实地址,和一个int类型表示长度

    数组类型:总字节数为单个元素占用大小乘以个数

    切片类型:包含一个指向数组的指针,一个int类型表示长度,一个cap类型表示容量,总共24字节

    map类型:8个字节,本身为一个指针,指向map自己

    struct类型:大小为所有成员大小的总和

    interface{}:占用内存为16字节,包含两个指针

    map定义

    map的键可以使任何值,包括内置类型或结构体,只要可以用==进行比较,但不能是切片、函数以及包含切片的数据结构由于具有引用语义不能作为映射的键

    var colors map[string]string
    colors["red"] = "#da1337" // panic: assignment to entry in nil map
    

    声明和初始化:

    colors := make(map[string]string)
    colors := map[string]string{}
    取值:color, ok := colors["red"]
    遍历:for k, v := range colors
    

      

    nil切片和空切片

    创建nil切片:var slice []int

    创建空切片:
    slice := make([]int, 0)
    slice := []int{}

  • 相关阅读:
    Js 内存泄露追踪
    [导入]关于在ashx页面中使用Session的问题
    [导入]通过SQL语句删除重复记录
    javascript也玩pageLoad
    判断是否首次触发pageLoad 与 PageRequestManager.getInstance()对象的几个事件触发顺序
    ASP.NET Web下基于Forms的验证
    [导入]用程序来还原数据库(一个遗留了两年的问题)
    [导入]自己编写QQ挂机软件基于HTTP的QQ协议之我所见
    iis 中后台调用exe文件
    ORA12154: TNS:could not resolve the connect identifier spec
  • 原文地址:https://www.cnblogs.com/lxx-coder/p/13028819.html
Copyright © 2011-2022 走看看