我是 Go 的新手,目前正在移植 PHP 程序。
我知道 Go 不是一种动态类型的语言,我喜欢它。它看起来非常有条理并且很容易跟踪所有内容。
但我遇到过一些似乎有点……丑陋的情况。有没有更好的方法来执行这种过程:
plyr := builder.matchDetails.plyr[i]
plyrDetails := strings.Split(plyr, ",")
details := map[string]interface{}{
"position": plyrDetails[0], "id": plyrDetails[1],
"xStart": plyrDetails[2], "zStart": plyrDetails[3],
}
编辑:
有没有更好的方法来实现包含来自 plyr 的字符串的映射,而不是创建两个额外的变量,然后直接销毁?或者这是正确的方法吗?
最佳答案
tl;博士:
struct而不是map来处理您使用过几次的任何东西,以便进行更多的编译器检查encoding/json 的常用方法可以完成这两个任务。与此同时,不要过度追求性能,因为无论如何您都可能会大大提高旧应用程序的速度;没有迹象表明解析速度或 GC 是一个问题;以及您在第一版中提到的句法差异。帖子的内容实际上不一定与 GC 相关。
因此,我知道您可能正在逐个移植,这可能会限制您现在可以更改的内容。
但是如果/当你可以改变事情时,一个真正干净的解决方案是使用 the encoding/json package和一个结构:json 包将解析结构的输入/生成输出,而无需您进行任何手动字符串操作,并且使用结构可以为您提供编译时检查,而不仅仅是运行时检查 map 。许多 Go 应用程序(和其他应用程序)使用 JSON 来公开他们的服务。
中间步骤可能是为您至少使用过几次的任何内部结构引入 struct 类型,而不是 map,因此即使不更新解析,至少应用程序的内部 获得了编译时检查的好处。 struct 也是类似 the gorm object/relational mapper 的东西期待处理。它们碰巧使用的内存比 map 少,并且访问速度更快(语法上更简洁),但这些甚至不一定是这里最重要的考虑因素。
关于您现在拥有的性能,特别是不同的语法是否会使其更快:不要担心,原因有很多:端口可能比 PHP 更快无论你做什么;我们还没有任何迹象表明解析或 GC 实际上很慢或你的瓶颈;并且您在问题的第一次修订中谈到的语法差异可能与 GC 无关或根本无关。代码中更多/更少的 var 名称可能不对应更多/更少的堆分配,因为 Go 通常可以在堆栈上分配,在 'escape analysis' in Dave Cheney's Gocon Tokyo slides 下简要讨论。 .正如 peterSO 所说,我们似乎正在研究较小引用的分配,而不是每次都从请求中复制所有字符串字节。
关于variables - 重新分配接口(interface)或允许 GC 对临时变量进行处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25471047/
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende
我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击
通过rubykoans.com,我在about_array_assignment.rb中遇到了这两段代码你怎么知道第一个是非并行赋值,第二个是一个变量的并行赋值?在我看来,除了命名差异之外,代码几乎完全相同。4deftest_non_parallel_assignment5names=["John","Smith"]6assert_equal["John","Smith"],names7end45deftest_parallel_assignment_with_one_variable46first_name,=["John","Smith"]47assert_equal'John
我正在使用active_admin,我在Rails3应用程序的应用程序中有一个目录管理,其中包含模型和页面的声明。时不时地我也有一个类,当那个类有一个常量时,就像这样:classFooBAR="bar"end然后,我在每个必须在我的Rails应用程序中重新加载一些代码的请求中收到此警告:/Users/pupeno/helloworld/app/admin/billing.rb:12:warning:alreadyinitializedconstantBAR知道发生了什么以及如何避免这些警告吗? 最佳答案 在纯Ruby中:classA
我正在处理旧代码的一部分。beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)endRubocop错误如下:Avoidstubbingusing'allow_any_instance_of'我读到了RuboCop::RSpec:AnyInstance我试着像下面那样改变它。由此beforedoallow_any_instance_of(SportRateManager).toreceive(:create).and_return(true)end对此:let(:sport_
我早就知道Ruby中的“常量”(即大写的变量名)不是真正常量。与其他编程语言一样,对对象的引用是唯一存储在变量/常量中的东西。(侧边栏:Ruby确实具有“卡住”引用对象不被修改的功能,据我所知,许多其他语言都没有提供这种功能。)所以这是我的问题:当您将一个值重新分配给常量时,您会收到如下警告:>>FOO='bar'=>"bar">>FOO='baz'(irb):2:warning:alreadyinitializedconstantFOO=>"baz"有没有办法强制Ruby抛出异常而不是打印警告?很难弄清楚为什么有时会发生重新分配。 最佳答案
1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,
假设您在Ruby中执行此操作:ar=[1,2]x,y=ar然后,x==1和y==2。是否有一种方法可以在我自己的类中定义,从而产生相同的效果?例如rb=AllYourCode.newx,y=rb到目前为止,对于这样的赋值,我所能做的就是使x==rb和y=nil。Python有这样一个特性:>>>classFoo:...def__iter__(self):...returniter([1,2])...>>>x,y=Foo()>>>x1>>>y2 最佳答案 是的。定义#to_ary。这将使您的对象被视为要分配的数组。irb>o=Obje
我正在使用Dragonfly在Rails3.1应用程序上处理图像。我正在努力通过url将图像分配给模型。我有一个很好的表格:{:multipart=>true}do|f|%>RemovePicture?Dragonfly的文档指出:Dragonfly提供了一个直接从url分配的访问器:@album.cover_image_url='http://some.url/file.jpg'但是当我在控制台中尝试时:=>#ruby-1.9.2-p290>picture.image_url="http://i.imgur.com/QQiMz.jpg"=>"http://i.imgur.com/QQ