四月二十二日报
今日学习内容
Go语言中的常量,变量,基本类型和运算符
1.1常量:使用关键字const定义,用于存储不会改变的数据,数据类型只可以是布尔型,数字型(整数,浮点)和字符串型。
- 显式类型定义:
const b string ="abc"
- 隐式类型定义:
const b ="abc"
常量的值必须是能够在编译时就能够确定的;你可以在其赋值表达式中涉及计算过程,但是所有用于计算的值必须在编译期间就能获得。
- 正确的做法:
const c1 = 2/3
- 错误的做法:
const c2 = getNumber()
// 引发构建错误:
常量还可以用作枚举(itoa可以被用作枚举值):
const(
a =0
b =1
c =2
)
1.2变量:声明变量一般形式是使用var
关键字
C语言中int* a, b;
只有 a 是指针而 b 不是。如果你想要这两个变量都是指针,则需要将它们分开书写。在Go中可以这样写var a,b *int
,可以将a,b都声明为指针类型,这种语法能够按照从左到右顺序阅读,使得代码更容易理解。也可以这么写
var(
a int
b bool
str string
)
当一个变量被声明之后,系统自动赋予它该类型的零值:int 为 0,float 为 0.0,bool 为 false,string 为空字符串,指针为 nil。记住,所有的内存在 Go 中都是经过初始化的。
一般情况下,当变量a和变量b之间类型相同时,才能进行如a = b
的赋值,Go 编译器已经可以根据变量的值来自动推断其类型了,如下
var a = 15
var b = false
var str = "Go says hello to the world!"
或
var (
a = 15
b = false
str = "Go says hello to the world!"
)
当你在函数体内声明局部变量时,可以使用简明语法a:=1
同一类型的多个变量可以声明在同一行,如:
var a, b, c int
在赋值时也可以写在同一行
a, b, c = 5, 7, "abc"
上面这行假设了变量 a,b 和 c 都已经被声明,否则的话应该这样使用:(并行赋值)
a, b, c := 5, 7, "abc"
1.3基本类型和运算符:
-
布尔类型bool
var b bool = true
布尔型的值只可以是常量 true 或者 false。
两个类型相同的值可以使用相等
==
或者不等!=
运算符来进行比较并获得一个布尔型的值。 -
数字类型
整数:
- int8(-128 -> 127)
- int16(-32768 -> 32767)
- int32(-2,147,483,648 -> 2,147,483,647)
- int64(-9,223,372,036,854,775,808 -> 9,223,372,036,854,775,807)
无符号整数:
- uint8(0 -> 255)
- uint16(0 -> 65,535)
- uint32(0 -> 4,294,967,295)
- uint64(0 -> 18,446,744,073,709,551,615)
浮点型:
- float32(+- 1e-45 -> +- 3.4 * 1e38)
- float64(+- 5 1e-324 -> 107 1e308)
-
格式化说明符
在格式化字符串里,
%d
用于格式化整数(%x
和%X
用于格式化 16 进制表示的数字),%g
用于格式化浮点型(%f
输出浮点数,%e
输出科学计数表示法),%0d
用于规定输出定长的整数,其中开头的数字 0 是必须的。%n.mg
用于表示数字 n 并精确到小数点后 m 位,除了使用 g 之外,还可以使用 e 或者 f,例如:使用格式化字符串%5.2e
来输出 3.4 的结果为3.40e+00
。 -
数字值转换
当进行类似
a32bitInt = int32(a32Float)
的转换时,小数点后的数字将被丢弃。这种情况一般发生当从取值范围较大的类型转换为取值范围较小的类型时,或者你可以写一个专门用于处理类型转换的函数来确保没有发生精度的丢失。