小编Ric*_*777的帖子

使用Gorilla会话自定义后端有什么好处?

我想使用Redis进行会话管理.
但我无法弄清楚使用Redis作为Gorilla会话包的自定义后端直接使用它的优势是什么?

链接到Gorilla会话包:http://www.gorillatoolkit.org/pkg/sessions

go session-cookies redis gorilla

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

转换struct和byte数组之间的转换

我正在Go中编写一个客户端 - 服务器应用程序.我想在Go中执行类似C的类型转换.

比如Go

type packet struct {
    opcode uint16
    data [1024]byte
}

var pkt1 packet
...
n, raddr, err := conn.ReadFromUDP(pkt1)  // error here
Run Code Online (Sandbox Code Playgroud)

此外,我想执行类似C的memcpy(),这将允许我直接将接收到的网络字节流映射到结构.

例如,以上收到的pkt1

type file_info struct {
    file_size uint32       // 4 bytes
    file_name [1020]byte
}

var file file_info
if (pkt1.opcode == WRITE) {
    memcpy(&file, pkt1.data, 1024)
}
Run Code Online (Sandbox Code Playgroud)

struct casting go memcpy

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

编译后从类路径中删除条目

我有一个依赖于jar项目的遗留战争项目,jar项目需要在类路径中添加一些非托管jar 进行编译.但这些罐子不应该包装在战争中.所以我的问题是如何从fullClasspath中删除这些条目.以下内容不起作用:

val excludeFilter = "(servlet-api.jar)|(gwt-dev.jar)|(gwt-user.jar)"
val filteredCP = cp.flatMap({ entry =>
   val jar = entry.data.getName()
   if (jar.matches(excludeFilter)) {
     Nil
   } else {
     Seq(entry)
   }
})
fullClasspath in Runtime = filteredCP
Run Code Online (Sandbox Code Playgroud)

我很确定必须有简单的方法来做到这一点,但到目前为止它已经让我望而却步.

编辑:根据Pablo的使用托管类路径而不是非托管类的消息我可以将问题改为:如何将本地jar添加到managedClasspath.我的罐子放在一个带有(非常)非标准布局的本地文件夹中:

lib/testng.jar
lib/gwt/2.3/gwt-user.jar
lib/jetty/servlet.jar
Run Code Online (Sandbox Code Playgroud)

所以基本上我正在寻找类似的东西:

libraryDependencies += "testng" % "provided->test"
libraryDependencies += "gwt" % "2.3" % "gwt-user" % "provided->compile"
libraryDependencies += "jetty" % "servlet" % "provided->default"
Run Code Online (Sandbox Code Playgroud)

允许我从我自己的本地lib文件夹中获取jar.

scala sbt

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

如何在Go中使用频道发送方向

在Go中,可以指定通道可以发送的方向.我正在尝试创建一个关于它的示例,请查看以下代码:

package main

import (
    "fmt"
    "time"
)

func main() {

    ic_send_only := make(<-chan int) //a channel that can only send data - arrow going out is sending
    ic_recv_only := make(chan<- int) //a channel that can only receive a data - arrow going in is receiving

    go func() {
        ic_recv_only <- 4555
    }()

    go func() {

        ic_send_only <- ic_recv_only

    }()

    fmt.Println(ic_recv_only)
    time.Sleep(10000)

}
Run Code Online (Sandbox Code Playgroud)

我得到编译器错误

# command-line-arguments
.\send_receive.go:19: invalid operation: ic_send_only <- ic_recv_only (send to receive-only type <-chan int)
[Finished in …
Run Code Online (Sandbox Code Playgroud)

multithreading go

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

为什么在 Go 中存在 int 类型

int, int32, int64Golang

int32 has 32 bits,
int64 has 64 bits,
int has 32 or 64 or different number of bits according to the environment.
Run Code Online (Sandbox Code Playgroud)

我认为int32并且int64对于该计划来说完全足够了。我不知道为什么int类型应该存在,它不会使我们的代码的动作更难以预测吗?

而且 in C++, typeint和 type 的long长度是不确定的。我认为这会使我们的程序变得脆弱。我很困惑。

go

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

仅在字符串中显示一次唯一字符

我有一个重复字母的字符串.我希望不止一次重复的字母只显示一次.例如,我有一个字符串aaabbbccc我希望结果是abc.到目前为止我的功能是这样的:

  • 如果这封信没有重复,则不会显示
  • 如果它重复一次,它只显示一次(即aa显示a)
  • 如果重复两次,则显示全部(即aaa显示aaa)
  • 如果重复3次,则显示6次(如果aaaa显示aaaaaa)
function unique_char(string) {
    var unique = '';
    var count = 0;
    for (var i = 0; i < string.length; i++) {
        for (var j = i+1; j < string.length; j++) {
            if (string[i] == string[j]) {
                count++;
                unique += string[i];
            }
        }
    }
    return unique;
}

document.write(unique_char('aaabbbccc'));
Run Code Online (Sandbox Code Playgroud)

该函数必须在循环内循环; 这就是为什么第二个for在第一个内部.

javascript string character unique

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

Java在项目文件夹中获取文件作为资源

我目前在Java中设置了一个项目,在Eclipse中使用以下目录结构:

在此输入图像描述

在我的代码中,我有以下几行:

InputStream is = this.getClass().getClassLoader().getResourceAsStream("resources/config");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is));
Run Code Online (Sandbox Code Playgroud)

但是,InputStream is总是被赋值为null,这会在到达第二行时导致崩溃.我知道它与我如何设置它正在寻找的路径有关,但我无法弄清楚它为什么不起作用.

java io

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

为什么fmt.Printf在Go中接受%x的字节数组

我是Go的新手.我想知道数组和切片之间的确切区别,所以如果我对规范过于痴迷,请原谅我.

在对包的文档fmt,它说的Printf%x可以接受的字节串和切片.它没有说明字节数组.但事实上,如果我在其中放入一个字节数组,它打印出来也很好!

package main

import (
  "fmt"
)

func main() {
  var b [6]byte
  for i := 0; i < 6; i++ {
    b[i] = 'a'
  }
  fmt.Printf("%s\n", b) // "aaaaaa"
}
Run Code Online (Sandbox Code Playgroud)

谁能告诉我为什么?AFAIK,字节数组和切片不能隐式转换为彼此.

感谢您阅读我的问题!

go

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

如何检查ioutil.ReadFile返回的特定错误类型?

当我ioutil用来读取文件时,它可能会返回错误.但是,如果我想过滤一些错误代码,我该怎么办?

res, err := ioutil.ReadFile("xxx")
if err != nil {
    fmt.Println(err.Error())  
}
...
Run Code Online (Sandbox Code Playgroud)

在上面的代码段中,当文件没有权限时,fmt.Println(err.Error())将打印"open xxxxx: permission denied.如果我想捕获此类错误,我怎么知道文件读取失败,因为权限被拒绝?

我应该搜索err.Error()字符串permission denied- 这看起来很不合适.有没有更好的方法?

提前致谢.

更新

在尝试了@Intermernet解决方案之后,我发现它不会命中case os.ErrPermission,它会命中default并打印"open xxx: Permission denied".

@Aedolon解决方案没问题,os.IsPermission(err)可以通过权限拒绝判断文件是否失败.

go

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

Go是否清理Web请求的URL?

我在Go中实现了一个简单的Web服务器.由于我没有网络开发的经验,这对我来说是一个严肃的问题.

假设我loadPage这里提供具有修改功能的网页

func loadPage(title string) []byte {
    filename := title 
    body, _ := ioutil.ReadFile(filename)
    return body
}

func handler(w http.ResponseWriter, req *http.Request) {
    content := loadPage(req.URL.Path[1:])
    fmt.Fprintf(w, "%s", content)
}
Run Code Online (Sandbox Code Playgroud)

从技术上讲,这允许我以一种形式写一个请求

 http://example.com/../../etc/passwd
Run Code Online (Sandbox Code Playgroud)

并且代码很乐意提供/ etc/passwd文件,但事实并非如此.这是否意味着../在Go http包或http协议本身中存在某种形式的保护,或者我只是做错了什么并且它是一个安全漏洞?

go web

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