小编Son*_*ton的帖子

通道中的元素数量

使用缓冲通道,如何测量通道中有多少元素?例如,我正在创建和发送这样的频道:

send_ch := make(chan []byte, 100)
// code
send_ch <- msg
Run Code Online (Sandbox Code Playgroud)

我想衡量有多少封邮件都在通道send_ch.

我知道由于并发性,测量结果不准确,因为测量和行动之间可能会发生先发制人(例如在本视频中讨论的Google I/O 2012 - Go Concurrency Patterns).我将把它用于生产者和消费者之间的流量控制,即一旦我通过高水印,改变一些行为,直到我通过低水印回传.

go

69
推荐指数
1
解决办法
4万
查看次数

如何在匿名fn中进行递归,没有尾递归

如何在不使用尾递归的情况下在匿名函数中进行递归?

例如(来自Vanderhart 2010,第38页):

(defn power
  [number exponent]
  (if (zero? exponent)
    1
    (* number (power number (- exponent 1)))))
Run Code Online (Sandbox Code Playgroud)

假设我想将其作为匿名函数执行此操作.由于某种原因,我不想使用尾递归.我该怎么办?例如:

( (fn [number exponent] ......))))) 5 3)
125
Run Code Online (Sandbox Code Playgroud)

我可以使用循环这一点,也可以仅环搭配使用易复发

lisp functional-programming tail-recursion clojure anonymous-function

19
推荐指数
2
解决办法
6558
查看次数

当前和之前的git版本的文件之间的vimdiff

有没有办法使用vimdiff来比较文件的当前版本和同一文件n git版本之前?

例如,我正在分支主机上的文件foo.c上工作.我想在master~10之间的foo.c和foo.c之间做一个vimdiff,从旧版本复制一两行.

PS我知道git樱桃选择,但这是整个文件,而不仅仅是几行.

git vim vimdiff

16
推荐指数
3
解决办法
6001
查看次数

如何将字符串转换为Clojure中的函数?

我一直在研究Clojure问题135中缀计算器,基本上是一个简化的中缀到前缀算术计算器:

(= 7  (__ 2 + 5))
Run Code Online (Sandbox Code Playgroud)

我按照规定解决了问题.但这让我感到疑惑 - 如果这个论点是作为一个字符串提供的话 - 如何才能使它工作?

(= 7  (__ "2 + 5"))
Run Code Online (Sandbox Code Playgroud)

显然我会从分裂开始,然后咀嚼结果:

(clojure.string/split "2 + 5" #"\s")
user=> ["2" "+" "5"]
Run Code Online (Sandbox Code Playgroud)

但是我如何将"+"转换为函数调用?这不起作用:

("+" 2 5)
user=> java.lang.ClassCastException: java.lang.String cannot be 
cast to clojure.lang.IFn <snip>
Run Code Online (Sandbox Code Playgroud)

启蒙寻求....

clojure

9
推荐指数
1
解决办法
1115
查看次数

针对单个主机运行Ansible playbook

我正在使用hosts静态库存文件:

server1 ansible_ssh_host=1.1.1.1
server2 ansible_ssh_host=1.1.1.2
server3 ansible_ssh_host=1.1.1.3

[group1]
server1
server2
Run Code Online (Sandbox Code Playgroud)

而且我有一个example.yml像这样的剧本:

---
- name: base setup
  become: true
  hosts:
    - group1
  roles:
    - base
Run Code Online (Sandbox Code Playgroud)

我想ansible-playbook使用测试运行example.yml,但针对主机server1.有办法做到这一点吗?

ansible

9
推荐指数
1
解决办法
2万
查看次数

Golang CGo:将union字段转换为Go类型

我在64位平台上使用这个C结构,试图访问联合中的ui32v字段:

struct _GNetSnmpVarBind {
  guint32       *oid;       /* name of the variable */
  gsize     oid_len;    /* length of the name */
  GNetSnmpVarBindType   type;       /* variable type / exception */
  union {
    gint32   i32;           /* 32 bit signed   */
    guint32  ui32;          /* 32 bit unsigned */
    gint64   i64;           /* 64 bit signed   */
    guint64  ui64;          /* 64 bit unsigned */
    guint8  *ui8v;          /*  8 bit unsigned vector */
    guint32 *ui32v;         /* 32 bit unsigned vector */
  }         value; …
Run Code Online (Sandbox Code Playgroud)

go

8
推荐指数
3
解决办法
4617
查看次数

Go/CGo - 如何使用作为指针传递的C数组

我将此作为问题/答案发布,因为我花了一段时间才解决问题,我不介意对我的解决方案提出一些反馈意见.在Go/CGo中,如何使用作为指针传递的C数组?

例如,使用此C结构:

struct _GNetSnmpVarBind {                     
    guint32     *oid;       /* name of the variable */
    gsize       oid_len;    /* length of the name */
    ... and other fields
};  
Run Code Online (Sandbox Code Playgroud)

我想将oid字段转换为Go字符串,我将如何使用guint32*指针?

go cgo

7
推荐指数
2
解决办法
7402
查看次数

为Github构建Golang发布二进制文件

我正在寻找关于如何为Golang项目轻松构建常用平台二进制文件的想法,以便在Github上发布.

我已经知道如何使用Github在创建版本中的说明手动执行发布.我目前正在使用aktau/github-release进行发布,但这需要手动登录到不同的机器(OSX,Linux,Windows)并进行发布.

Benedikt Lang在博客中发表了关于使用Travis-CI的文章(我还没有尝试过).但我认为公共Travis只会为Linux构建二进制文件.

有什么建议?

github go

7
推荐指数
1
解决办法
1529
查看次数

使用反射附加到结构中的切片字段

我有一个struct看起来像这样:

type guitaristT struct {
    Surname  string   `required=true`
    Year     int64    `required=false`
    American bool     // example of missing tag
    Rating   float32  `required=true`
    Styles   []string `required=true,minsize=1`
}
Run Code Online (Sandbox Code Playgroud)

我有一个如下所示的环境变量,我使用反射来填充基于键的结构。

jimiEnvvar :="surname=Hendrix|year=1942|american=true|rating=9.99
  |styles=blues|styles=rock|styles=psychedelic"
Run Code Online (Sandbox Code Playgroud)

我可以string, int64, bool and float32使用反射设置字段,但我坚持如何附加到slice字段Styles。例如,基于上述,jimiEnvvar我希望该字段jimi.Styles具有 values ["blues","rock", "psychedelic"]

我有以下(简化)代码:

result := guitaristT{}
// result.Styles = make([]string, 10) // XXX causes 10 empty strings at start
result.Styles = make([]string, 0)     // EDIT: Alessandro's solution
...
v := reflect.ValueOf(&result).Elem()
... …
Run Code Online (Sandbox Code Playgroud)

reflection go

7
推荐指数
1
解决办法
1288
查看次数

"进行上下文"在进行导入时意味着什么?

我一直在寻找SaltStack文档中有关"上下文"含义的解释.但是只有使用上下文的例子.

什么是'背景'?

它在这做什么?为什么Debianmap.jinja文件中被忽略?(例如map.log_dir似乎"跳下"一个级别)

# config.sls
{% from "bind/map.jinja" import map with context %}

include:
  - bind

{{ map.log_dir }}:
  file.directory:
    - user: root
    - group: {{ salt['pillar.get']('bind:config:group', map.group) }}
    - mode: 775
    - require:
      - pkg: bind

# map.jinja
{% set map = salt['grains.filter_by']({
    'Debian': {
        'pkgs': ['bind9', 'bind9utils', 'dnssec-tools'],
        'service': 'bind9',
        'config_source_dir': 'bind/files/debian',
        'zones_source_dir': 'zones',
        'config': '/etc/bind/named.conf',
        'local_config': '/etc/bind/named.conf.local',
        'key_config': '/etc/bind/named.conf.key',
        'options_config': '/etc/bind/named.conf.options',
        'default_config': '/etc/default/bind9',
        'default_zones_config': '/etc/bind/named.conf.default-zones',
        'named_directory': '/var/cache/bind/zones',
        'log_dir': '/var/log/bind9',
        'user': 'root', …
Run Code Online (Sandbox Code Playgroud)

salt-stack

6
推荐指数
2
解决办法
3451
查看次数