Go语言基础——数据类型和运算符
基础数据类型
- 在GO语言中,还有很多其它的类型,如下:
布尔类型
- 布尔类型的变量取值要么是真(true),要么是假(false),用bool关键字来进行定义。
例:
package main
import "fmt"
func main() {
/* var a bool
//bool类型一般用于条件判断
a = true
fmt.Println(a) */
//自动推导类型创建bool类型变量
a := true
//fmt.Println(a)
fmt.Printf("%T\n", a)
b := 10
fmt.Printf("%T\n", b)
}
- %t是一个占位符,表示输出一个变量对应的数据类型
整型
var a int = 10
b := 10
- int类型会根据操作系统位数不同在内存中占的字节也不同
- 在64位操作系统下定义整型变量:int64 64(单位:位)
浮点型
- 浮点型数据分为:单精度浮点型 float32(小数位数为7位),双精度浮点型 float64(小数位数为15位)
- float64比float32更精确
- 通过自动推导类型创建的浮点型变量,默认类型我float64
例:
func main() {
var a float64 = 1234.456
//保留六位小数数据更精准
fmt.Printf("%f\n", a)
}
字符类型
- byte字符类型,同时也是uint8的别名
func main() {
var a byte = 'a'
//所以的字符都对应ASCII中的整型数据
//fmt.Println(a)
fmt.Printf("%c",a)
}
- %c是一个占位符,表示打印输出一个字符
- 计算机不能直接存储字符类型,只能转成数字存储。
- 计算机是根据’ASCII’码来存储。
将小写字母转换成大写字母输出
func main() {
var a byte = 'a'
fmt.Printf("%c",a-32)
}
转义字符
\n
换行\"
表示一个英文半角的双引号\0
对应ASCII值为0,用于字符串的结束标准\t
表示一个tab键的空格,一次跳8个空格
字符串类型
- 用单引号括起来的单个字符是字符类型,用双引号括起来的字符是字符串类型。
例:
func main() {
var a string = "blank"
fmt.Printf("%s", a)
}
- len函数:用来计算字符串字符个数,不包括\0,返回值为int类型
例:
func main() {
a := "hello world"
count := len(a)
fmt.Println(count)
}
注:在go语言中,一个汉字占3个字节,为了和linux进行统一处理
- 字符串连接
例:
func main() {
str1 := "CSDN:"
str2 := "DTRblank"
str3 := str1 + str2
fmt.Println(str3)
}
fmt输出输入
- go语言中的格式化输入输出:
- 二进制不能在go语言中直接表示
- 八进制数据是以0开头,最大值为7
- 十六进制数据是以0x开头
常量
- 常量存储一直不会发生变化的数据
- 常量可以参与程序的计算
func main() {
//常量的定义
const a int = 10
b := a + 10
fmt.Println(a)
}
- 常量不允许左值赋值
a = a + 10 //err
a = 100 //err
- go语言中常量的地址不允许访问
- 常量必须定义
例:
package main
import "fmt"
func main() {
//计算圆的面积和周长
// PI 3.14
const PI float64 = 3.14
var r float64
fmt.Scan(&r)
s := PI * r * r
l := 2 * PI * r
fmt.Printf("面积:%.2f\n", s)
fmt.Printf("面积:%.2f\n", l)
}
iota枚举
- 常量声明可以使用iota常量生成器初始化,它用于生成一组以相似规则初始化的常量,但是不用每行都写一遍初始化表达式。
- 在定义iota枚举时,可以自定义赋值
func main() {
//iota枚举
const(
a = iota //0
)
fmt.Printf("a=%d\n",a)
}
注:在一个const声明语句中,在第一个声明的常量所在的行,iota将会被置为0,然后在每一个有常量声明的行加一。
运算符
算术运算符
例:
func main() {
a := 10
a++ //11
fmt.Println(a)
}
- a++ = a + 1
注:
1.取余运算符除数不能为0
2.取余运算符不能对浮点型使用
3.GO语言中没有前自增,这是与其它编程语言不同的地方。
4.自增自减可以对浮点型进行运算,但是不能对常量进行自增自减运算
5.自增自减不能出现在表达式中。二义性,在不同操作系统中运算方式不同,结果可能会产生偏差。
例:
a = a ++ + a-- //err
类型转换
数据类型(变量)
数据类型(表达式)
例:
func main() {
a, b, c := 0, 0, 0
fmt.Scan(&a, &b, &c)
sum := a + b + c
fmt.Println(sum)
fmt.Printf("%.2f", float64(sum)/3)
}
- int8 --> int16 --> int32 -->int64
- float32–> float64
- 在类型转换时建议低类型转成高类型,保证数据精度
- 高类型转换低类型,可能会丢失精度,数据溢出,符号发生变化
注:Go语言中不允许隐式转换,所有类型转换必须显式声明(强制转换),而且转换只能发生在两种相互兼容的类型之间
例:
func main() {
var ch byte = 79
//var a int = ch //err
var a int = int(ch)
}
赋值运算符
- 赋值运算符
=
=
号是赋值运算符,不是数学义意上的相等
关系运算符
- 关系运算的结果是布尔类型的。
- bool值只有两个。真:true,假:false
- GO语言中常见的关系运算符如下:
逻辑运算符
- 有逻辑运算符连接的表达式叫做逻辑表达式
- 逻辑表达式的结果同样也是bool类型
- 常见的逻辑运算符如下:
- 逻辑与 && (表达式1&&表达式2) 同真为真,其余为假
- 逻辑或 ||(表达式1&&表达式2) 同假为假,其余为真
- 逻辑非 ! (表达式1&&表达式2) 非真为假,非假为真
注:逻辑与的优先级高于逻辑或
其他运算符
运算符优先级
- 一元运算符(一些只需要一个操作数的运算符称为一元运算符(或单目运算符)。)拥有最高的优先级,二元运算符的运算方向均是从左至右。
- 下表列出了所有运算符以及它们的优先级,由上至下代表优先级由高到低: