In a version prior to the release of go 1.5 of the Tour of Go website, there's a piece of code that looks like this.
package main
import (
"fmt"
"runtime"
)
func say(s string) {
for i := 0; i < 5; i++ {
runtime.Gosched()
fmt.Println(s)
}
}
func main() {
go say("world")
say("hello")
}
Run Code Online (Sandbox Code Playgroud)
The output looks like this:
hello
world
hello
world
hello
world
hello
world
hello
Run Code Online (Sandbox Code Playgroud)
What is bothering me is that when runtime.Gosched() is …
假设我有一个字段名称带字符的字典,比如{'person.name': 'Joe'}.如果我想用它str.format,有可能吗?
我的第一直觉是
'Name: {person.name}'.format(**{'person.name': 'Joe'})
Run Code Online (Sandbox Code Playgroud)
但这只有在我的字形被塑造的情况下才有效
{'person':{'name':Joe}}
Run Code Online (Sandbox Code Playgroud)
相关的手册文档部分没有提到逃避点.
(旁注:我一般认为
def func(**kw): print(kw)
func(**{'a.b': 'Joe'})
Run Code Online (Sandbox Code Playgroud)
会导致错误,但**即使它们不是有效的标识符,-expanded函数调用似乎也能正常工作!但它确实在非字符串上出错.O_O)
我想编写一个测试套件,以确保某些给定的函数使用严格模式.其中有很多,手动检查它们似乎是一件苦差事.
类似问题中的答案使用函数定义的正则表达式进行检查.但是,我认为这将错误地检测正在测试的函数是在具有"use strict"或文件级"use strict"声明的函数内的情况.答案说"使用严格"是前置的,但在我的环境(Mozilla Rhino)中,情况并非如此:
$ cat strict_sub.js
"use strict";
var strict_function = function() {
not_a_real_global = "foo";
};
print(strict_function);
$ rhino strict_sub.js
function () {
not_a_real_global = "foo";
}
Run Code Online (Sandbox Code Playgroud)
我觉得答案是"不",但有没有办法反省一个函数,看它是否被解析并发现是严格模式?
更新:@Amy建议的一种方法是解析函数的源代码来解决它.如果函数具有use-strict声明(虽然它很繁琐),但是如果严格模式是从程序级传播,则不行; 在这种情况下,我们必须走了AST的计划水平,并检查该对use strict.为了使这个健壮,我们必须实现use strict-propagation的所有规则,解释器已经在某处.
(在SpiderMonkey中测试:
function f() {
"use strict";
}
var fast1 = Reflect.parse(f.toString());
var first_line = fast1.body[0].body.body[0].expression;
print(first_line.type === 'Literal' && first_line.value === 'use strict'); //true
Run Code Online (Sandbox Code Playgroud)
)
我正在尝试加快Go应用程序的Docker构建速度。现在,仅花费60年代就建立了依赖关系(这是一个k8s控制器,所以有很多)。
一个非常重要的约束:我的项目依赖于私有GitHub存储库。我在go mod vendor外面做docker build,在那里我有建立回购协议的资格。
我现在的Dockerfile大致是:
FROM golang:1.12
WORKDIR /src
COPY . .
RUN go build -mod=vendor
...
Run Code Online (Sandbox Code Playgroud)
即使无需下载dep,该构建也要花费一些时间,因为它每次都会重新构建数百个软件包docker build。
我想做的是这样的:
FROM golang:1.12
WORKDIR /src
# these shouldn't change very often
COPY go.mod go.sum vendor ./
RUN go build -mod=vendor <all dependency packages>
COPY . .
RUN go build -mod=vendor
...
Run Code Online (Sandbox Code Playgroud)
我尝试解析go.mod,但是当然列出了模块,而不是包。我曾尝试过,go list但从未设法获得成功。
假设您将一个项目分解为一个超级项目和一个子模块。它们都有稳定(主)分支和开发分支。有没有办法设置子模块,以便超级项目从其 dev 分支跟踪子模块的 dev 分支,从其稳定分支跟踪子模块的稳定分支?
我想象的是这样的.gitmodules:
[submodule "subproject"]
path = subproject
url = http://www.github.com/nfirvine/subproject
branch = $current_branch_name
(我特别关注 Ansible 项目,他们的stable-1.9分支跟踪devel其子模块的分支。这似乎是在自找麻烦。)
您可以使用 git 属性来指定.gitmodules不会自动合并,但我想知道是否有比这更聪明的东西。
我是 Docker 的新手,所以我不确定我是否在这里错过了一些基本的东西。我喜欢在不同的 Docker 容器中拥有各种开发平台的想法,以保持我的主机箱相对干净。我看到这是可能的,但在大多数示例中,它涉及人们在 ssh 进入容器后使用 vim 来编辑代码。我想使用 sublime,我知道我可以映射一个卷,允许我在容器外编辑源代码。我看不到如何配置的部分是对插件的支持,例如 GoSublime 运行 GoCode 之类的工具。是否可以在容器内执行这些工具,而 Sublime 在主机中运行?
谢谢!
我不明白其中的区别.我能看到的唯一区别是PageMod使用匹配模式,而Page使用特定的URL.为什么不只是使用PageMod(更通用)的一切?
docker ×2
go ×2
concurrency ×1
dockerfile ×1
git ×1
go-modules ×1
javascript ×1
python ×1
strict ×1
sublimetext ×1