前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go语言入门(二)-流程控制

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

作者头像
alexhuiwang
发布2020-09-24 11:18:30
2820
发布2020-09-24 11:18:30
举报
文章被收录于专栏:运维博客

go流程控制

字符串详解

字符串原理

  • 字符串底层就是一个byte数组,所以可以和[]byte类型互相转换
  • 字符串中的字符是不能修改的
  • 字符串是有byte字节组成,所以字符串的长度是byte字节的长度
  • rune类型(int32占四个字节)用来表示utf8字符,一个rune由一个或者多个byte组成
代码语言:javascript
复制
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))
}

练习

写一个程序,对英文字符串进行逆序
代码语言:javascript
复制
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))
}
写一个程序,实现对包含中文的字符串进行逆序
代码语言:javascript
复制
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))
}
写一个程序,判断一个字符串是否是回文
代码语言:javascript
复制
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()表示纳秒
代码语言:javascript
复制
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())

}

小练习

写一个程序,统计一段代码的执行耗时,单位精确到微秒
代码语言:javascript
复制
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条件语句

代码语言:javascript
复制
func judgeNum() {
   num := 10
   if num % 2 ==0 {
      fmt.Printf("%d是偶数\n",num)
   }else {
      fmt.Printf("%d是奇数\n",num)
   }
}
代码语言:javascript
复制
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循环

代码语言:javascript
复制
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语句

代码语言:javascript
复制
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)
   }
}

小练习

猜数字练习

代码语言:javascript
复制
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
      }
   }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/03/14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • go流程控制
    • 字符串详解
      • 字符串原理
      • 练习
      • 日期和时间类型
      • 小练习
    • 流程控制
      • if条件语句
      • for循环
      • switch语句
      • 小练习
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档