Go语言入门-流程控制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go语言入门-流程控制相关的知识,希望对你有一定的参考价值。

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
",97)
   fmt.Printf("b=%v,	len(str)=%d
",b,len(str))
   fmt.Printf("%d
",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
",now)
   fmt.Printf("year=%d,month=%d,day=%d,hour=%d,minute=%d,second=%d
",
      year,month,day,hour,minute,second)
}

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

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

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

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

func FormatTime() {
   now := time.Now()
   //Go 诞生时间
   str := now.Format("2006/01/02 15:04:05")
   fmt.Printf("str: %s
",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
",(end_time-start_time)/1000,(end_time-start_time)/1000000)

}

流程控制

if条件语句

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

for循环

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

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

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

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

func forCase() {
   for no,i := 10,1;i<=10&&no<=19;i,no=i+1,no+1 {
      fmt.Printf("%d * %d = %d
",no,i,no*i)
   }
}

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

switch语句

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

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

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

小练习

猜数字练习

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

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

以上是关于Go语言入门-流程控制的主要内容,如果未能解决你的问题,请参考以下文章

Golang入门到项目实战 | go语言中的流程控制

Golang入门到项目实战 | golang流程控制关键字goto

Go语言自学系列 | go语言中的流程控制

Go语言自学系列 | go语言中的流程控制

Go 语言入门三部曲:能看懂 Go 语言

Go语言--流程控制