0%

1. channel

1.1 关闭有缓冲数据的 channel, 还能读取吗(可以)

只有当channel无数据,且channel被close了,才会返回ok=false。 只要有堆积数据,即使 close() 也不会返回关闭状态。

关闭后有数据也能从里面得到数据,除非消耗空了。

阅读全文 »

1. 目录

1.1 [/usr]/lib/systemd/system/

(软件包安装的单元)

The expectation is that /lib/systemd/system is a directory that should only contain systemd unit files which were put there by the package manager (YUM/DNF/RPM/APT/etc).

1.2 /etc/systemd/system/

(系统管理员安装的单元, 优先级更高)

Files in /etc/systemd/system are manually placed here by the operator of the system for ad-hoc software installations that are not in the form of a package. This would include tarball type software installations or home grown scripts.

阅读全文 »

1. 安装

  • 安装电池
  • 拧上三脚架

2. 平衡

调节平衡之前需要先认清三个轴:

  • 俯仰轴 相机的右侧的那个圆圈(转动改变角度)

  • 横滚轴 后方写着智云字体的那个圆圈(貌似不会转动,倾斜改变角度)

  • 航向轴 手柄上方的那个圆圈(转动改变角度)

2.1 调节平衡
  • 先调节俯仰轴水平, 前后移动快装板, 松手水平后拧紧快装板螺丝
  • 再调节俯仰轴垂直, 松手垂直后拧紧俯仰轴螺丝
  • 再调节横滚轴, 松手水平后拧紧横滚轴螺丝
  • 最后调节航向轴, 把三脚架怼着肚子,松手水平后拧紧航向轴螺丝
阅读全文 »

0. 安装

  • windows

  • mac

1. 基础操作

1.1 软件
  • 新建项目
  • 窗口->工作区->重置
  • 首选项->自动保存
阅读全文 »

1. nsq 介绍

nsq是一个基于Go语言的分布式实时消息平台,nsq可用于大规模系统中的实时消息服务,并且每天能够处理数亿级别的消息,其设计目标是为在分布式环境下运行的去中心化服务提供一个强大的基础架构。

阅读全文 »

golang从诞生之初就一直有个被诟病的问题:缺少一个行之有效的“官方”包依赖管理工具。之前golang包管理工具有数十个, 说实话都不是让人非常满意。

go 1.11 有了对模块的实验性支持,大部分的子命令都知道如何处理一个模块,比如 run build install get list mod 子命令。go 1.12 会删除对 GOPATH 的支持,go get 命令也会变成只能获取模块,不能像现在这样直接获取一个裸包。

可以用环境变量 GO111MODULE 开启或关闭模块支持,它有三个可选值:off、on、auto,默认值是 auto。

  • GO111MODULE=off 无模块支持,go 会从 GOPATH 和 vendor 文件夹寻找包。
  • GO111MODULE=on 模块支持,go 会忽略 GOPATH 和 vendor 文件夹,只根据 go.mod 下载依赖。
  • GO111MODULE=auto 在 $GOPATH/src 外面且根目录有 go.mod 文件时,开启模块支持。

在使用模块的时候,GOPATH 是无意义的,不过它还是会把下载的依赖储存在 $GOPATH/pkg/mod 中,也会把 go install 的结果放在 $GOPATH/bin 中。

阅读全文 »

1. 等待goroutine退出

1.1 通过Channel传递退出信号

Go的一大设计哲学就是:通过Channel共享数据,而不是通过共享内存共享数据。主流程可以通过channel向任何goroutine发送停止信号,就像下面这样:

这种方式可以实现优雅地停止goroutine,但是当goroutine特别多的时候,这种方式不管在代码美观上还是管理上都显得笨拙不堪。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package main

import (
"fmt"
"time"
)

func run(done chan int) {
for {
select {
case <-done:
fmt.Println("exiting...")
done <- 1
break
default:
}

time.Sleep(time.Second * 1)
fmt.Println("do something")
}
}

func main() {
c := make(chan int)

go run(c)

fmt.Println("wait")
time.Sleep(time.Second * 5)

c <- 1
<-c

fmt.Println("main exited")
}
阅读全文 »