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 //不能用于全局变量的声明
  • 相关阅读:
    HttpServletResponse对锂
    搭建java Web项目开发环境(一)
    React Native动画-Animated
    React-Navigation redux集成
    react-navigation 使用详解
    echart
    io-输出流
    react-native-lesson
    集合类-HashSet去重
    kafka不同主题使用同一个group.id的坑
  • 原文地址:https://www.cnblogs.com/domestique/p/10011243.html
Copyright © 2011-2022 走看看