小编Edg*_*erg的帖子

在Golang中传出JSON中的格式时间戳?

我最近一直在玩Go,这太棒了.我无法弄清楚的事情(在浏览文档和博客文章之后)是如何将time.Time类型格式化为我所喜欢的任何格式,当它被编码时json.NewEncoder.Encode

这是一个最小的代码示例:

package main

type Document struct {
    Name        string
    Content     string
    Stamp       time.Time
    Author      string
}

func sendResponse(data interface{}, w http.ResponseWriter, r * http.Request){
     _, err := json.Marshal(data)
    j := json.NewEncoder(w)
    if err == nil {
        encodedErr := j.Encode(data)
        if encodedErr != nil{
            //code snipped
        }
    }else{
       //code snipped
    }
}

func main() {
    http.HandleFunc("/document", control.HandleDocuments)
    http.ListenAndServe("localhost:4000", nil)
}

func HandleDocuments(w http.ResponseWriter,r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    w.Header().Set("Access-Control-Allow-Origin", "*")

    switch r.Method {
        case "GET": 
            //logic snipped
            testDoc …
Run Code Online (Sandbox Code Playgroud)

formatting time json go

46
推荐指数
4
解决办法
5万
查看次数

foreach中的PHP名称与外部作用域相同会导致覆盖

所以今天我正在创建一个表单,并且恰好在foreach循环中给出一个与后来使用的名称相同的变量名.令我惊讶的是,foreach循环的声明覆盖了变量的先前声明.

对我来说,这似乎很奇怪,因为我期望as $value => $a将两个变量的范围限制为foreach循环.

这是发生的事情:

php > $a = 5;
php > $b = array(1,2,3);
php > foreach($b as $value => $a){ echo $a; };
123
php > echo $a;
3
Run Code Online (Sandbox Code Playgroud)

这是我的预期:

php > $a = 5; //define a in outer scope
php > $b = array(1,2,3);
php > foreach($b as $value => $a){ echo $a; /* This $a should be the one from the foreach declaration */ }; 
123
php > echo $a; //expecting …
Run Code Online (Sandbox Code Playgroud)

php foreach scope behavior

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

为什么大型数组构造函数调用会破坏Scala编译器?

我正在为一份工作做一些图像处理,并用Im4Java编写脚本.为了编写一些单元格,我决定只将一个局部图像存储为代码中的字节数组.我抓住了一个简单的测试图像

从维基百科中拉出的示例图像

然后将其转换为字节数组,如下所示:

import java.nio.file.{Paths, Files}
import java.nio.charset.StandardCharsets
val stuff =scala.io.Source.fromFile(fileName)(scala.io.Codec.ISO8859).map(_.toByte).toArray
Files.write(Paths.get("tmp.txt"), stuff.mkString(",").getBytes(StandardCharsets.UTF_8))
Run Code Online (Sandbox Code Playgroud)

然后将这些字节放入Array[Byte]apply构造函数中:

class testCase() {
    val smallFile = Array[Byte](-1,-40,-1, …) // 9816 arguments to the constructor passed here
}
Run Code Online (Sandbox Code Playgroud)

当我尝试编译它时(请参阅此要点中的完整scala文件)我很惊讶地看到它打破了编译器的大小!我得到以下stacktrace(我已经截断了一点):

[error] uncaught exception during compilation: java.lang.StackOverflowError
java.lang.StackOverflowError
at scala.reflect.internal.Symbols$Symbol.info(Symbols.scala:1241)
at scala.reflect.internal.Symbols$Symbol.baseTypeSeqLength$1(Symbols.scala:1628)
at scala.reflect.internal.Symbols$Symbol.isLess(Symbols.scala:1631)
at scala.reflect.internal.Types$Type.baseTypeIndex(Types.scala:992)
at scala.reflect.internal.Types$CompoundType.baseType(Types.scala:1655)
at scala.reflect.internal.Types$ClassTypeRef$class.baseType(Types.scala:2186)
at scala.reflect.internal.Types$TypeRef$$anon$6.baseType(Types.scala:2544)
at scala.reflect.internal.Types$class.firstTry$1(Types.scala:6064)
at scala.reflect.internal.Types$class.isSubType2(Types.scala:6228)
at scala.reflect.internal.Types$class.isSubType(Types.scala:5837)
at scala.reflect.internal.SymbolTable.isSubType(SymbolTable.scala:13)
at scala.reflect.internal.Types$class.fourthTry$1(Types.scala:6223)
at scala.reflect.internal.Types$class.thirdTryRef$1(Types.scala:6123)
at scala.reflect.internal.Types$class.thirdTry$1(Types.scala:6145)
at scala.reflect.internal.Types$class.secondTry$1(Types.scala:6109)
at scala.reflect.internal.Types$class.firstTry$1(Types.scala:6070)
at scala.reflect.internal.Types$class.isSubType2(Types.scala:6228)
at scala.reflect.internal.Types$class.isSubType(Types.scala:5837)
at scala.reflect.internal.SymbolTable.isSubType(SymbolTable.scala:13) …
Run Code Online (Sandbox Code Playgroud)

arrays scala compiler-errors

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

如何创建块感知执行上下文?

出于某种原因,我无法解决这个问题.我有一个运行Play的应用程序调用Elastic Search.作为我的设计的一部分,我的服务使用包含scala future的Java API,如本博文中所示.我已经更新了该帖子中的代码以提示ExecutionContext,它将执行一些阻塞I/O,如下所示:

    import scala.concurent.{blocking, Future, Promise}
    import org.elasticsearch.action.{ActionRequestBuilder, ActionListener, ActionResponse }
    def execute[RB <: ActionRequestBuilder[_, T, _, _]](request: RB): Future[T] = {
        blocking {
            request.execute(this)
            promise.future
        }
    }
Run Code Online (Sandbox Code Playgroud)

我构建查询以发送给ES的实际服务将executionContext作为构造函数参数,然后用于调用弹性搜索.我这样做是为了让播放使用的全局执行上下文不会让它的线程被ES的阻塞调用所束缚.这个SO评论提到只有全局上下文才能阻塞,所以这让我不得不创建自己的.在同一个帖子/答案中有很多关于使用ForkJoin池的信息,但是我不确定如何使用这些文档中的内容并将其与阻塞文档中提示相结合来创建响应阻塞的执行上下文提示.

我认为我遇到的一个问题是,我不确定如何首先如何回应阻止上下文?我正在阅读最佳实践,它使用的示例是一个无限的线程缓存:

请注意,在这里我更喜欢使用无限制的"缓存线程池",因此它没有限制.在阻塞I/O时,我们必须拥有足够的线程来阻止I/O. 但是如果无界限太多,取决于用例,你可以稍后对其进行微调,这个样本的想法是你得到了滚动.

那么这是否意味着我的ForkJoin支持的线程池,我应该尝试在处理非阻塞I/O时使用缓存线程并创建一个新线程来阻止IO?或者是其他东西?几乎我在网上找到的关于使用单独线程池的每个资源都倾向于执行新手指南所做的事情,也就是说:

如何调整各种线程池在很大程度上取决于您的个人应用程序,超出了本文的范围.

我知道这取决于你的应用程序,但在这种情况下,如果我只想创建某种类型的阻塞感知ExecutionContext并理解管理线程的合适策略.如果Context专门用于应用程序的单个部分,那么我应该只是制作一个固定的线程池大小而不是首先使用/忽略该blocking关键字吗?

我倾向于絮絮叨叨,所以我会试着在答案中分解我正在寻找的东西:

  1. 码!阅读所有这些文档仍然让我觉得我觉得只能编码一个阻塞感知的上下文,我真的很感激一个例子.
  2. 关于如何处理阻塞线程的任何链接或提示,即无休止地为它们创建新线程,检查可用线程的数量,如果太多则拒绝,其他一些策略
  3. 我不是在寻找性能提示,我知道我只会通过测试得到它,但我无法测试我是否无法弄清楚如何编写上下文的代码!我确实找到了一个ForkJoins vs threadpools的例子,但我错过了关于blocking那里的关键部分.

对不起,这里有一个很长的问题,我只是想让你了解我正在看的东西,并且我一直试图绕过这一天超过一天需要一些外界的帮助.


编辑:为了清楚起见,ElasticSearch Service的构造函数签名是:

//Note that these are not implicit parameters!
class …
Run Code Online (Sandbox Code Playgroud)

java concurrency multithreading scala executioncontext

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

如何在Spray中的嵌套路由中使用字符串指令提取器

在这里回答我自己的问题,因为这花了我一天多的时间来弄清楚,这是一个非常简单的问题,我认为其他人可能会遇到.

在使用REST创建RESTful-esk服务时,我希望将具有字母数字id的路由作为路径的一部分进行匹配.这是我最初开始的:

case class APIPagination(val page: Option[Int], val perPage: Option[Int])
get {
  pathPrefix("v0" / "things") {
    pathEndOrSingleSlash {
      parameters('page ? 0, 'perPage ? 10).as(APIPagination) { pagination =>
        respondWithMediaType(`application/json`) {
          complete("things")
        }
      }
    } ~ 
    path(Segment) { thingStringId =>
      pathEnd {
        complete(thingStringId)
      } ~
      pathSuffix("subthings") {
        pathEndOrSingleSlash {
          complete("subthings")
        }
      } ~
      pathSuffix("othersubthings") {
        pathEndOrSingleSlash {
          complete("othersubthings")
        }
      } 
    }
  }
} ~ //more routes...
Run Code Online (Sandbox Code Playgroud)

这没有问题编译,但是当使用scalatest来验证路由结构是否正确时,我很惊讶地发现这种类型的输出:

"ThingServiceTests:"
"Thing Service Routes should not reject:"
- should /v0/things
- should /v0/things/thingId
- should …
Run Code Online (Sandbox Code Playgroud)

scala spray spray-dsl

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