小编Aid*_*den的帖子

如何使用"crypto/rand"包生成随机int?

假设我想在0到27之间生成一个安全的随机int,使用:

func Int(rand io.Reader, max *big.Int) (n *big.Int, err error)
Run Code Online (Sandbox Code Playgroud)

"crypto/rand"包中.

我该怎么办?

我真的不明白它是如何工作的,为什么它不会返回内置的Go ints而不是指向某个big.Int类型的指针?

编辑:

这对于令牌来说是否足够安全?

func getToken(length int) string {
    token := ""
    codeAlphabet := "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    codeAlphabet += "abcdefghijklmnopqrstuvwxyz"
    codeAlphabet += "0123456789"

    for i := 0; i < length; i++ {
        token += string(codeAlphabet[cryptoRandSecure(int64(len(codeAlphabet)))])
    }
    return token
}

func cryptoRandSecure(max int64) int64 {
    nBig, err := rand.Int(rand.Reader, big.NewInt(max))
    if err != nil {
        log.Println(err)
    }
    return nBig.Int64()
}

func main() {
    fmt.Println(getToken(32))
}
Run Code Online (Sandbox Code Playgroud)

这将输出如下内容:

qZDbuPwNQGrgVmZCU9A7FUWbp8eIfn0Z

EwZVoQ5D5SEfdhiRsDfH6dU6tAovILCZ

cOqzODVP0GwbiNBwtmqLA78rFgV9d3VT
Run Code Online (Sandbox Code Playgroud)

go

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

为什么我必须在 javascript 正则表达式上添加双反斜杠?

当我使用像 regexpal.com 这样的工具时,它让我按照习惯使用正则表达式。例如,我想检查文本中是否存在至少 3 个字母长且以空格结尾的单词的匹配项,以便匹配'now ''noww '依此类推。

在 regexpal.com 上,这个正则表达式\w{3,}\s可以匹配上面的两个单词。

但在 javascript 上,我必须在 w 和 s 之前添加双反斜杠。像这样:

var regexp = new RegExp('\\w{3,}\\s','i');
Run Code Online (Sandbox Code Playgroud)

否则它不起作用。我四处寻找答案并搜索双反斜杠 javascript 正则表达式,但我得到的只是关于如何转义反斜杠等完全不同的主题。有人对此有解释吗?

javascript regex

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

使用julienschmidt httprouter简化重复性错误处理

Golang.org上有一篇有关如何执行此操作的博客文章:http : //blog.golang.org/error-handling-and-go

他们基本上是一种新类型

type appHandler func(http.ResponseWriter, *http.Request) error
Run Code Online (Sandbox Code Playgroud)

像这样实现http.Handler接口

func (fn appHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    if err := fn(w, r); err != nil {
        http.Error(w, err.Error(), 500)
    }
}
Run Code Online (Sandbox Code Playgroud)

有了这个,您可以在handleFunc上返回错误,这很棒。

但是我正在使用julienschmidt httprouter,它使用的是函数而不是实现http.Handler的接口。我喜欢使用此路由器,因为它支持命名参数。

如何在httprouter.Handler函数周围包装“内容”,以便返回错误并返回其他内容?

有没有办法防止重复的错误处理?我找不到办法。

go

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

使用Go裁剪和创建缩略图

有没有办法让我通过给出尺寸和偏移来裁剪图像?

我正在考虑像这个php函数一样灵活的东西:http: //php.net/manual/en/function.imagecopyresampled.php

我发现了这个:https://github.com/nfnt/resize 但该库似乎没有偏移选项.

我需要能够裁剪原始图像的任何区域.不仅缩小,而且裁剪图像的位置也不同.

有关如何实现这一目标的任何建议?

go

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

从字符串末尾删除空格不起作用

我不明白为什么当输出'now'时输出'now'.

mainQueryString = 'now ';
mainQueryString = mainQueryString.replace('/\s+$/g', ''); /* query without the ending space */
console.log('mainQueryString:', '\''+mainQueryString+'\'');
Run Code Online (Sandbox Code Playgroud)

仍然输出'now'(最后用空格).

javascript regex

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

为什么 sql.Open() 不应该返回 nil 作为错误?

我正在尝试连接到 mysql 数据库。

我试着看看如果我给它错误的连接信息是否会出错,但它仍然nil作为错误返回。即使我完全关闭了 mysql,它仍然不会返回错误。如果这个函数没有返回错误,那么在这个函数之后检查错误有什么意义?

这是在 Windows 上,我使用的是 XAMPP,但我没有数据库的密码。用户名是"root".

import (
    "database/sql"
    "log"

    _ "github.com/go-sql-driver/mysql"
)

func main() {
    db, err := sql.Open("mysql", "root@tcp(127.0.0.1:3306)/dbname?charset=utf8")
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()
}
Run Code Online (Sandbox Code Playgroud)

mysql go

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

sqlx库提供了奇怪的base64编码的外观结果

我正在使用http://jmoiron.github.io/sqlx/中的此库进行查询。遵循文档后,我转到下面的代码。

func cities(w http.ResponseWriter, r *http.Request, _ httprouter.Params) error {
    var main string
    var secondary string
    var limit string
    queryParams := make(map[string]interface{})

    if k := r.PostFormValue("keyword"); k != "" {
        main = "city.name LIKE :keyword"
        queryParams["keyword"] = k + "%"
    }

    if sk := r.PostFormValue("secondaryKeyword"); sk != "" && sk != "null" {
        secondary = "OR city.name = :secondaryKeyword"
        queryParams["secondaryKeyword"] = sk
    }

    if mr := r.PostFormValue("maxResults"); mr != "" {
        limit = "LIMIT :maxResults"
        queryParams["maxResults"] = mr …
Run Code Online (Sandbox Code Playgroud)

go

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

有没有办法在 Go 中从 https://www.. 重定向到 https://..?

我在这里看到了这篇文章,但没有答案:Redirecting https://www.domain.com to https://domain.com in Go

我试图通过检查变量中的*http.Request变量来查看是否可以找到一种方法来检查请求是否是使用 www url 发出的,但我得到的只是相对路径和空字符串""

我尝试了fmt.Println()这些变量:

func handleFunc(w http.ResponseWriter, r *http.Request) {
    fmt.Println(r.URL.string())
    fmt.Println(r.Host)
    fmt.Println(r.RequestURI)
}
Run Code Online (Sandbox Code Playgroud)

但是这些变量都没有包含 www 部分的绝对路径。如何检查请求是否来自 www 网址?我想弄清楚这一点,以便我可以从 www 重定向到非 www。

这在 Go 中真的不可能吗?有人建议把 nginx 放在 Go 前面,但是没有 nginx 总得有个办法吧?我真的需要在 Go 前安装和使用 nginx 来做一个简单的从 www 到非 www 的重定向吗?对于看似很小的问题,这似乎不是一个好的解决方案。

有没有办法实现这一目标?

go

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

标签 统计

go ×6

javascript ×2

regex ×2

mysql ×1