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
}
}
}
有疑问加站长微信联系(非本文作者)