2、条件分支和循环(select、for、switch、if)

go语言入门

条件分支

if语句

可以包含初始语句,类似for的初始语句

func main()  {
	var num int
	if num = 4; num < 5 {
		num+=2
	}else if num<3 {
		num+=3
	}else {
		num+=10
	}

	fmt.Println(num)
}
func main()  {
	var num int
	// 标识符的重声明 num被再次声明,那么if内部使用的是重声明后的,其他作用域任然使用的是第一次声明的值。
	// 在if作用域范围内对num的访问和赋值只会涉及到第二次声明的那个变量num,这种现象叫做标识符的遮蔽
	if num := 4; num < 5 {
		num+=2
		fmt.Println(num)
	}else if num<3 {
		num+=3
	}else {
		num+=10
	}

	fmt.Println(num)
}

switch语句

可以有初始化语句,写法与if一样
switch的每一个case可以携带一个表达式或一个类型说明符
因此存在两种case:表达式switch语句和类型switch语句

表达式switch语句

func main() {
	switch name:="djdjdj";name {
	case "dj":
		fmt.Println("dj")
	case "djdjdj":
		fmt.Println(name)
	default:
		fmt.Println("default")
	}
}

类型switch语句
interface{}(v).(type)这种写法是专门使用于switch的类型推断的

func main() {
	ia := []interface{}{byte(6), 'a', uint(10), int32(-4)}
	switch v := ia[(rand.Intn(4)%2)+1]; interface{}(v).(type) {
	case uint, rune:
		fmt.Printf("Case A.")
	case byte:
		fmt.Printf("Case B.")
	default:
		fmt.Println("Unknown!")
	}
	//
	rand.Seed(time.Now().Unix())
	fmt.Println(rand.Intn(4))
}

for语句

for有两种迭代方式,一种于java中的for each类似,还有一种类似于for in,在go中叫range

func main() {
	for i:=0; i< 100; i++{
		fmt.Println(i)
	}

	// %d 十进制 %c 字符 %t true false  %T 相应值的类型的Go语法表示
	var builder string
	for i,v:= range "go dj" {
		fmt.Println(i)
		builder = builder + fmt.Sprintf("%c",v)
	}
	fmt.Println(builder)

fmt.Printf("%T",builder)

	fmt.Println("数组")
	var builder2 string
	for i,v:= range [...]int{1,2,3,4,5,6} {
		fmt.Println(i)
		builder2 = builder2 + fmt.Sprintf("%d",v)
	}
	fmt.Println(builder2)


	fmt.Println("字典")
	var builder3 string
	for i,v:= range map[int]string{1:"dj",2:"cj"} {
		fmt.Println(i)
		builder3 = builder3 + fmt.Sprintf("%s",v)
	}
	fmt.Println(builder3)

	fmt.Println("通道")
	var builder4 string
	ch := make(chan int)
	go func() {
		for i := 0; i < 5; i++ {
			ch <- i //往通道写数据
		}
		//不需要再写数据时,关闭channel
		close(ch)
	}()

	for i:= range ch {
		builder4 = builder4 + strconv.Itoa(i)
	}
	fmt.Println(builder4)
}

for i, v := range "Go语言" {
    fmt.Printf("%d: %c\n", i, v)
} 

/*
0: G
1: o
2: 语
5: 言  
*/
字符串的底层是字节数组,一个中文字符占3个字节

select语句

select只能使用于通道类型的select,对于的操作分别是向通道写值和向通道收值
规则

  • 如果有多个case满足条件,伪随机选择一个执行
  • 全部不满足执行default,没有default会阻塞至其中一个case满足条件
  • break和return语句可以使用于case当中
func main() {

	//接收demo
	ch1 := make(chan int,5)
	ch2 := make(chan int,5)

	select {
	case c1 :=<- ch1:
		fmt.Println(c1)
	case c2 := <- ch2:
		fmt.Println(c2)
	default:
		fmt.Printf("nothing happend")
	}

	go func() {
		close(ch1)
		close(ch2)
	}()

	//发送demo
	ch3 := make(chan int,2)
	ch4 := make(chan int,2)

	select {
	case ch3 <- 1:
		fmt.Println("ch3")
	case ch4 <- 2:
		fmt.Println("ch4")
	default:
		fmt.Printf("nothing happend")
	}

	go func() {
		close(ch3)
		close(ch4)
	}()

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
程序1: ``` #include <iostream> using namespace std; int main() { char option; while (true) { cout << "Menu: A(dd) D(elete) S(ort) Q(uit), Select one: "; cin >> option; if (option == 'A' || option == 'a') { cout << "Data has been added." << endl; // 进行数据增加操作 } else if (option == 'D' || option == 'd') { cout << "Data has been deleted." << endl; // 进行数据删除操作 } else if (option == 'S' || option == 's') { cout << "Data has been sorted." << endl; // 进行数据排序操作 } else if (option == 'Q' || option == 'q') { cout << "Program is quitting." << endl; break; } else { cout << "Invalid input. Please try again." << endl; continue; } } return 0; } ``` 程序2: ``` #include <iostream> using namespace std; int main() { char option; while (true) { cout << "Menu: A(dd) D(elete) S(ort) Q(uit), Select one: "; cin >> option; switch (option) { case 'A': case 'a': cout << "Data has been added." << endl; // 进行数据增加操作 break; case 'D': case 'd': cout << "Data has been deleted." << endl; // 进行数据删除操作 break; case 'S': case 's': cout << "Data has been sorted." << endl; // 进行数据排序操作 break; case 'Q': case 'q': cout << "Program is quitting." << endl; return 0; default: cout << "Invalid input. Please try again." << endl; break; } } } ``` 两个程序的功能相同,只是使用的分支语句不同。在两个程序中,都使用了无限循环来保证用户可以进行多次操作,直到用户选择退出程序为止。如果用户输入了非法选项,程序1使用 continue 继续下一次循环,程序2使用 break 跳出 switch 分支语句。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值