摘要
Golang中存在一些特殊的关键字,这些关键字在程序编写过程中可能有助于解决一些必要的问题,本文列出了一些特殊关键字的使用说明。
实体申明和定义
- const关键字
const的作用是申明一个只读常量
一般性定义
const(
prepare Type = Value
)
或者
const(
prepare = Value
)
自增长量iota在const定义中的使用
下列常量行为
const (
prepare msgtype = iota
commit
)
等价于
const (
prepare msgtype = 0
commit msgtype = 1
)
- interface 申明一个接口
接口用于接收具有指定方法的变量或者结构体,具体定义如下
type name inferface{
method1
method2
....
method3
}
- chan 申明一个通道
申明一个传输消息的通道,该通道主要是在协程之间传输消息。
a:=make(chan 类型,缓存大小)
a:=make(chan 类型) //没有缓存区的通道
b:=make(chan 类型,n)//带有大小为n的缓存区的通道
- go创建一个协程
func TestFunction(t *testing.T){
wg:=&sync.WaitGroup{}
wg.Add(1)
go func (){
defer wg.Done()
log.Println("Coroutine1")
}()
wg.Add(1)
go func (){
defer wg.Done()
log.Println("Coroutine2")
}()
wg.Add(1)
go func (){
defer wg.Done()
log.Println("Coroutine3")
}()
log.Println("primary corotine")
wg.Wait()
}
查看结果:
流程控制关键字
- goto 跳转关键字
goto关键字在配合标签的情况下,可以直接跳转到标签层,继续执行指令,具体代码如下
func TestFunction(t *testing.T){
label:
for i:=0;i<4;i++{
log.Println("die dai",i,":")
for j:=0;j<5;j++{
log.Println(i+j)
if i+j==8{
goto label;
}
}
}
log.Println("continue")
}
- select 关键字
配合通道实现从协程中接收到消息的判定。
func TestFunction(t *testing.T){
wg:=&sync.WaitGroup{}
ch1:=make(chan int)
ch2:=make(chan bool)
wg.Add(1)
go func(){
defer wg.Done()
for {
select {
case s:=<-ch1:
log.Println(s)
case <-ch2:
break;
default:
log.Println("continue")
}
}
}()
ch1<-1
time.Sleep(1*time.Second)
ch2<-true
wg.Wait()
}
- defer 程序退出前执行指令
func TestFunction(t *testing.T){
defer log.Println("Hello3")
log.Println("Hello1")
log.Println("Hello2")
}
执行结果是:
- fallthrough
配合switch选择语句,在执行完某个case后不退出,继续执行后面的case语句。
func TestFunction(t *testing.T){
var t1 bool=false
switch {
case t1==false:
log.Println("t1",false)
fallthrough
case t1==true:
log.Println("t1",true)
fallthrough
case t1==false:
log.Println("t1",false)
}
}
执行结果如下:
结论
以上就是我对Golang中的一些特殊关键字的总结。