Go语言基础(常量、运算符)

Go语言基础(常量、运算符)

Go语言基础(常量、运算符)

一、常量

1.1 常量定义

  • 变量:在程序运行中可以被修改的量。
    常量:在程序运行中不可以被改变的量。
  • 常量的定义是通过const关键字完成的,并且建议常量名称大写。格式:const identifier [type] = value
    • 示例:显示定义const PI float64 = 3.1415926
        \ \qquad   隐式定义const PI = 3.1415926
  • Go语言常量只能是布尔型、数字型(整数型、浮点型和复数)和字符串型。
  • 常量在定义时,必须赋初值,因为Golang的常量不可被修改,因此,如果不赋初值,那么常量永远没有值。

1.2 字面常量

\quad 编程语言源程序中表示固定值的符号叫做字面量,也称字面常量。字面量可以被编程语言编译器直接转换为某个类型的值。Go的字面量可以出现在两个地方:一是用于常量和变量的初始化,二是用在表达式中作为函数调用实参。如果变量初始化语句中如果没有显式地指定变量类型,则Go编译器会结合字面量的值自动进行类型推断。Go中的字面量只能表达基本类型的值。

  • 整型字面量:整型字面量使用特定的字符序列表示具体的整型数值。常用于整型变量或常量的初始化。例如:420X6F
  • 浮点型字面量:浮点型字面量使用特定字符序列来表示一个浮点数值。它支持两种格式:一种是标准的数学小数形式,例如:0.23;另一种是科学计数法,例如:1E6
  • 字符型字面量Go的源码采用UTF-8的编码方式,UTF-8字符占用1~4个字节。Go的字符采用一对单引号包裹。例如:'a''本''\n''\000''\x0f''\u12e4'
  • 字符串字面量Go中的字符串字面量表现形式是采用一对双引号或一对反引号 “ ` ” 包裹的字符字面量或其编码值。

1.3 常量命名规范

  • 只能由数字、字母、下划线(_)组成;
  • 不能以数字开头;
  • 大写字母和小写字母是不同的,但是建议全部大写;
  • 不能是关键字;
  • 见名知意;
  • 多个单词组成的名称,使用全大写字母书写,每个单词之间使用下划线(_)分隔。
    • 示例:const APP_VER = "0.7.0.1110 Beta"

二、运算符

\quad Golang中运算符是一种特殊的符号,用以表示数据的运算赋值比较等。

2.1 算术运算符

\quad 在Golang中,算术运算符是对数值类型的变量进行运算的,比如:加、减、乘、除和取模。
Go语言基础(常量、运算符)

  • 除法运算/,如果是整数之间做除法运算时,只保留整数部分而舍弃小数部分。
  • 除法(/)和取模(%)运算除数不能为0
  • Golang中的自增运算和自减运算只能当做一个独立语句使用,Golang中只支持后自增和后自减。在Golang中,+可以用于字符串的拼接。

案例1

  • 输入半径,计算圆的面积和周长并打印出来(PI3.14
    func main() {
    	const PI = 3.14
    	var radius float64
    	fmt.Print("请输入圆的半径:")
    	fmt.Scanf("%f", &radius)
    	area := PI * radius * radius
    	circumference := 2 * PI * radius
    	fmt.Printf("半径为%.2f的圆的周长为:%.2f,面积为:%.2f", radius, circumference, area)
    }
    
    Go语言基础(常量、运算符)

案例2

  • 某学生三门课成绩为:语文90、数学89、英语69,编程求总分与平均分
    func main() {
    	var chinese int16 = 90
    	var math int16 = 89
    	var english int16 = 69
    	total := chinese + math + english
    	average := float64(total) / 3
    	fmt.Printf("语文、数学和英语三科总分:%d,平均分:%.2f", total, average)
    }
    
    Go语言基础(常量、运算符)

案例3

  • 问题1:某商店T恤(T-shirt)的价格为35元/件,裤子(trousers)的价格为120元/条。小明在该店买了3T恤和2条裤子,并且打8.8折。请计算并显示小明应该付多少钱?
  • 问题2:如上题中打完8.8折后出现小数,商店为了结算方便,只收用户整数部分的钱,例如:本应收用户303.6,现在只收用户303元,应该如何做?
    func main() {
    	const T_shirt int64 = 35
    	const trousers int64 = 120
    	total := float64(T_shirt*3+trousers*2) * 0.88
    	fmt.Printf("小明应该付:%.2f元\n", total)
    	fmt.Printf("只收取小明整数部分的钱:%d元", int(total))
    }
    
    Go语言基础(常量、运算符)

案例4

  • 使用+运算符,实现字符串拼接。
    func main() {
    	var str1 = "Xin"
    	var str2 = "Dong"
    	var str = str1 + str2
    	fmt.Println(str)
    }
    

2.2 赋值运算符

\quad 在Golang中,赋值运算符是对已存在的变量进行重新设置新值的运算符。

  • 十进制运算
    Go语言基础(常量、运算符)
  • 二进制运算
    Go语言基础(常量、运算符)
    • 对于正数来说,左移相当于乘以2,左移N位,就是乘以2N次方(效率比乘法高)。
    • 对于正数来说,右移相当于除以2,右移N位,就是除以2N次方(效率比乘法高)。
  • 注意算术运算符与赋值运算符连用时算术运算符优先级高于赋值运算符

2.3 关系运算符

\quad 在Golang中,关系运算符的结果都是bool型,也就是要么是true,要么是false。关系表达式经常用在if结构的条件中或循环结构的条件中。
\quad Go语言基础(常量、运算符)

  • 注意算术运算符、关系运算符和赋值运算符连用时算术运算符优先级高于关系运算符关系运算符优先级高于赋值运算符

2.4 逻辑运算符

\quad 在Golang中,逻辑运算符是用于连接多个条件(一般来讲就是关系表达式),最终的结果也是一个bool值。
Go语言基础(常量、运算符)

2.5 指针运算符

\quad 在Golang中,指针运算符主要包括取地址运算符&取值运算符*
\quad Go语言基础(常量、运算符)

2.6 位运算符

\quad 在Golang中,位运算符主要是用于数值类型的二进制的运算。
Go语言基础(常量、运算符)

2.7 运算符优先级

\quad 我们知道,在数学运算中,有“先乘除后加减”的运算规则,在我们程序语言中一样有运算符的优先级问题。

\quad 所谓运算符的优先级,指的是在含有多个逻辑运算符的式子中,到底应该先计算哪一个,后计算哪一个。

\quad Go语言中运算符的运算规则是,优先级高的运算符先执行优先级低的运算符后执行同一优先级的运算符按照从左到右的顺序进行

\quad 需要注意的是,Go语言中大部分运算符都是从左向右执行的,只有单目运算符、赋值运算符它们是从右向左执行的。

\quad Go语言运算符中,如果有小括号,即(),则小括号的优先级最高。
Go语言基础(常量、运算符)

  • 单目运算符是指运算所需变量为一个的运算符,即在运算当中只有一个操作数。
    • 例:++--!&*(指针)、&+(正号)、-(负号)
  • 运算所需变量为两个的运算符叫做双目运算符。
    • 例:+-*/<=>= 等等。

案例

  • 让用户输入一个年份,如果是闰年,则输出true,如果不是,则输出false
    • 闰年的判定(符合下面两个条件之一):
      • 年份能够被400整除;
      • 年份能够被4整除,但是不能被100整除。
    func main() {
    	var year int64
    	fmt.Print("请输入一个年份:")
    	fmt.Scanln(&year)
    	var b bool = (year%4 == 0 && year%100 != 0 || year%400 == 0)
    	fmt.Printf("%d年是闰年吗?%t", year, b)
    }
    
    Go语言基础(常量、运算符)
    Go语言基础(常量、运算符)
上一篇:golang笔记-区块链密码学01


下一篇:Golang与对称加密