25

Go语言入门(二)-流程控制

 5 years ago
source link: https://studygolang.com/articles/27184
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

go流程控制

字符串详解

字符串原理

  • 字符串底层就是一个byte数组,所以可以和[]byte类型互相转换
  • 字符串中的字符是不能修改的
  • 字符串是有byte字节组成,所以字符串的长度是byte字节的长度
  • rune类型(int32占四个字节)用来表示utf8字符,一个rune由一个或者多个byte组成
func stringByte() {
   var str string
   str = "abc你好"
   var b []byte = []byte(str)
   var c[]rune = []rune(str)
   fmt.Printf("%c\n",97)
   fmt.Printf("b=%v,\tlen(str)=%d\n",b,len(str))
   fmt.Printf("%d\n",len(c))
}

练习

写一个程序,对英文字符串进行逆序

func reverseStr(s string) string {
   bytes := []byte(s)
   for i:=0;i<len(s)/2;i++{
      //fmt.Printf("%c",i)   输出字符串
      var tmp = bytes[i]
      bytes[i] = bytes[len(s)-i-1]
      bytes[len(s)-i-1] = tmp
   }
   s = string(bytes)
   return s
}

func main() {
   //stringByte()
   s:= "abcdefg"
   fmt.Println(reverseStr(s))
}

写一个程序,实现对包含中文的字符串进行逆序

func reverseChinese(s string)  {
   bytes := []rune(s)
   for i:=0;i< len(bytes)/2;i++ {
      bytes[i],bytes[len(bytes)-i-1] = bytes[len(bytes)-i-1],bytes[i]
   }
   s = string(bytes)
   fmt.Println(s)
}

func main() {
   s:= "abcdefg中国"
   fmt.Println(reverseChinese(s))
}

写一个程序,判断一个字符串是否是回文

func isReversed(s string) string {
   r := []rune(s)
   for i:=0;i <len(r)/2;i++ {
      r[i],r[len(r)-i-1] = r[len(r)-i-1],r[i]
   }
   s1 := string(r)
   if s1 == s{
      return "is huiwen"
   }else {
      return "not huiwen"
   }
}

日期和时间类型

  • time包
  • 获取当前时间
  • 时间格式化
  • 时间戳和时间之间的转换
  • 定时器的简单使用
  • time.Duration()表示纳秒
package main

import (
   "fmt"
   "time"
)

func getTime() {
   now:=time.Now()
   year := now.Year()
   month := now.Month()
   day := now.Day()
   hour := now.Hour()
   minute := now.Minute()
   second := now.Second()
   fmt.Printf("%v\n",now)
   fmt.Printf("year=%d,month=%d,day=%d,hour=%d,minute=%d,second=%d\n",
      year,month,day,hour,minute,second)
}

func getTimeStamp() {
   now := time.Now()
   timestamp := now.UnixNano()
   fmt.Printf("%d\n",timestamp)
}

func Dingshiqi() {
   timer :=time.NewTimer(time.Second)
   for v := range timer.C {
      fmt.Printf("time:%v\n",v)
      //定时一秒刷新
      timer.Reset(time.Second)
   }
}

func TimeTicker() {
   timer := time.NewTicker(time.Second)
   for v := range timer.C {
      fmt.Printf("time: %v\n",v)
   }
}

func TimeStampToTime(timestamp int64) {
   time_t := time.Unix(timestamp,0)
   fmt.Printf("time %v\n",time_t)
}

func FormatTime() {
   now := time.Now()
   //Go 诞生时间
   str := now.Format("2006/01/02 15:04:05")
   fmt.Printf("str: %s\n",str)
}

func main() {
   //getTime()
   //getTimeStamp()
   /*
   //go Dingshiqi()
   go TimeTicker()
   time.Sleep(time.Minute)
    */
   //TimeStampToTime(time.Now().Unix())

}

小练习

写一个程序,统计一段代码的执行耗时,单位精确到微秒

func testCase() {
   for i:=0;i<10000000000;i++{
      _=i
   }
}

func main() {
   //获取纳秒数
   start_time := time.Now().UnixNano()
   testCase()
   end_time := time.Now().UnixNano()
   fmt.Printf("cost time is %d us,also %d ms\n",(end_time-start_time)/1000,(end_time-start_time)/1000000)

}

流程控制

if条件语句

func judgeNum() {
   num := 10
   if num % 2 ==0 {
      fmt.Printf("%d是偶数\n",num)
   }else {
      fmt.Printf("%d是奇数\n",num)
   }
}
func guessNum() {
   num := 99
   if num <=50 {
      fmt.Printf("%d小于等于50\n",num)
   } else if num >= 51 && num <= 100 {
      fmt.Printf("%d大于等于51,小于等于100\n",num)
   } else {
      fmt.Printf("%d大于100\n",num)
   }
}

for循环

func simpleFor() {
   for i:=1;i<=10;i++ {
      fmt.Printf("%d\n",i)
   }
}

func forcase() {
   i := 0
   for ;i<=10; {
      fmt.Printf("%d\n",i)
      i+=2
   }
}

func breakFor() {
   for i:=0;i<=10;i++ {
      if i > 5 {
         break
      }
      fmt.Printf("%d\n",i)
   }
}

func continueFor() {
   for i:=0;i<=10;i++ {
      if i == 5 {
         continue
      }
      fmt.Printf("%d\n",i)
   }
}

func forCase() {
   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)
   }
}

// 无限循环
func deadLoop() {
   for {
      fmt.Printf("hello")
   }
}

switch语句

func switchCase() {
   f:=9
   switch f {
   case 1:
      fmt.Printf("enter case 1\n")
      fmt.Printf("f=1\n")
      //fallthrough
   case 2:
      fmt.Printf("enter case 2\n")
      fmt.Printf("f=2\n")
   case 3:
      fmt.Printf("enter case 3\n")
      fmt.Printf("f=3\n")
   default:
      fmt.Printf("enter default case\n")
   }
}

func switchCase2 () {
   letter := "i"
   switch letter {
   case "a","e","i","o","u":
      fmt.Printf("元音字母%s\n",letter)
   default:
      fmt.Printf("辅音字母%s\n",letter)
   }
}

//条件判断格式
func switchCase3() {
   num := 75
   switch  {
   case num<75:
      fmt.Printf("数字 %d 小于75\n",num)
   case num>=75 && num <=85:
      fmt.Printf("数字%d大于75,小于85\n",num)
   default:
      fmt.Printf("数字%d大于85\n",num)
   }
}

小练习

猜数字练习

func randCase() {
   var number int
   /*
   伪随机数
   for i:=0;i<10;i++{
      number = rand.Intn(100)
      fmt.Printf("number:%d\n",number)
   }
   return
    */
   //生成随机数种子
   rand.Seed(time.Now().UnixNano())
   number = rand.Intn(100)
   fmt.Println(number)

   fmt.Printf("猜一个数字,数字的范围是0到100\n")
   for {
      var input int
      fmt.Scanf("%d\n",&input)
      var flag bool = false
      switch  {
      case number > input:
         fmt.Printf("输入的比较小%d\n",input)
      case number == input:
         fmt.Printf("猜对了%d,正确值是%d\n",input,number)
         flag = true
      case number<input:
         fmt.Printf("输入的比较大%d\n",input)
      }
      if flag {
         break
      }
   }
}

Recommend

  • 182
    • 掘金 juejin.im 7 years ago
    • Cache

    Promise 异步流程控制

    前言 最近部门在招前端,作为部门唯一的前端,面试了不少应聘的同学,面试中有一个涉及 Promise 的一个问题是: 网页中预加载20张图片资源,分步加载,一次加载10张,两次完成,怎么控制图片请求的并发,怎样感知当前异步请求是否已完成? 然而能全部答上

  • 76

    1.1for循环的格式及基本使用1.1.1for循环语句格式:for(初始化语句;判断条件语句;控制条件语句){循环体语句;//让循环体代码执行多次;}1.1.2执行流程A:执行初始化语句B:执行判断条件语句,看其结果是true还是false如果是false,循环结束。如果是true,继续执行。C:...

  • 60

    控制流程完整性:给大家介绍一种“另类”的Javascript反分析技术

  • 38
    • studygolang.com 4 years ago
    • Cache

    8. Go 语言流程控制:if-else

    Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,...

  • 15
    • studygolang.com 4 years ago
    • Cache

    9. Go 语言流程控制:switch-case

    Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,...

  • 18
    • studygolang.com 4 years ago
    • Cache

    10. Go 语言流程控制:for 循环

    Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,...

  • 27

    Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,...

  • 27

    Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,...

  • 8

    ...

  • 11

    流程结构就是指程序逻辑到底怎么执行,进而言之,程序执行逻辑的顺序。众所周知,程序整体都是自上由下执行的,但有的时候,又不仅仅是从上往下执行那么简单,大体上,Go lang程序的流程控制结构一共有三种:顺序结构,选择结构,循环结构。顺序结构:从上向下,逐行...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK