变量,数据类型,运算符,流程控制和python中的对比

1|0一、变量

1|11. 相同的部分

  • 都只能由数字、字母、下划线组成变量名

1|22. 不同的部分

1|0(1)python

  • python中的常量只是一种习惯,可以改变
  • python的变量名不能只是以数字开头就行
  • python的变量声明直接是:变量名 = 变量值

1|0(2)golang

  • golang中的常量不能改变,定义常量:const pi = 3.1415
  • golang的变量名叫做标识符,只能以字母或下划线开头
  • golang的变量声明要以var开头并且指定变量的类型:var 变量名 变量类型var 变量名 类型 = 表达式

2|0二、基本数据类型

2|11. 相同的部分

  • 都有整型,浮点型,字符串,布尔类型
  • python中的列表就是golang中的一维数组

2|22. 不同的部分

1|0(1)python

  • python中有独自的列表、元组、字典、集合
  • python中布尔值为首字母大写

1|0(2)golang

  • golang中有独自的复数类型,byte和rune类型,二维、三维数组
  • golang中布尔值为全小写

3|0三、运算符

3|11. 相同的部分

  • 都有算术运算符,逻辑运算符,位运算符,赋值运算符

  • golang中的关系运算符就是python中的比较运算符

3|22. 不同的部分

  • python中多了一个成员运算符,即in

4|0四、流程控制

4|11. 相同的部分

  • 都有if判断,且都有单分支和多分支结构
  • 都有for循环
  • 都有break,continue,他们的作用在python和golang中都是相同,只是用法上有点差别

4|22. 不同的部分

1|0i. python部分

  • python的流程控制中有if,for,whilebreak 和 continue都可用在for,while循环中

  • 多分支中使用if...elif...else...

  • python中直接条件后面跟冒号,换行缩进下写代码

  • python中for循环都是用关键字in一个可迭代对象或迭代器,后面跟冒号,换行缩进下写代码

1|0ii. golang部分

  • golang的流程控制中有if,for,switch,gotobreak语句可以结束forswitchselect的代码块。continue语句仅限在for循环内使用
  • break 和 continue的后面都可以跟一个标签。标签要求必须定义在对应的forswitchselect的代码块上
  • break后面跟标签表示退出这个标签对应的代码块。continue后面跟标签表示结束当前循环开始标签对应的循环

1|01. if判断

  • 多分支中使用if...else if...else if...else...

  • Go语言规定与if匹配的左括号{必须与if的条件表达式放在同一行,{放在其他位置会触发编译错误。 同理,与else{也必须与else写在同一行,else还必须与上面一个ifelse if的右大括号在同一行

    • 基本语法
    基本语法,格式必须这样写: // 单分支判断 if 条件表达式 { // 代码块 } // 多分支判断 if 条件表达式1 { // 条件和 { 写在同一行 // 代码块 } else if 条件表达式2 { // 条件和 { 写在同一行,且和前面一个判断结尾的 } 写在同一行 } else { }
    • 实例
    1. 基本if判断 func ifDemo1() { score := 65 if score >= 90 { fmt.Println("A") } else if score >= 75 { fmt.Println("B") } else { fmt.Println("C") } } 2. if判断特殊写法(在 if 表达式之前添加一个执行语句,再根据变量值进行判断) func ifDemo2() { if score := 65; score >= 90 { fmt.Println("A") } else if score >= 75 { fmt.Println("B") } else { fmt.Println("C") } }

1|02. for循环

  • Go 语言中的所有循环类型均可以使用for关键字来完成,包括无限循环。

  • for循环可以通过breakgotoreturnpanic语句强制退出循环,continue跳出当前循环,break、continue的作用和python中是一样的

    • 实例
    // for循环的基本格式如下: for 初始语句;条件表达式;结束语句{ 循环体语句 } // 1. for循环普通写法 func forDemo() { for i := 0; i < 10; i++ { fmt.Println(i) } } // 2. for循环的初始语句可以被忽略,但是此时初始语句后的分号必须要写 func forDemo2() { i := 0 for ; i < 10; i++ { fmt.Println(i) } } // 3. for循环的初始语句和结束语句都可以省略,例如: func forDemo3() { i := 0 for i < 10 { fmt.Println(i) i++ } } // 4. 同时声明多个条件变量 func forDemo4() { for no, i := 10, 1; i <= 10 && no <= 19; i, no = i+1, no+1 { fmt.Printf("%d * %d = %d\n", no, i, no*i) } } // 打印结果 10 * 1 = 10 11 * 2 = 22 12 * 3 = 36 13 * 4 = 52 14 * 5 = 70 15 * 6 = 90 16 * 7 = 112 17 * 8 = 136 18 * 9 = 162 19 * 10 = 190 // 5. 无限循环 for { 循环体语句 }

1|03. for range键值循环

  • for range的作用和python中的enumerate方法作用相同。

  • Go语言中可以使用for range遍历数组、切片、字符串、map 及通道(channel)。 通过for range遍历的返回值有以下规律:

    1. 组、切片、字符串返回索引和值。
    2. map返回键和值。
    3. 通道(channel)只返回通道内的值。
  • 实例

func main() { var a = [...]string{"北京","上海", "深圳"} for index, value := range a { fmt.Println(index, value) } }

1|04. switch case

  • 使用switch语句可方便地对大量的值进行条件判断,被认为是替代多分支 if else 的常用方式
  • 所有case中的条件不允许出现重复项
  • Go语言规定每个switch只能有一个default分支,default相当于else的意思,default分支不是必须写上的
1|0(1)基本语法
1. 第一种 初始语句 switch 表达式 { case 条件表达式1: // 代码块1 case 条件表达式2: // 代码块2 ... default: // 代码块2 } 2. 第二种 switch 初始语句;表达式 { case 条件表达式1: // 代码块1 case 条件表达式2: // 代码块2 ... default: // 代码块2 } // 实例: // switch case 第一种 func switchDemo1() { finger := 3 switch finger { case 1: fmt.Println("大拇指") case 2: fmt.Println("食指") case 3: fmt.Println("中指") case 4: fmt.Println("无名指") default: fmt.Println("无效的输入!") } } // switch case 第二种 func switchDemo2() { switch finger := 3;finger { case 1: fmt.Println("大拇指") case 2: fmt.Println("食指") case 3: fmt.Println("中指") case 4: fmt.Println("无名指") default: fmt.Println("无效的输入!") } } // 在上述程序中,switch finger 将 finger 的值与每个 case 语句进行比较。通过从上到下对每一个值进行对比,并执行与选项值匹配的第一个逻辑,所以执行后会打印 中指
1|0(2)case 一个分支中多值
// switch case 一个分支有多个值 func switchDemo3() { switch n := 7; n { case 1, 3, 5, 7, 9: fmt.Println("奇数") case 2, 4, 6, 8: fmt.Println("偶数") default: fmt.Println(n) } }
1|0(3)case 分支中使用表达式
// 分支还可以使用表达式,这时候switch语句后面不需要再跟判断变量 // 这种类型的 switch 语句可以替代多个 if else 子句 func switchDemo4() { age := 30 switch { // switch 后面不能跟 age 了 case age <= 25: fmt.Println("好好学习吧") case age > 25 && age < 35: fmt.Println("好好工作吧") case age >= 60: fmt.Println("好好享受吧") default: fmt.Println("活着真好") } }
1|0(4)fallthrough关键字用法
// fallthrough语法可以执行满足条件的case的下一个case(和下一个case的条件无关,直接执行其内部的代码块),是为了兼容C语言中的case设计的 func switchDemo5() { s := "a" switch { case s == "a": fmt.Println("a") fallthrough case s == "b": fmt.Println("b") case s == "c": fmt.Println("c") default: fmt.Println("...") } } // 输出: a b

1|05. goto

  • goto语句通过标签进行代码间的无条件跳转。

  • goto语句可以在快速跳出循环、避免重复退出上有一定的帮助

  • Go语言中使用goto语句能简化一些代码的实现过程

  • 实例

    // 例如普通写法的双层嵌套的for循环要退出时: func gotoDemo1() { var breakFlag bool for i := 0; i < 10; i++ { for j := 0; j < 10; j++ { if j == 2 { // 设置退出标签 breakFlag = true break } fmt.Printf("%v-%v\n", i, j) } // 外层for循环判断 if breakFlag { break } } } // 使用goto语句能简化代码: func gotoDemo2() { for i := 0; i < 10; i++ { for j := 0; j < 10; j++ { if j == 2 { // 设置退出标签 goto breakTag } fmt.Printf("%v-%v\n", i, j) } } // 标签 breakTag: fmt.Println("结束for循环") }

1|06. break 和 continue实例

1. break 实例 func breakDemo1() { BREAKDEMO1: for i := 0; i < 10; i++ { for j := 0; j < 10; j++ { if j == 2 { break BREAKDEMO1 } fmt.Printf("%v-%v\n", i, j) } } fmt.Println("...") } /* break BREAKDEMO1 标签表示第一次j等于2时,结束所有的for循环 打印结果: 0-0 0-1 ... */ 2. continue 实例1 func continueDemo1() { forloop1: for i := 0; i < 5; i++ { // forloop2: for j := 0; j < 5; j++ { if i == 2 && j == 2 { continue forloop1 // continue forloop2 } fmt.Printf("%v-%v\n", i, j) } } } /* continue forloop1 标签表示结束i等于2时,j的3,4部分的循环,所以没有打印 2-2 2-3 2-4 打印结果: 0-0 0-1 0-2 0-3 0-4 1-0 1-1 1-2 1-3 1-4 2-0 2-1 3-0 3-1 3-2 3-3 3-4 4-0 4-1 4-2 4-3 4-4 */ 3. continue 实例2 func continueDemo2() { //forloop1: for i := 0; i < 5; i++ { forloop2: for j := 0; j < 5; j++ { if i == 2 && j == 2 { // continue forloop1 continue forloop2 } fmt.Printf("%v-%v\n", i, j) } } } /* continue forloop2 标签表示结束i等于2,j等于2时的循环,所以没有打印 2-2 打印结果: 0-0 0-1 0-2 0-3 0-4 1-0 1-1 1-2 1-3 1-4 2-0 2-1 2-3 2-4 3-0 3-1 3-2 3-3 3-4 4-0 4-1 4-2 4-3 4-4 */

__EOF__

本文作者BigSun丶
本文链接https://www.cnblogs.com/Mcoming/p/11973467.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   BigSun丶  阅读(399)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示