继golang第一天后,今天学习下golang的变量、常量、数据类型和控制流语句。
做过其他编程语言(比如JavaScript,java,python)项目的话,其实很好理解变量、常量、数据类型和控制流。
变量也被称为“变数”,是反映事物运动变化状态的量,比如汇率、房贷利率、贷款利率。
常量也被称“常数”,是反映事物相对静止状态的量,一旦定义,后续不能更改,比如圆周率PI。
Golang是不同于JavaScript和python,但它和java一样,是一种静态类型的编程语言,就是说定义变量或常量前需要声明其类型
1. 变量
1.1 声明一个变量
变量在使用前需要声明,例如
输出如图
1.2 自动推导变量类型
也可以用另一种写法,根据值推导变量的类型
输出结果
1.3 速记法定义变量
还有一种更简洁的写法
1.4 定义多个变量
真正开发时我们需要定义多个变量,比如一个用户有姓名,年龄,性别,地址,城市等多个字段
我是用1.1的写法定义变量的
输出结果
1.5 函数式变量
JavaScript中这种定义很常见,一个变量可以是任何类型,包括函数,golang也支持,真是融合了好几种语言的特性,java并不支持
输出结果
2 常量
常量定义和变量类似,只是多了个关键字const
输出结果
常量小结:Constants can only be character, string, boolean, or numeric values and cannot be declared using the :=
syntax. An untyped constant takes the type needed by its context.
3. 数据类型
分两种:基本数据类型和derived派生数据类型,在此只先介绍基本的数据类型,后一种以后单独介绍
3.1 基本数据类型
基本数据类型又有以下几种类型:布尔bool,字符串string,数值型number,复数型数据类型
3.1.1 布尔bool
bool类型表示布尔逻辑,它的值要么为true,要么为false
以上代码中,定义了 变量have并赋值为true和变量nohave并赋值为false
变量result_and被赋值为false,因为逻辑操作符&&表示两边的值都为true的情况下才返回ture,例子中只有have为true,故运算结果为false。
变量result_or被赋值为true,因为逻辑操作符||表示两边的值只要有一个为true的情况下就返回ture了,例子中刚好有have为true,故运算结果为true。
执行以上输出以下结果
理论分析是正确的
3.1.2 字符串String类型
字符串是字节的集合,存储了字符序列。
输出结果:
3.1.3 数值型
数值型细分有以下几种
整数式
浮点数
复数计算
由于数值型可能会参数数学计算,但golang本身没有自动转换功能,故需要手工显示转换数据类型
但是有例外情况
输出结果
没有像其他语言转换后有标志10.0f
4. 流程语句
分三种:if条件/if else, loop循环,switch
4.1 if, if else
4.1.1 if语句
用于指定是否应执行相应的代码块,语法结构:
例如
输出结果
Note that, You can omit the parentheses () from an if statement in Golang, but the curly braces {} are mandatory -
注意,在golang的世界里你可以不使用if后面的插入语(),但是后面的花括号是必须的,示例
4.1.2 If-Else语句
一个if语句能配合else语句块使用,当if里的条件为false,else语句块的逻辑代码会被执行,代码结构
示例代码
输出结果
4.1.3 If-Else-If链
if语句能够有多个else语句块,例如
4.1.4 if短语句
if语句允许在条件表达式之前包含一个简短的声明语句
特别留意: The variable declared in the short statement is only available inside the if block and it’s else or else-if branches ,
If you’re using a short statement, then you can’t use parentheses. 如下代码会报错
4.2 循环Loop
循环用于重复运行代码块,golang 只要一种循环语句l:the for loop,结构如下
初始化语句initialization 在循环的第一次迭代之前执行一次。在每次迭代中,都会检查条件condition,如果条件的计算结果为true,则执行循环体,否则,循环终止。增量语句increment 在每次迭代结束时执行。示例代码:
看,它不需要java一样需要插入语。
特别注意: for循环中的initialization和increment语句都是可选的,可以省略掉,如下
省略掉初始化语句
省略掉增量语句
最后,您还可以从Golang中的for循环中省略该条件,这将给你一个无限循环
终止break语句
您可以使用break语句在循环正常终止之前中断循环,比如
输出
continue语句
continue语句用于中途停止循环体的运行,并继续到循环的下一次迭代。
输出结果
无线循环infinite loop
语法结构如下
4.3 Switch
Switch语句接受一个表达式,并将其与可能的情况列表相匹配。一旦找到匹配项,它将执行匹配大小写中指定的代码块。
示例代码
特别注意:
Go从上到下逐一评估所有开关案例,直到案例成功为止。 案例成功后,它将运行该案例中指定的代码块,然后停止(不评估其他任何案例)。
这与其他语言(例如C,C ++和Java)相反,在C,C ++和Java中,您明确需要在每个案例的主体之后插入break语句以停止对后续案例的评估。
如果没有任何一种情况成功,则执行默认情况。
4.3.1 Switch和简短的语句
就像if一样,switch也可以在条件表达式之前包含一个简短的声明语句。 如下
注意: 唯一的区别是,由简短语句声明的变量仅在switch块内部可用。
4.3.2 case情况下多表达式
通过用逗号将多个表达式分隔开,可以包含多个表达式。
4.3.3 没有表达式的switch
开关中的表达式是可选的,可以省略。 如果省略该表达式,则认为该开关为true,并且评估每个case表达式的真性并执行相应的代码块。
4.3.4类型type switch
switch也可以用来发现接口变量的动态类型。 这种类型开关使用括号内带有关键字type的类型断言的语法
如果switch在表达式中声明了变量,则该变量在每个子句中将具有相应的类型。 在这种情况下重用名称也是惯用的,实际上是在每种情况下声明一个具有相同名称但类型不同的新变量。
示例代码有趣
输出结果
4.3.5 组合多个switch case(结合上面的案例4.3.1和4.3.2)
代码如下
总结: 语言学的知识是相通的,用不到十一就能结束,语法不需要花太多时间学,就好比园区很多码农(java本身的知识点再加上spring生态圈里的知识点,并没有全部学完,甚至有的概念都不知道,其实并不影响干活),60%~80%的知识点就够普通开发了,golang更像是大杂烩,有C的味道,又有JavaScript的口感,看上去有时又像java!!!
参考:
-
What’s the Go language really good for? https://www.infoworld.com/article/3198928/whats-the-go-language-really-good-for.html
-
Golang for loop https://m.youtube.com/watch?feature=youtu.be&v=rO11gboBY3M&fbclid=IwAR0LS6yzU0DksIEkl8neo6pDT31WsmFUwCZoU77RYrcpvcEYhtO22zSCpOs