• 4. 常量与运算符


    include

    1. 常量的定义
    2. 常量的初始化规则与枚举
    3. 在定义常量组的时候,如果不提供初始值,则表示使用上行的表达式
    4. iota
    5. 运算符(一元运算符,二元运算符)

    常量的定义

    • 常量的值在编译的时候就已经确定了
    • 常量的定义格式与变量基本相同
    • 等号右侧必须是常量或者常量表达式
    • 常量表达式中的函数必须是内置函数
    • 常量最好使用全部为大写,如果不想被外部调用,那么可以在常量前面添加_,如_MAX_CONN
      下面请看赋值的代码:
    const a int =1
    const b = "A"
    
    const (
    	c=a
    	d=a+1
    	c=a+2
    )
    
    const a,b,c = 1,2,3
    

    常量的初始化规则与枚举

    • 在定义常量组的时候,途观不提供初始值,则表示使用上行的表达式
    • 使用相同的表达式不代表具有相同的值
    • iota是常量的计数器,从0开始,组中每定义1个常量自动递增1
    • 通过初始化规则与iota可以达到枚举的效果
    • 每遇到一个const关键字,iota就会重置为0
    在定义常量组的时候,如果不提供初始值,则表示使用上行的表达式

    常量的值不能依赖于变量,变量在运行的时候才会使用,所以像下面的代码,在编译的时候就会报错:

    
    var xx = 123
    const (
    	c = len(xx)
    	b
    	c
    )
    
    

    但是下面的例子是正确的,常量的值依赖于另一个常量:

    const (
    	c = "sadfasdf"
    	b = len(c)
    )
    
    

    我们再看一个例子,如果使用小括号批量赋值给常量的时候,如果第一个常量有值,剩下的没有值,那么默认剩下的常量的值会继承第一个常量的值。代码如下:

    package main
    
    import (
    	"fmt"
    )
    
    const (
    	c = "sadfasdf"
    	b    // b 和 a都没有赋值,所以我们在打印的时候,abc三个值都是一样的
    	a
    )
    
    func main() {
    	fmt.Println(b, a)   // b 和 a都没有赋值,所以我们在打印的时候,abc三个值都是一样的
    }
    

    如果一行有多个常量赋值,也可以这么写

    package main
    
    import (
    	"fmt"
    )
    
    const (
    	c, b = "sadfasdf", 1123
    	a, d  // a,d这两个常量的数量必须和第一行保持默认才行,即上面多少个常量下面就得多少个,保持一致才行
    	v, y
    )
    
    func main() {
    	fmt.Println(v, a, y)
    

    iota

    iota能够显示这个常量在const组里面的第几个常量,代码如下

    const (
    	c  = "sadfasdf"
    	a  = iota
    	he = 12344
    	v  = iota
    	d
    )
    func main() {
    	fmt.Println(d, c)
    }
    

    打印的结果是:4 sadfasdf ,iota的值从第一个常量开始为0,然后递增1,所以d为4。
    下面再看一个例子:

    const (
    	c  = "sadfasdf"
    	a  = iota
    	he = 12344
    	v  = iota
    	d
    )
    
    const (
    	y = iota
    )
    
    func main() {
    	fmt.Println(d, c, y)
    }
    

    y打印出来的值为0,因为iota在遇到新的const的时候,会自动重置为0,所以y为0

    运算符

    • go中的运算符均是从左往右结合的
    优先级

    一元运算符是最高的,二元是最低

    • ^ !(取反) 一元运算符
      • / % <<(左移) >>(右移) & &^ + - | ^ == != < <= >= > 二元运算符
    • <- 专门用于channel
    • && 或关系
    • || 否关机
    如何判断^ 是属于一元运算符还是二元运算符

    标准: ^ 如果左右都有数字就是二元,只有右侧有数才是一元
    一元

    func main() {
    	fmt.Println(^2)
    }
    

    二元:

    func main() {
    	fmt.Println(1 ^ 2)
    }
    
    & &^ | ^ */ 位运算符讲解

    我们举个例子:

    十进制数字 二进制数字
    6 0110
    11 1011

    我们拿上面两个数计算来得

    运算符 作用 二进制结果 十进制结果
    & 二进制位全为1 才为1 0010 0
    | 二进制位有1即为1 1111 15
    ^ 二进制位全为1 就为0 1101 13
    &^ 第二个数位1的时候,才会把第一个数的相同位改为0 0100 4

    练习例子之生成随机数,git

    1. 生成100以内的随机数和10个浮点随机数
    // randnum
    package main
    
    import (
    	"fmt"
    	"math/rand"
    	"time"
    )
    
    func main() {
    	rand.Seed(time.Now().Unix())
    	var a []int
    	var b []float64
    	for i := 0; i < 11; i++ {
    		a = append(a, rand.Intn(100))
    		b = append(b, rand.Float64()*10)
    	}
    	fmt.Println(a)
    	fmt.Println(b)
    }
    
    
  • 相关阅读:
    CentOS 6.3 安装 phpmyadmin
    mysql 常用命令
    用PHP将Unicode 转化为UTF-8
    Angularjs通过$http与服务器通信
    话说Angularjs的$resource模块
    AngularCSS--关于angularjs动态加载css文件的方法(仅供参考)
    Angular-ui-router + oclazyload + requirejs实现资源随route懒加载
    移动前端开发之viewport的深入理解
    AngularJS的ng-class切换class
    AngularJS中如何对Controller与Service进行分层设计与编码
  • 原文地址:https://www.cnblogs.com/liaojiafa/p/6759301.html
Copyright © 2020-2023  润新知