zoukankan      html  css  js  c++  java
  • go两种数据类型的区别、数据类型和操作符、常量、变量声明

    值类型和引用类型

    1、值类型:变量直接存储值,内存通常在栈中分配。  

      基本数据类型int、float、bool、string以及数组和struct。

    2、引用类型:变量存储的是一个地址,这个地址存储最终的值。内存通常在堆上分配。通过GC回收。

      指针、slice(切片)、map、chan(管道)、interface等都是引用类型。

    堆和栈的区别:
      一、堆栈空间分配区别:
      1、栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;
      2、堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。
      二、堆栈缓存方式区别:
      1、栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放,调用对象的速度较快;(栈空间)
      2、堆是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。
    调用对象的速度要相对慢一些。(物理硬盘空间)   三、堆栈数据结构区别:   堆(数据结构):堆可以被看成是一棵树,如:堆排序;   栈(数据结构):一种先进后出的数据结构。(函数的调用就是栈,先进后出) 

    值类型和引用类型实例:

    实例一
    实例二

     变量的作用域(全局区域只能声明变量,不能执行语句,a:=1,这类语句编译不能通过

    1、在函数内部声明的变量叫做局部变量,生命周期仅限于函数内部。在{ }里面的语句块里面的变量生命周期仅限于语句块。

    2、在函数外部声明的变量叫做全局变量,生命周期作用于整个包,如果是大写的,则作用于整个程序。

    实例一
    实例二
    实例三

      

    数据类型和操作符

    1、bool类型,只能存true和false

    2、相关操作符, !、&&、||

    3、数字类型,主要有int、int8、int16、int32、int64、uint8(无符号整形)、uint16、uint32、uint64、float32、float64

    4、类型转换,type(variable),比如:var a int=8;  var b int32=int32(a)

    5、逻辑操作符: == 、!=、<、<=、>和 >=

    6、数学操作符:+、-、*、/等等

    7、字符类型:var a byte

      var a byte = ‘c’

    8、字符串类型: var str string

    9、字符串表示两种方式: 1)" "双引号    2)``  反引号

    所有整数初始化为0,所有浮点数初始化为0.0,所有布尔类型初始化为False

    View Code

     10、位操作符

    a.与操作:&          1&1 =1  1&0 = 0  0&1 =0  0&0 = 0

    b.或操作:|       1|1 = 1  1&0 = 1  0&1 =1  0&0 = 0

    d.异或操作:^        1|1 = 0  1&0 = 1  0&1 =1  0&0 = 0

    左移<<    1<<10=1024

    右移>>        1024>>10=1

    位操作符实例

    常量

    1.常量使用const 修饰,代表永远是只读的,不能修改。

    2.const 只能修饰boolean,number(int相关类型、浮点类型、complex)和string。

    3.语法:const identifier [type] = value,其中type可以省略。

    const b string = “hello world” 
    const b = “hello world”
    const Pi = 3.1414926
    const a = 9/3

     预定义常量:

    比较优雅的写法:
    const (
    a = 0
    b = 1
    c = 2
    )
    
    更加专业的写法:
    const (
    a = iota  //a=0,后面的变量都在前面的基础上都加1
    b    //1
    c    //2
    

     变量

    1、语法:var identifier type

        var v1 int
        var v2 string
        var v3 [10]int  //数组
         var v4 []int    //数组切片
         var v5 struct{
            f int
        }
        var v6 *int  //指针
         var v7 map[string] int
        var v8 func(a int)  //指针

    第二种写法:

    var (
           v1 int  //默认为0
           v2 string //默认为""
           v3 [10]int  //数组
            v4 []int    //数组切片
            v5 struct{
                f int
            }
           v6 *int  //指针
            v7 map[string] int
           v8 func(a int)  //指针
            v9 bool  //默认为false
        )

    变量的初始化操作:

    var v1 int = 10
    var v2 = 10
    v3 := 10 //不能用于全局变量的声明
  • 相关阅读:
    MongoDB 释放磁盘空间 db.runCommand({repairDatabase: 1 })
    RK 调试笔记
    RK Android7.1 拨号
    RK Android7.1 移植gt9271 TP偏移
    RK Android7.1 定制化 itvbox 盒子Launcher
    RK Android7.1 双屏显示旋转方向
    RK Android7.1 设置 内存条作假
    RK Android7.1 设置 蓝牙 已断开连接
    RK Android7.1 进入Camera2 亮度会增加
    RK 3128 调触摸屏 TP GT9XX
  • 原文地址:https://www.cnblogs.com/domestique/p/10011243.html
Copyright © 2011-2022 走看看