我很好奇,为什么要开不隐式转换[]T到[]interface{}时候会隐式转换T到interface{}.对于这种转换,我有什么不平凡的东西吗?
例:
func foo([]interface{}) { /* do something */ }
func main() {
var a []string = []string{"hello", "world"}
foo(a)
}
Run Code Online (Sandbox Code Playgroud)
go build 抱怨
不能在函数参数中使用(type [] string)作为type [] interface {}
如果我尝试明确地做,同样的事情:b := []interface{}(a)抱怨
无法将(type [] string)转换为type [] interface {}
所以每次我需要进行这种转换(这看起来很多),我一直在做这样的事情:
b = make([]interface{}, len(a), len(a))
for i := range a {
b[i] = a[i]
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来执行此操作,或标准库函数来帮助进行这些转换?每次我想调用一个可以获取例如整数或字符串列表的函数时,编写4行额外代码似乎有点愚蠢.
我一直在阅读websockets中的ping/pong消息以保持连接活着,但我不确定它们是什么.它是一种独特的框架类型吗?(我没有在与乒乓相关的chrome中的javascript WebSocket对象上看到任何方法).或者它只是一种设计模式(例如,我将"ping"或任何其他字符串发送到服务器并让它响应).乒乓球是否与延续帧有关?
我问的原因是我正在使用一个在Mongrel2后面运行的python框架,所以我想知道是否有办法向Mongrel2发送一条特定的ping/pong消息,告诉它在没有我的python应用需要的情况下保持连接存活担心它.我想,类似于有一个单独的HTTP方法.而且我认为专用的ping/pong消息帧可能比字符串"ping"更简单(服务器和网络上的负载更少),尽管这可能无关紧要.
编辑:我只看了RFC 6455,它看起来像Ping和Pong肯定是控制帧类型与自己的操作码.那么如何从Chrome中的javascript发送Ping帧?
首次与Jekyll合作,看起来自动重新加载功能(运行jekyll --auto --server)仅由降价文件的更新触发.
这是正常行为吗?有没有办法改变其他类型的文件,如CSS(我使用scss)或html文件,_layouts以触发自动重新加载?
从我所看到的一切来看,似乎在用户输入的内容上逃避html的惯例(为了防止XSS)是在渲染内容时这样做.大多数模板语言似乎默认都是这样做的,而且我遇到过像stackoverflow这样的问题,认为这个逻辑是表示层的工作.
所以我的问题是,为什么会这样呢?对我而言,在输入(即表单或模型验证)上逃避似乎更清晰,因此您可以假设数据库中的任何内容都可以安全地显示在页面上,原因如下:
多种输出格式 - 对于现代Web应用程序,您可能使用服务器端html呈现,使用ajax/JSON的javascript web应用程序和接收JSON的移动应用程序(可能有也可能没有某些webview,这可能是javascript应用程序或服务器呈现的HTML).所以你必须处理遍布各地的html.但是输入将始终在保存到db之前被实例化为模型(并经过验证),并且您的模型都可以从相同的基类继承.
您已经必须小心输入以防止代码注入攻击(授予这通常是抽象到ORM或db游标,但仍然),所以为什么不担心html转义到这里所以你不必担心任何事情安全相关的输出?
我很想听听关于为什么html在页面渲染上转义是首选的论点
我在几个上游应用服务器前面使用nginx作为负载均衡器,我想设置跟踪ID以用于将请求与应用服务器日志相关联.在Nginx中做到这一点的最好方法是,有一个很好的第三方模块吗?
否则一个非常简单的方法是将它从时间戳(可能加上一个随机数,如果它不够精确),并在请求上设置为额外的头,但我在文档中看到的唯一的set_header命令是设置一个响应标题.
之前已经提出过这个问题的变化,但似乎没有提到令其他团队成员感到不安的问题.在现有帖子中(请参阅如何"取消"svn和/或git中的文件),接受的答案通常是运行svn rm FILE或svn rm --keep-local FILE,然后svn:ignore根据需要设置属性.我花了最后20分钟玩这个(在两个地方检查一个回购,从一个删除一个文件,然后更新另一个,等等).这是我发现的(我正在使用SVN 1.6.16):
首先,从我所知道的--keep-local标志不会影响将要从存储库更新的其他所有人发生的事情.对于他们来说,它看起来就像你刚刚做了一个常规的svn delete(没有一个我见过的明确提到的subversion文档 - 也许很明显你还在做一个svn delete操作而且"保持本地"只会影响事物在当地方面,但对我来说并不一定明显).
因此有两种情况 - 1.团队成员A删除团队成员B没有本地修改的文件或2.团队成员A删除团队成员B 确实具有未提交的本地更改的文件.
在1中,删除发生后B的文件已被删除.他现在必须自己恢复它(svn merge -rHEAD:XXX FILE; svn revert FILE即将FILE的XXX版本恢复到工作目录中并且在下一次提交时不再重新提交)
在2中,B在更新时看到树冲突,并且FILE现在具有 A + C在其下面具有消息"本地编辑,在更新时传入删除"的状态.在这一点上,我不确定推荐的解决方案是什么.我做的是将FILE复制到其他地方,只是为了安全,然后运行svn revert FILE.它最终是不必要的,因为FILE在工作目录中仍然存在未版本化,所有本地修改都保持不变.但是我不知道我有多信任这个,因为我已经svn revert在其他场景中删除了我未提交的更改.
TL;博士:是不是真的,只有到联合国版本的方式在SVN文件是从每个人的其他工作目录的团队将其删除,并让他们找回自己的情况?我使用--keep-local错误,还是错过了另一个类似的选项?
我正在尝试做一个django查询,但有几个不同WHERE参数的可能性.所以我想做的事情如下:
querystring = "subcat__id__in=[1,3,5]"
Listing.objects.filter(querystring)
Run Code Online (Sandbox Code Playgroud)
这里列表在我的模型中定义,它包含Many-To-Many字段subcat.但是,这会引发一个ValueError因为过滤器不接受字符串作为其参数.Python中是否有一种方法可以将字符串作为其内容而非字符串进行求值?类似于print语句的东西,它打印字符串的内联值而不是标准输出.
顺便说一下,我不仅仅这样做的原因
querystring = [1,3,5]
Listing.objects.filter(subcat__id__in=querystring)
Run Code Online (Sandbox Code Playgroud)
是我不总是过滤subcat__id,有时它是一个或几个其他参数,我宁愿不必写出一堆由if语句控制的独立查询.任何建议都非常感谢.
我正在使用Fabric 1.01,在我的fabfile中我正在使用put命令.这条线是:
put('file.tar.gz', '~/file.tar.gz')
Run Code Online (Sandbox Code Playgroud)
服务器位于env.hosts列表中. file.tar.gz与fabfile位于同一目录中,我正在运行此目录中的代码.
当我运行代码时,它会达到运行此put命令的程度.在失败之前输出是:
[uname@site.com] put: file.tar.gz -> ~/file.tar.gz
Fatal error: put() encountered an exception while uploading 'file.tar.gz'
Underlying exception message:
No such file
Run Code Online (Sandbox Code Playgroud)
谁知道这是从哪里来的?该文件肯定存在于我的本地机器上,我也尝试将第二个put()参数作为'/ server/path/to /',我尝试使用该文件的绝对路径进行第一次put()争论,一切都无济于事.
我在使用gocheck运行测试时遇到了麻烦.我需要传递一个标志来指定要运行的测试,例如go test -gocheck.f ApiSuite.TestSomeFunction.
我的测试文件导入了一个设置包,其中有一个init()指定自己的标志和调用的函数flag.parseFlags().我遇到的问题是,这似乎覆盖了gocheck标志,所以我得到一个错误,标志-gocheck.f无法识别.
注意:不确定这是否相关,但它只发生在我的一些软件包而不是其他软件包中.我假设它只是基于订单决定导入包,但我想如果这是相关的我会提到它.
有没有其他人遇到这个问题?是否有一种简单的方法可以让所有标志组合而不会被破坏,或者使gocheck标志优先于我的自定义标志?
我想知道是否有办法使用pip"安装"单文件python模块(即只需要下载指定版本的文件并将其复制到site-packages).
我有一个Django项目,它使用了几个不合适的第三方模块(django-thumbs和其他几个),我想要pip freeze一切,所以项目可以很容易地安装在别处.我试过这样做
pip install git+https://github.com/path/to/file.git
(并尝试使用-e标签)但是pip抱怨没有setup.py文件.
编辑:我应该提到 - 我想这样做的原因是我可以在requirements.txt文件中包含所需的模块,以便在新机器或新的virtualenv上更轻松地设置项目.
go ×2
python ×2
django ×1
fabric ×1
go-interface ×1
go-reflect ×1
javascript ×1
jekyll ×1
mongrel2 ×1
nginx ×1
pip ×1
svn ×1
webserver ×1
websocket ×1
xss ×1