Go结构化编程-流程控制

一. 结构化编程

1. 什么是结构化编程

  • 结构化编程是以函数为单元自上而下按功能划分强调某个功能的算法。
  • 结构化编程的流程控制包括:顺序结构条件结构循环结构

2. 与面向对象的区别

  • 面向对象的基本思想是使用类, 对象, 继承, 封装, 消息等基本概念进行程序设计。
  • 类是对象的抽象, 对象是类的实例化,类的封装使得程序具有了高内聚, 低耦合特性。
  • 封装性:将对象的实现细节隐藏起来, 通过一些公共的接口方法来供外部调用对象的功能。
  • 继承性:子类继承父类, 子类直接获得父类的非private属性和方法(共性)。
  • 多态性:子类对象在执行同一个方法时, 可能表现出不同的特征(个性)。

二. 顺序结构

  • go提供了两个保留函数:init和main,且只能由GO程序自动调用
  • init初始化函数,可以在一个包或文件中出现多次(0次或n次)。
  • 只有main包中的main函数可以作为入口函数,且只能包含一个main函数。
  • 一个包被多处导入时,实际只会被导入一次,如:fmt包。
  • 包导入顺序是:内向外递归执行顺序常量>变量>init(),如下图:
    在这里插入图片描述
package main

func init() {
    println("init1")
}
func init() {
    println("init2")
}
func main() {
    println("main")
}

三 .条件结构

条件结构有if语句switch语句select语句,遵循自上而下先配先得原则。

1. if 语句

func Foo(n int) {
   if n < 60 {
      fmt.Println("flunk")
   } else if n < 80 {
      fmt.Println("pass")
   } else {
      fmt.Println("excellent")
   }
}

2. Switch 语句

  • Switch的表达更为丰富,有范围匹配(布尔匹配)精准匹配(常量匹配、类型匹配),且精准匹配不可重叠
  • Switch可省略break,增加了fallthrough(鸡肋),且fallthrough只对常量匹配有效,default位置任意
// 布尔匹配
func Foo(x int) string {
   switch {
   case x < 60:
      return "flunk"
   case x < 80:
      return "pass"
   default:
      return "excellent"
   }
}
// 常量匹配
func Bar(x int) {
   switch x {
   case 1, 2, 3:
      fmt.Println("差评")
   case 4:
      fmt.Println("Next Case")
      fallthrough
   case 5:
      fmt.Println("警告")
   case 6, 7:
      fmt.Println("一般")
   default:
      fmt.Println("好评")
   }
}
// 类型匹配
func Baz(o interface{}) {
   switch o.(type) {
   default:
      fmt.Println("Other")
   case bool:
      fmt.Println("Boolean")
   case int, int64, float32, float64:
      fmt.Println("Number")
   case string, []byte:
      fmt.Println("String")
   }
}

四. 循环结构

1. For循环

  • 循环结构有基础循环条件循环无限循环,其中条件循环和无限循环都是基础循环的衍生结构
  • 基础循环: for 初始化;条件;步进;条件结构: 即for;exp; ;无限循环: 即 for;;for;true;
  • 还可以通过goto语句递归函数模拟循环结构。
// 基础循环
func Foo() {
   for i := 0; i < 5; i++ {
      fmt.Println(i)
   }
}
// 条件循环
func Bar() {
   var n = 0
   for n < 5 {
      fmt.Println(n)
      n++
   }
}
// 无限循环
func Baz() {
   for {
      time.Sleep(time.Second * 1)
      println(time.Now().Format("2006-01-02 15:04:05"))
   }
}

2. 循环控制

  • 循环控制包括:中断(break/return)、继续(continue)、跳转(goto)
  • goto语句中,标签不能跳过变量的声明,且跳转只能在同一作用域进行
//中断:循环输入
func Foo() {
   for {
      var input string
      fmt.Scanln(&input)
      if input == "q" {
         fmt.Println("quit")
         break //return
      }
      fmt.Println(input)
   }
}
//继续:打印奇数
func Bar() {
   for i := 0; i < 10; i++ {
      if i%2 == 0 {
         continue
      }
      fmt.Println(i)
   }
}
//跳转
func Baz() {
   goto FLAG
   fmt.Println("a")
FLAG:
   if true {
      //子作用域
   }
   fmt.Println("b")
}

参考:
https://blog.csdn.net/benben_2015/article/details/79486077
http://blog.chinaase.com/2019/02/12/golang%E9%9D%A2%E5%90%91%E6%8E%A5%E5%8F%A3%E3%80%81%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E5%AF%B9%E8%B1%A1%E6%80%9D%E6%83%B3%E5%8F%8A%E7%BC%96%E7%A8%8B%E4%BB%A5%E5%8F%8A%E7%BB%93%E6%9E%84%E5%8C%96/

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
结构化程序设计简介   •结构化程序设计方法主张按功能来分析系统需求,其主要原则可概括为自顶向下,逐步求精,模块化等。结构化 程序设计首先采用结构化分析(Structrued Analysis,即SA)方法对系统进行需求分析,然后使用结构化设计 (Structrued Design,即SD)方法对系统进行概要设计、详细设计,最后采用结构化编程(Structrued Program,即SP)方式来实现系统。使用这种SA、SD和SP的方式可以较好的保证软件系统的开发进度和质量。   •因为结构化程序设计方法主张按功能把软件系统逐步细分,因此这种方法也被成为面向功能的程序设计方法;结 构化程序设计的每个功能都负责对数据进行一次处理,每个功能都接受一些数据,处理完后输出一些数据,这种处理方 式也被称为面向数据流的处理方式。 结构化程序设计的局限性    •设计不够直观,与人类习惯思维不一致。采用结构化程序分析、设计时,开发者需要将客观世界模型分解成一个 一个功能,每个功能用以完成一定的数据处理。   •适应性差,可扩展性不强。由于结构化设计采用自顶而下的设计方式,所以当用户的需求发生改变,或需要修改 现有的实现方式时都需要自顶而下地修改模块结构,这种方式的维护成本相当大。 程序的三种结构      •结构化程序设计非常强调实现某个功能的算法,而算法的实现过程是由一系列操作组成的,这些操作之间的执行 次序就是程序的控制结构。1996年,计算机科学家Bohm和Jacopini证明了这样的事实:任何简单或复杂的算法都可 以由三种结构组成     –顺序结构     –选择结构     –循环结构这   •这三种结构就被称为程序设计的三种基本结构,也是结构化程序设计必须采用的结构 顺序结构 。。。。。。。。。。。。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值