GO语言学习五

Go常量
const identifier [type] = value
可以省略类型标识符[type],因为编译器可以根据变量的值来推断其类型。
显式类型定义: const b string = "abc"
隐式类型定义: const b = "abc"
iota:特殊常量,一个可以被编译器修改的常量。
iota 在 const关键字出现时将被重置为 0(const 内部的第一行之前),const 中每新增一行常量声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)。
iota 可以被用作枚举值:
 

package main
import ("fmt")
func main() {
	 const (
	 a = iota  //0
	 b //1
	 c //2
	 d = "ha" //独立值,iota += 1
	 e //"ha"   iota += 1
	 f = 100 //iota +=1
	 g //100  iota +=1
	 h = iota //7,恢复计数
	 i //8
	 )
	 fmt.Println(a,b,c,d,e,f,g,h,i)
}

 通道
通道(channel)是用来传递数据的一个数据结构,通道在Go中很重要。

goroutine 是 golang 中在语言级别实现的轻量级线程,仅仅利用 go 就能立刻起一个新线程。多线程会引入线程之间的同步问题,在 golang 中可以使用 channel 作为同步的工具。

通过 channel 可以实现两个 goroutine 之间的通信。
通道可用于两个 goroutine 之间通过传递一个指定类型的值来同步运行和通讯。操作符 <- 用于指定通道的方向,发送或接收。如果未指定方向,则为双向通道。
ch <- v    // 把 v 发送到通道 ch,向chan传入数据
v := <-ch  // 从 ch 接收数据
           // 并把值赋给 v
声明通道:
ch := make(chan int)//定义ch是一个接收int类型数据的channel
默认
默认情况下,通道是不带缓冲区的。发送端发送数据,同时必须又接收端相应的接收数据。
以下实例通过两个 goroutine 来计算数字之和,在 goroutine 完成计算后,它会计算两个结果的和:

package main
import "fmt"
func sum(s []int, c chan int) {
	 sum := 0
	 for _, v := range s {
		 sum += v
		 }
	 c <- sum // 把 sum 发送到通道 c
}
 
func main() {
	 s := []int{7, 2, 8, -9, 4, 0}
	 c := make(chan int)
	 go sum(s[:len(s)/2], c)
	 go sum(s[len(s)/2:], c)
	 x, y := <-c, <-c // 从通道 c 中接收
	 fmt.Println(x, y, x+y)
}

条件中的select语句
select是Go中的一个控制结构,类似于用于通信的switch语句。每个case必须是一个通信操作,要么是发送要么是接收。
select随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。一个默认的子句应该总是可运行的。
语法:
select {undefined
    case communication clause  :
       statement(s);      
    case communication clause  :
       statement(s); 
    /* 你可以定义任意数量的 case */
    default : /* 可选 */
       statement(s);
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值