zoukankan      html  css  js  c++  java
  • 2.5 Go 算术运算与变量使用技巧

    变量作用域

    简单来说,GO的变量以块为范围;一个if-else的块,就可以包含一个变量的生命周期。变量的声明,要在使用之前。

    package main
    
    import (
        "fmt"
    )
    
    func main(){
        var a int = 1
        var b int = 10  //这行代码为报错“b declared and not used”
        fmt.Println(a)  //1
        {
            var a int = 2 //块内部的变量作用域会覆盖上级变量的作用域
            fmt.Println(a) //2
        } // a为2的变量作用范围在块结束的时候,也随之结束,所以下面的a==1的结束为true
        
        if a == 1 {
            var a = 3 
            fmt.Println(a) //3
        }else{
            a = 4    //正常
            b = 11 
        }
    }

    注意代码报错的部分,说变量b被声明但没有使用,后面的if-else中不是有"b = 11"吗?

    var b int = 10  //这行代码为报错“b declared and not used”
    这就充分说明了GO的变量作用是按块分区的,并且对变量的检查不包含自己作用范围内的块。

    位运算

    右移,通常说右移一位相当于除以2,左移一位相当于乘以2,这只是相当;比如下面这个奇数,如果除以2则变成浮点数,就不能再直接赋值于int变量,但实际上可以;

        aa := 11111
        if aa>= 10000 {
            aa = aa>>1  //5555
        }
        fmt.Println(aa) 

    所以右移就是将数字转换为二进制后,舍弃掉右移的位数,空出来的位数补0.

    数字补0

    package main
    
    import (
        "fmt"
    )
    
    func main(){
        n1 := 1
        ss := fmt.Sprintf("%02d--%2d",n1,n1)
        fmt.Println(ss)  //01-- 1
    }

     字符串补0

    package main
    
    import (
        "fmt"
    )
    
    func main(){
        s1 := "1"
        ss := fmt.Sprintf("%02v--%2v",s1,s1)
        fmt.Println(ss)  //01-- 1
        
        s1 = "A"
        ss = fmt.Sprintf("%016v--%16v",s1,s1)
        fmt.Println(ss)  //000000000000000A--               A
        s1 = "中文"
        ss = fmt.Sprintf("%08v",s1)
        fmt.Println(ss)  //000000中文
    }
  • 相关阅读:
    SSH框架整合-myeclipse
    查看mysql数据库文件存放位置
    Java反射及注解学习- 反射的使用
    线程join方法demo-模拟叫号看病
    线程同步案例
    线程死锁示例
    《广西壮族自治区食品药品监督管理局》代码
    复习点算法知识,水仙花数加冒泡排序,以及一道算法题
    词性标注 HMM
    kd树
  • 原文地址:https://www.cnblogs.com/perfei/p/10632122.html
Copyright © 2011-2022 走看看