为了账号安全,请及时绑定邮箱和手机立即绑定

在go语法中,如果channel加了缓冲区反而无法输出?这是什么原因呢

在go语法中,如果channel加了缓冲区反而无法输出?这是什么原因呢

元芳怎么了 2021-06-08 11:07:27
package mainimport "fmt"func main(){var i chan int = make(chan int)fmt.Println("i:",i)go func(){fmt.Println("goroutine back")j := <-ifmt.Println("j:",j)}()fmt.Println("main first")i <-1fmt.Println("2")}为什么为channel加了缓冲区以后goroutine里的code就不执行了?
查看完整描述

2 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

因为往无缓冲管道中添加value后会自我阻塞,必须等value被取走之后才能继续执行,像你贴的代码中那样,在主线程中把1赋给了channel,此时主goroutine自我阻塞,等待有人取走channel中的数据后方能继续执行。

查看完整回答
反对 回复 2021-06-15
?
隔江千里

TA贡献1906条经验 获得超10个赞

根据空间关系将一个要素类的属性连接到另一个要素类的属性。目标要素和来自连接要素的被连接属性写入到输出要素类。
用法
空间连接是指根据要素的相对空间位置将连接要素中的行匹配到目标要素中的行。
默认情况下,连接要素的所有属性会被追加到目标要素的属性中并复制到输出要素类。通过在连接要素的字段映射参数中控制这些属性,可以定义将写入到输出中的属性。
始终会向输出要素类添加两个新字段:Join_Count 和 TARGET_FID。Join_Count 指示与每个目标要素 (TARGET_FID) 匹配的连接要素数量。
在连接操作参数中指定 JOIN_ONE_TO_MANY 时,将另一个新的字段 JOIN_FID 添加到输出。
3.当连接操作参数为 JOIN_ONE_TO_MANY 时,输出要素类中的每个目标要素都可以包含一个或多个行。使用 JOIN_FID 字段更易于确定所连接的要素与目标要素 (TARGET_FID) 的具体对应关系。JOIN_FID 字段的值为 -1,表示没有任何要素符合使用目标要素指定的空间关系。
只有同时进行如下设置,才能将所有输入目标要素写入到输出要素类:
将连接操作设置为 JOIN_ONE_TO_ONE,并且
选中保留所有目标要素(在脚本中设置为 KEEP_ALL)。
连接要素的字段映射参数中指定的合并规则仅适用于连接要素中的属性,且仅适用于多个要素与目标要素匹配 (Join_Count > 1) 的情况。例如,如果连接 DEPTH 属性值分别为 15.5、2.5 和 3.3 的三个要素,并应用“平均值”合并规则,则输出字段的值为 6.1。在进行统计计算时忽略连接字段中的空值。例如,15.5、<空> 和 2.5 将得出的结果为:“平均值”为 9.0,“计数”为 2。
将匹配选项设置为“CLOSEST”时,可能会出现两个或多个连接要素与目标要素距离相等的情况。如果发生这种情况,将随机选择其中一个连接要素作为匹配要素(连接要素的 FID 对随机选择过程没有影响)。如果要查找排在第 2位、第 3 位或第 N 位的最近要素,请使用生成近邻表 (Generate Near Table) 工具。
了解有关如何计算邻近值的详细信息
如果连接要素与多个目标要素具有空间关系,则在根据目标要素对其进行匹配时进行多次计数。例如,如果点位于三个面内,则将点计数三次,每个面计数一次。



查看完整回答
反对 回复 2021-06-15
  • 2 回答
  • 0 关注
  • 271 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信