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("%cn",97) fmt.Printf("b=%v,tlen(str)=%dn",b,len(str)) fmt.Printf("%dn",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("%vn",now) fmt.Printf("year=%d,month=%d,day=%d,hour=%d,minute=%d,second=%dn", year,month,day,hour,minute,second) } func getTimeStamp() { now := time.Now() timestamp := now.UnixNano() fmt.Printf("%dn",timestamp) } func Dingshiqi() { timer :=time.NewTimer(time.Second) for v := range timer.C { fmt.Printf("time:%vn",v) //定时一秒刷新 timer.Reset(time.Second) } } func TimeTicker() { timer := time.NewTicker(time.Second) for v := range timer.C { fmt.Printf("time: %vn",v) } } func TimeStampToTime(timestamp int64) { time_t := time.Unix(timestamp,0) fmt.Printf("time %vn",time_t) } func FormatTime() { now := time.Now() //Go 诞生时间 str := now.Format("2006/01/02 15:04:05") fmt.Printf("str: %sn",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 msn",(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小于等于50n",num) } else if num >= 51 && num <= 100 { fmt.Printf("%d大于等于51,小于等于100n",num) } else { fmt.Printf("%d大于100n",num) } }
for循环
func simpleFor() { for i:=1;i<=10;i++ { fmt.Printf("%dn",i) } } func forcase() { i := 0 for ;i<=10; { fmt.Printf("%dn",i) i+=2 } } func breakFor() { for i:=0;i<=10;i++ { if i > 5 { break } fmt.Printf("%dn",i) } } func continueFor() { for i:=0;i<=10;i++ { if i == 5 { continue } fmt.Printf("%dn",i) } } func forCase() { for no,i := 10,1;i<=10&&no<=19;i,no=i+1,no+1 { fmt.Printf("%d * %d = %dn",no,i,no*i) } } // 无限循环 func deadLoop() { for { fmt.Printf("hello") } }
switch语句
func switchCase() { f:=9 switch f { case 1: fmt.Printf("enter case 1n") fmt.Printf("f=1n") //fallthrough case 2: fmt.Printf("enter case 2n") fmt.Printf("f=2n") case 3: fmt.Printf("enter case 3n") fmt.Printf("f=3n") default: fmt.Printf("enter default casen") } } func switchCase2 () { letter := "i" switch letter { case "a","e","i","o","u": fmt.Printf("元音字母%sn",letter) default: fmt.Printf("辅音字母%sn",letter) } } //条件判断格式 func switchCase3() { num := 75 switch { case num<75: fmt.Printf("数字 %d 小于75n",num) case num>=75 && num <=85: fmt.Printf("数字%d大于75,小于85n",num) default: fmt.Printf("数字%d大于85n",num) } }
小练习
猜数字练习
func randCase() { var number int /* 伪随机数 for i:=0;i<10;i++{ number = rand.Intn(100) fmt.Printf("number:%dn",number) } return */ //生成随机数种子 rand.Seed(time.Now().UnixNano()) number = rand.Intn(100) fmt.Println(number) fmt.Printf("猜一个数字,数字的范围是0到100n") for { var input int fmt.Scanf("%dn",&input) var flag bool = false switch { case number > input: fmt.Printf("输入的比较小%dn",input) case number == input: fmt.Printf("猜对了%d,正确值是%dn",input,number) flag = true case number<input: fmt.Printf("输入的比较大%dn",input) } if flag { break } } }
- 版权声明:文章来源于网络采集,版权归原创者所有,均已注明来源,如未注明可能来源未知,如有侵权请联系管理员删除。