GoLang入门D3

今天学习一些运算符和学习一些关键字的使用
运算符
& | ^ &^
这四个位运算符分别是按位与,按位或,按位异或,位清除
其中位清除是GoLang特有的
a&^b使得a发生变化,a与b相同的位清零,a与b不同的位保留
a&^b相当于a&^=b,相当于a&=~b
Go不支持运算符、方法重载,但是某些内建运算符支持重载,比如+可以连接int32,也可以连接float32等

控制结构
Go没有do,while循环

if-else
强制写大括号,并且if的{和if必须在同一行,if的}必须和else在同一行

package main

import (
	"fmt"
)

func main() {
	var e bool
	if !e {
		fmt.Println("ee")
	} else {
		fmt.Println("e")
	}
}

if和switch都支持声明局部变量

package main

import (
	"fmt"
)

func main() {
	if a := 0; a == 0 {//不允许声明a为var
		fmt.Println(a)
		//0
	}
}

for
for有三种格式

  1. for init;condition;post{} //和C一样
  2. for condition{} //和while一样
  3. for{} //和while(1)一样

attention:Go没有逗号表达式,所以当for循环要同时控制多个序号变量,应当用平行赋值

i,j=i+1,j+2

可以给循环加label,然后指定break某一个label所指的循环,不使用的label不可以加

package main

import (
	"fmt"
)

func main() {
J:
	for j := 0; j < 2; j++ {

		for i := 0; i < 8; i++ {
			if i > 5 {
				break J
			}
			fmt.Println(i)
		}
		fmt.Println("i am j")
	}
}

输出

0
1
2
3
4
5
package main

import (
	"fmt"
)

func main() {
	for j := 0; j < 2; j++ {

		for i := 0; i < 8; i++ {
			if i > 5 {
				break
			}
			fmt.Println(i)
		}
		fmt.Println("i am j")
	}
}

输出

0
1
2
3
4
5
i am j
0
1
2
3
4
5
i am j

range
range是一个迭代器,使用时他返回一个根据类型而定的键值对

package main

import (
	"fmt"
)

func main() {
	list := []string{"aa", "bb", "cc", "dd"}
	for k, v := range list {
		fmt.Print(k)
		fmt.Print(" ")
		fmt.Println(v)
		fmt.Println()
	}
}

输出

0 aa

1 bb

2 cc

3 dd

直接在string上使用range,会使字符串打散成Unicode,并按UTF-8开始解析

package main

import (
	"fmt"
)

func main() {
	var s string = "aΩx"
	for pos, char := range s {
		fmt.Printf("character '%c' starts at byte position %d\n", char, pos)
	}
}

输出(Ω占两个字节)

character 'a' starts at byte position 0
character 'Ω' starts at byte position 1
character 'x' starts at byte position 3

switch
Go的switch非常灵活,它的表达式不必是常量或整数,他可以放condition,甚至init,假如switch没有表达式,自动匹配true
教程上给了这个函数,但是不是很懂它的用法,难道是要把一个16进制数打散成byte看它每一个byte是不是在0-9,a-f,A-F吗。

func unhex(c byte) byte {
	switch {
	case '0' <= c && c <= '9':
		return c - '0'
	case 'a' <= c && c <= 'f':
		return c - 'a' + 10
	case 'A' <= c && c <= 'F':
		return c - 'A' + 10
	}
	return 0
}

fallthrough
C语言中,一项case匹配了也会自动往下匹配,除非有break,而Go是默认匹配到一项就不往下匹配了,除非有fallthrough

package main

import (
	"fmt"
)

func main() {
	var i int = 0
	switch i {
	case 0:
	case 1:
		fmt.Println("111")
	}
}
//无输出
package main

import (
	"fmt"
)

func main() {
	var i int = 0
	switch i {
	case 0:
		fallthrough
	case 1:
		fmt.Println("111")
	}
}
//输出111
package main

import (
	"fmt"
)

func main() {
	var c byte = '&'
	switch c {
	case ' ', '?', '&'://注意这里的逗号代表or
		fmt.Println("hello")
	default:
		fmt.Println("default")
	}
}
//输出hello
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值