zoukankan      html  css  js  c++  java
  • 初识 go 语言:语法

    前言: go语言系列第二篇,主要讲述go语言的语法,如循环,if判断,swich语句,defer语句,defer栈等,每个语法都对比java中的语法进行了讲解,每个都提供了概念+示例的结合,示例都可直接运行。
    本想着将go语言的语法与数据类型写在一章,写完语法之后发现如果在写数据类型的话就文章篇幅就太长了,所以数据类型就放到下一章去写了。
    按照系列文章去学习,所有示例都敲一遍的话,系列文章学完,你的go语句也就入门了


    语法

    for 循环

    go语言中只有一种循环结构就是:for 循环,与java中的for循环相似,不同是for 关键词后没有小括号(),大括号{}必须添加。

    // 基本结构:
    for 初始化语句;判定条件;后置语句{ 
    	 方法体 
    }
    

    如:

    func main() {
    	for i := 0; i < 10; i++ {
    		fmt.Println("当前值", i)
    	}
    }
    

    for循环中最重要的就是判定条件,一旦条件表达式值为false,则循环迭代终止;
    使用for关键词修饰,有判定条件,就可以形成是一个for循环,所以上面的for循环还可以写成这样(也可以后置语句提到判定条件后自己试试效果):

     func main() {
    	i := 0
    	for i < 10 {
    		i = i + 1
    		fmt.Println("当前值", i)
    	}
    }
    

    if 语句

    Go 的 if 语句与 for 循环类似, 表达式后没有小括号(),大括号{}必须添加。
    如:

    func main() {
    	testIf(2)
    }
    func testIf(x int) {
    	if x > 10 {
    		fmt.Println("say hello")
    	} else {
    		fmt.Println("say no")
    	}
    }
    

    for循环语句可以有变体,当然if语句也有了:

    func main() {
    	testSimpleIf(2)
    }
    func testSimpleIf(x int) {
    	if y := 9 + x; y > 10 {
    		fmt.Println("say hello")
    	} else {
    		fmt.Println("say no")
    	}
    }
    

    if语句中,可以将初始化语句放到判定条件前,只不过变量的作用域只能在if条件中,for循环也是一样,如果初始化语句在for循环中,作用域同样在for循环内。

    switch 语句

    go 中swich语句就是一系列的 if - else 语句的简写。匹配上条件表达式的值就执行case 语句,否则默认执行default。
    与java中的swich语句基本一致,不同点在于每个case 语句中不用在显示的去写break了,Go 自动提供了在每个 case 后添加了 break。

    func main() {
    	testSwich(3)
    }
    
    func testSwich(x int) {
    	switch x {
    	case 1:
    		fmt.Println("1")
    	case 2:
    		fmt.Println("2")
    	default:
    		fmt.Println("default")
    	}
    
    }
    

    还有一点不同就是:switch 的 case 不用一定是常量,也可以是表达式,所以一连串的 if - else 可以写成这样了。
    如:

    func testTrueSwich() {
    	switch {
    	case 1 > 1:
    		fmt.Println("1")
    	case 2 < 3:
    		fmt.Println("2")
    	default:
    		fmt.Println("default")
    	}
    }
    

    defer 语句

    使用defer修饰的函数会推迟到外层函数返回之后执行;
    推迟调用的函数其参数会立即求值,但直到外层函数返回后该函数才会被调用。
    
    func main() {
    	defer fmt.Println("可以你先")
    	fmt.Println("我先说")
    }
    

    执行后输出: 我先说 可以你先

    defer 栈

    defer 栈 顾名思义:就是推迟执行的一系列的函数,将函数按顺序入栈。
    栈的数据就是先进后出,所以就是以为这先入栈的函数会最后在执行,执行下面的示例看下输出结果,有不明白的也明白了。
    
    func testDefer() {
    	fmt.Println("开始")
    	for i := 0; i < 10; i++ {
    		defer fmt.Println("当前值", i)
    	}
    	fmt.Println("结束")
    }
    

    ##结束 **初识 go 语言系列** - [x] 初识 go 语言 - [x] 初识 go 语言:语法 - [ ] 初识 go 语言:数据类型 - [ ] 初识 go 语言:方法,接口及并发

    关注公众号
    关注我的公众号

  • 相关阅读:
    【人生苦短,我学Python】个人学习笔记——str.count方法
    微信支付问题解决
    针对listview上面的按钮点击事件的操作
    Android界面之间的跳转和返回
    贪吃蛇
    数据库的连接
    Android中实现圆的面积的计算问题
    关于安卓环境的搭建问题
    python 获取cpu、内存、硬盘等实时信息 psutil
    python 配置文件
  • 原文地址:https://www.cnblogs.com/cmyxn/p/9276903.html
Copyright © 2011-2022 走看看