暂时留空。听说面试常考
两个go routine之间通讯机制,数据类型:channel, 管道。 类似socket
make(chan Type, capacity)
//Type 表示数据类型,int等
//有缓存无缓存
make(chan Type, capacity) 是创建一个通道的语法。其中,Type 是通道中传递的数据类型,capacity 是可选参数,用于指定通道的缓冲区大小。如果不指定缓冲区大小或将其设置为0,那么该通道就是一个无缓冲通道,只有发送者和接收者同时准备好时,数据才能被传递。如果指定了缓冲区大小,那么该通道就是一个有缓冲通道,可以在缓冲区未满的情况下异步传递数据。
以下是一个使用通道进行数据传递的简单示例:
package main
import "fmt"
func main() {
// 创建一个有缓冲通道,缓冲区大小为2
ch := make(chan int, 2)
// 向通道发送数据
ch <- 1
ch <- 2
// 从通道接收数据
fmt.Println(<-ch)
fmt.Println(<-ch)
}
在上面的示例中,我们创建了一个有缓冲大小为2的整数通道。然后,我们向通道发送两个整数值,并从通道接收这两个值并打印出来。由于通道是先进先出的,所以打印的结果是1和2。
需要注意的是,通道的发送和接收操作会阻塞当前的goroutine,直到有发送或接收操作可以进行。这种阻塞特性使得通道成为了一种很好的协调多个goroutine之间的同步机制。
Golang | 关键词 | 一共 | 25 | 个 |
---|---|---|---|---|
break | default | func | interface | select |
case | defer | go | map | struct |
chan | else | goto | package | switch |
const | fallthrough | if | range | type |
continue | for | import | return | var |
算法常用就10个,用法基本同cpp
func, var, if, else, for, range, switch, case, return, struct, import, map
func(函数):用于定义函数,大部分的算法比赛代码都会包含在函数内。
var(变量):用于声明变量,你通常需要存储中间结果,计数器,以及其他类型的数据。
if(如果),else(否则):用于条件语句。许多算法需要根据当前数据的状态做决定。
for(循环):用于循环。在算法中,遍历数据是常见的操作。
range(范围):用于遍历切片,数组,映射和字符串。这在算法比赛中是非常常见的操作。
switch(开关),case(情况):用于多条件分支。虽然不如 if-else 语句常见,但有时它们可以使你的代码更清晰,更易于理解。
return(返回):用于从函数返回值。当你计算出算法的结果时,你需要返回它。
struct(结构体):用于定义自己的数据类型。在更复杂的问题中管理相关数据时,这会很有用。
import(导入):用于导入包。虽然许多比赛只允许使用标准库,但是标准库中还是有许多有用的包。
map(映射):用于操作映射数据结构。映射在许多问题中都很有用,包括那些涉及频率计数或图的邻接列表的问题。