使用缓冲通道,如何测量通道中有多少元素?例如,我正在创建和发送这样的频道:
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).我将把它用于生产者和消费者之间的流量控制,即一旦我通过高水印,改变一些行为,直到我通过低水印回传.
如何在不使用尾递归的情况下在匿名函数中进行递归?
例如(来自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
有没有办法使用vimdiff来比较文件的当前版本和同一文件n git版本之前?
例如,我正在分支主机上的文件foo.c上工作.我想在master~10之间的foo.c和foo.c之间做一个vimdiff,从旧版本复制一两行.
PS我知道git樱桃选择,但这是整个文件,而不仅仅是几行.
我一直在研究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)
启蒙寻求....
我正在使用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.有办法做到这一点吗?
我在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/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*指针?
我正在寻找关于如何为Golang项目轻松构建常用平台二进制文件的想法,以便在Github上发布.
我已经知道如何使用Github在创建版本中的说明手动执行发布.我目前正在使用aktau/github-release进行发布,但这需要手动登录到不同的机器(OSX,Linux,Windows)并进行发布.
Benedikt Lang在博客中发表了关于使用Travis-CI的文章(我还没有尝试过).但我认为公共Travis只会为Linux构建二进制文件.
有什么建议?
我有一个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) 我一直在寻找SaltStack文档中有关"上下文"含义的解释.但是只有使用上下文的例子.
什么是'背景'?
它在这做什么?为什么Debian在map.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)