小编fro*_*rik的帖子

从Go中的Writer获取字符串的最佳方法

我有一段代码使用内置模板系统返回一个网页.它接受ResponseWriter写入结果标记的内容.我现在想要将标记作为字符串,并在某些情况下将其放入数据库中.我考虑了一个接受正常Writer而不是a的方法,ResponseWriter现在我试图找到书面内容.啊哈 - 一个Pipe可能是我需要的,然后我可以ReadStringbufio库中获取字符串.但事实证明,PipeReader从管道出来是不兼容的Reader(我需要的ReadString方法).W00t.大惊喜.所以我可以使用它读取byte [] s PipeReader但是当ReadString它存在时感觉有点不对劲.

那么最好的方法是什么呢?我应该坚持使用Pipe和读取字节还是有更好的东西,我在手册中没有找到?

io go

49
推荐指数
1
解决办法
3万
查看次数

单元测试 - 记录然后失败?

我习惯试驾我的代码.现在我是Go的新手,我正试图尽快做到正确.我在标准库中使用测试包似乎已经足够好了.(我也喜欢它不是另一个外部依赖.我们目前总共有2个依赖项 - 与任何Java或Ruby项目相比.....)无论如何 - 看起来像golang中的断言看起来像这样:

func TestSomething(t *testing.T) {
  something := false
  if something {
    t.Log("Oh noes - something is false")
    t.Fail()      
  }
}
Run Code Online (Sandbox Code Playgroud)

我觉得这个很冗长,而且想在一行上做:

Assert( something, "Oh noes - something is false" )
Run Code Online (Sandbox Code Playgroud)

或类似的东西.我希望我在这里错过了一些明显的东西.什么是最佳/惯用的方式去做?

更新:只是为了澄清.如果我要做这样的事情:

func AssertTrue(t *testing.T, value bool, message string) {
  if value {
    t.Log(message)
    t.Fail()
  }
}
Run Code Online (Sandbox Code Playgroud)

然后像这样写我的测试

func TestSomething(t *testing.T) {
  something := false
  AssertTrue(t, something, "Oh noes - something is false")
}
Run Code Online (Sandbox Code Playgroud)

那么它会不会是的方式来做到这一点?

unit-testing go code-readability

14
推荐指数
1
解决办法
5796
查看次数

寻找用于记录的调用或线程ID

我正在重新编写用golang编写的小型Web应用程序的日志记录.由于外部要求,日志已被隔离在一个地方,因此我们以后可能会在日志服务器中切换.(不是我的想法 - 我保证......)尽管如此,我们现在能够使用标准库的部分和我们传递的用户/会话结构来记录日期/时间,行号,用户和消息等常见内容.周围.

但是 - 这就是问题 - 在较低级别的方法中,为了记录而传递会话只是为了获取用户名是一种浪费.所以我想找一些其他的东西用来在日志文件中找到一个特定的请求.我确信有一些我没有想到的明显的东西.

目前为止的想法:

  • Java日志记录框架可以打印出线程ID,在这种情况下也是如此.只是它在golang中被称为其他东西?
  • 以某种方式使用户/会话结构事物可以全局访问.(仍然需要传递会话ID,除非有一个线程用作查找键.回到想法编号1.)
  • 无论如何,放弃并传递用户/会话结构.
  • 不要在最低级别上记录错误,但仅在用户/会话结构可用时才记录.但行号不会那么好.

我们使用大猩猩的部分用于网络事物,除了主要是标准库.

关于这个的建议和想法?

logging go

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

格式化数字以每隔三位数分割

格式化数字时,我想在每三个字符处放一个空格.根据这个规范:

  it "should format an amount" do
    spaces_on( 1202003 ).should == "1 202 003"
  end
Run Code Online (Sandbox Code Playgroud)

我想出了这段代码来完成这项工作

  def spaces_on amount
    thousands = amount / 1000
    remainder = amount % 1000
    if thousands == 0
      "#{remainder}"
    else
      zero_padded_remainder = '%03.f' % remainder
      "#{spaces_on thousands} #{zero_padded_remainder}"
    end
  end
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,这是否是最好的方法.我怀疑它可能有一个正则表达式,但我不确定我是否会喜欢它的可读性.(另一方面 - %03.f魔法也不是很易读......)

ruby

5
推荐指数
3
解决办法
2779
查看次数

基于go的Web应用程序中的错误页面

我们正在建立一个网站,只使用内置的东西,比如http.HandleFunc设置路由和html.template包来渲染页面.没什么好看的,它工作得很好.现在我开始考虑错误处理,并希望捕获恐慌和诸如此类并重定向到静态错误页面.go的最佳方法是什么?

我一直在思考的蛮力方法是在检测到错误时重定向但是对于通用的catch-all也会很好.我没有在文档中找到任何关于它的内容.

(也考虑沿着相同的404行.)

error-handling web-applications go

5
推荐指数
1
解决办法
1739
查看次数

haml还是苗条的Go端口?

我发现自己使用Go编写Web内容,并发现内置的模板引擎是"有趣的".我想念我的Ruby项目中的haml(或slim).快速搜索没有给我任何类似的东西.Go有没有haml或slim的端口?

haml template-engine go slim-lang

4
推荐指数
2
解决办法
2819
查看次数

Ruby将字符串转换为十进制

我如何转换"$ 10.80"为十进制?使用正则表达式?

ruby regex

3
推荐指数
2
解决办法
2517
查看次数

新行上的+忽略括号.这是为什么?

所以今天我发现了ruby的这个特性:

irb(main):001:0> (1
irb(main):002:1> + 3)
=> 3
Run Code Online (Sandbox Code Playgroud)

如果加号出现在新行上,则不会评估整个行.这是为什么?在这种情况下,我希望括号得到尊重.

ruby

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

将通道用于并发数据库调用是否很好?

我正在开发一个带有统计页面的Web应用程序(用go编写).此页面包含几个使用数据库中的数据进行备份的图表.现在按顺序对数据库进行了几次调用.

这是一个使用通道以获得对数据库的并行调用并可能提高性能的好地方吗?无论性能提升如何 - 在这样的情况下使用通道是否被认为是好的设计?

database go web

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