zoukankan      html  css  js  c++  java
  • Go语言变量和常量

    一、变量相关

    1.变量声明

    C# : int a;

    Go : var a int; 需要在前面加一个var关键字,后面定义类型

    可以使用 var( a int; b string;)减少var

     

    2.变量初始化

    var a int = 10   // 正确的使用方式1
    
    var a = 10       // 正确的使用方式2,编译器可以自动推导出v2的类型
    
    a := 10          // 正确的使用方式3,编译器可以自动推导出v3的类型

    在:=左侧的变量不应该是已经被声明过的

     

    3.变量赋值

    注意:Go语言的新特性 “Simultaneous Assignment” (平行赋值、多重赋值 ......)

    a,b = b,a 可以方便的交换两个数的值,之前的其他语言可能都需要加一个temp变量

    (对于如和实现的,http://golang.org/ref/spec#Assignments 进行了阐述)

    对于这个我其实是有疑问的,就是Go语言是如何实现该功能的?按照我的想法如果是go语言底层也是按照加入一个变量的方式,那么岂不是输出的a和b都是b的值了?达不到交换的目的。所以我查了一些资料如下:

    http://stackoverflow.com/questions/35951423/simultaneous-variable-assignment-in-go-different-from-individual-variable-assign

    大概结论就是,这个赋值操作可以看成一个原子操作。

    4.匿名变量

    Go可以定义匿名变量来减少不需要的代码,例如,我只关心Value,不想打印Key的时候可以用“_”代替变量。同理对于有多个返回值的方法,可以用“_”代替我不想要的返回值,这样就减少了变量的定义。

    func main(){
           x:=make(map[string]int16)
           x["apple"] =100
           x["orange"] = 50
           x["pear"]=500
           for _,value := range x{
                  fmt.Println(value);
           }
    }

    二、常量相关

    1.字面常量

    Go语言的字面常量是无类型的,可以被赋值给任何类型的变量。

    例如 AConstNumber 可以赋值给int、float32等类型,但是赋值给string就出错了

    package main
    import ( "fmt")
    
    func main(){
           const AConstNumber = -100
           var x int = AConstNumber
           var y float32 = AConstNumber
           fmt.Println("x:",x)
           fmt.Println("y:",y)
    }

    2.预定义常量

    Go语言预定义了这些常量:true、false和iota。

    iota是个什么玩意?

    iota比较特殊,可以被认为是一个可被编译器修改的常量,在每一个const关键字出现时被 重置为0,然后在下一个const出现之前,每出现一次iota,其所代表的数字会自动增1。 (一个计数器?)

    例如:

    func main(){
           const(
                  a = iota *100
                  b = iota *100
                  c = iota *100
           )
           const(
                  d = iota *100
                  e = iota *100
                  f = iota *100
           )
           fmt.Println(a)  // 打印 0
           fmt.Println(b)  // 打印 100
           fmt.Println(c)  // 打印 200
           fmt.Println(d)  // 打印 0
           fmt.Println(e)  // 打印 100
           fmt.Println(f)  // 打印 200
    }

    所以 iota 这个东西用好了就能当枚举使用了,正好Go语言不支持enum关键字

  • 相关阅读:
    Arch Linux中安装Anaconda
    Windows下使用Diskpart格式化U盘
    Jupyter Notebook的安装
    Docker的脚本安装
    pip无法正常使用卸载并重新安装
    Arch更新时failed to prepare transaction
    Privoxy将Socks代理转化HTTP代理
    Arch Linux下Visual Stdio Code在格式化C代码时报错
    GNOME 3.28 启用桌面图标
    Appium入门(8)__控件定位
  • 原文地址:https://www.cnblogs.com/dcz2015/p/10095969.html
Copyright © 2011-2022 走看看