我试过了:
const ascii = "abcdefghijklmnopqrstuvwxyz"
const letter_goodness []float32 = { .0817,.0149,.0278,.0425,.1270,.0223,.0202, .0609,.0697,.0015,.0077,.0402,.0241,.0675, .0751,.0193,.0009,.0599,.0633,.0906,.0276, .0098,.0236,.0015,.0197,.0007 }
const letter_goodness = { .0817,.0149,.0278,.0425,.1270,.0223,.0202, .0609,.0697,.0015,.0077,.0402,.0241,.0675, .0751,.0193,.0009,.0599,.0633,.0906,.0276, .0098,.0236,.0015,.0197,.0007 }
const letter_goodness = []float32 { .0817,.0149,.0278,.0425,.1270,.0223,.0202, .0609,.0697,.0015,.0077,.0402,.0241,.0675, .0751,.0193,.0009,.0599,.0633,.0906,.0276, .0098,.0236,.0015,.0197,.0007 }
Run Code Online (Sandbox Code Playgroud)
首先,声明和初始化工作正常,但第二,第三和第四不起作用.如何声明和初始化const数组的浮点数?
我想生成一个随机字符串,必须有来自az和3个数字的5个字母.
我怎么能用javascript做到这一点?
我有以下脚本,但它不符合我的要求.
var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
var string_length = 8;
var randomstring = '';
for (var i=0; i<string_length; i++) {
var rnum = Math.floor(Math.random() * chars.length);
randomstring += chars.substring(rnum,rnum+1);
}
Run Code Online (Sandbox Code Playgroud) 我现在正在学习go。
我举个例子,我有这条线
rand.Seed(SEED)
Run Code Online (Sandbox Code Playgroud)
但是关于 go 的 vscode 扩展告诉我
rand.Seed 自 Go 1.20 起已被弃用,自 Go 1.0 起出现了替代方案:调用 Seed 并期望从全局随机源(使用 Int 等函数)获得特定结果序列的程序在依赖项更改时可能会被破坏它从全局随机源消耗了多少。为了避免此类损坏,需要特定结果序列的程序应使用 NewRand(NewSource(seed)) 来获取其他包无法访问的随机生成器。(SA1019)
NewRand(NewSource(seed))我无法理解如何按照建议使用。
我找到了关于 NewSource 的文档https://pkg.go.dev/math/rand#NewSource
但没有关于NewRand函数的文档
新推荐的等效项是什么rand.Seed(SEED)?
情况:
我有一些值,需要从中随机选择一个值.然后我想用固定的字符串连接它.到目前为止这是我的代码:
func main() {
//create the reasons slice and append reasons to it
reasons := make([]string, 0)
reasons = append(reasons,
"Locked out",
"Pipes broke",
"Food poisoning",
"Not feeling well")
message := fmt.Sprint("Gonna work from home...", pick a random reason )
}
Run Code Online (Sandbox Code Playgroud)
题:
是否有内置功能,可以通过" 选择随机原因 "部分帮助我?
我需要生成许多固定长度的随机十六进制字符串。我找到此解决方案如何在golang中生成固定长度的随机字符串?
我正在做这样的事情:
const letterBytes = "abcdef0123456789"
const (
letterIdxBits = 6 // 6 bits to represent a letter index
letterIdxMask = 1<<letterIdxBits - 1 // All 1-bits, as many as letterIdxBits
letterIdxMax = 63 / letterIdxBits // # of letter indices fitting in 63 bits
)
var src = rand.NewSource(time.Now().UnixNano())
// RandStringBytesMaskImprSrc ...
// Src: /sf/answers/2228262851/
func RandStringBytesMaskImprSrc(n int) string {
b := make([]byte, n)
// A src.Int63() generates 63 random bits, enough for letterIdxMax characters!
for i, cache, …Run Code Online (Sandbox Code Playgroud) 对于RESTful后端API,我想生成用于验证用户身份的唯一 URL令牌.
注册时提供的用于生成令牌的唯一数据是电子邮件地址.但是在生成令牌并将其发送给用户之后,我不需要解密收到的令牌以获取电子邮件或其他信息.因此加密可以是单向的.
最初我用bcrypt这样做:
func GenerateToken(email string) string {
hash, err := bcrypt.GenerateFromPassword([]byte(email), bcrypt.DefaultCost)
if err != nil {
log.Fatal(err)
}
fmt.Println("Hash to store:", string(hash))
return string(hash)
}
Run Code Online (Sandbox Code Playgroud)
但由于令牌作为url参数(如/api/path/to/{token}),我不能使用bcrypt,因为它生成包含/这样的标记:
"$2a$10$NebCQ8BD7xOa82nkzRGA9OEh./zhBOPcuV98vpOKBKK6ZTFuHtqlK"
这将打破路由.
所以我想知道在Golang中根据电子邮件生成一些独特的16-32个字符的字母数字标记的最佳方法是什么?
我正在尝试实现一种结构(CryptoService),以便从主程序流中隐藏加密/解密。我已经实现了“正常”功能和base64变体,应该将密码编码为与base64等效的密码,反之亦然。这样做是因为我们的内部网络协议使用换行符\n作为分隔符。
参见下面的实现代码
在编写下面的代码后,我开始对其进行测试。最初,它运行良好,并且加密和解密都能正常工作,但是很快我开始注意到解密过程中出现的“随机发生”错误:cipher: message authentication failed。现在重要的事实:该错误只从返回DecryptBase64FUNC。但是go中的base64用法非常简单,不必担心太多,因此我不知道问题出在哪里。
在下面,您会看到我的CryptoService实现代码和相关的测试文件。我试图在不删除上下文的情况下尽可能地清理代码(删除注释,其他输入检查等)。尽管如此,它的代码很多,因此感谢所有阅读它的人-非常感谢您的帮助!
cryptoservice.go
type CryptoService struct {
gcm cipher.AEAD
}
func NewCryptoService(key []byte) (cs *CryptoService, err error) {
block, err := aes.NewCipher(key)
if err != nil {
return nil, err
}
gcm, err := cipher.NewGCM(block)
if err != nil {
return nil, err
}
return &CryptoService{
gcm: gcm,
}, nil
}
func (cs CryptoService) Encrypt(plain []byte) (cipher []byte, err error) …Run Code Online (Sandbox Code Playgroud) 我使用了一个地图,它使用句子中的单词作为键,整数作为值.
func WordCount(s string) map[string]int {
var m map[string]int
m = make(map[string]int)
var substrings[]string
count := 0
substrings = strings.Split(s, " ")
for i := range substrings {
count = count + 1
m[substrings[i]] = count
}
return m
}
func main() {
fmt.Println(WordCount("I am learning GO since some days"))
}
Run Code Online (Sandbox Code Playgroud)
以上代码始终以正确的顺序显示地图,即
map[I:1 am:2 learning:3 GO:4 since:5 some:6 days:7]
Run Code Online (Sandbox Code Playgroud)
但如果我改变
count = count + 1
Run Code Online (Sandbox Code Playgroud)
至
count++
Run Code Online (Sandbox Code Playgroud)
输出更改为:
map[learning:3 GO:4 since:5 some:6 days:7 I:1 am:2]
Run Code Online (Sandbox Code Playgroud)
我知道地图迭代在Golang中是随机的,但为什么count = …
生成用于电话验证的6位数代码,以下是我使用的一种非常简单的方法
package main
import (
"fmt"
"math/rand"
"time"
)
var randowCodes = [...]byte{
'1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
}
func main() {
var r *rand.Rand = rand.New(rand.NewSource(time.Now().UnixNano()))
for i := 0; i < 3; i++ {
var pwd []byte = make([]byte, 6)
for j := 0; j < 6; j++ {
index := r.Int() % len(randowCodes)
pwd[j] = randowCodes[index]
}
fmt.Printf("%s\n", string(pwd))
}
}
Run Code Online (Sandbox Code Playgroud)
你有更好的方法吗?
我想在一个长度范围内生成唯一的随机字符串.例如,我设置的长度为10.并且每次生成的字符串都是唯一的.
go ×9
random ×3
algorithm ×1
arrays ×1
base64 ×1
const ×1
cryptography ×1
dictionary ×1
hashmap ×1
hex ×1
javascript ×1
performance ×1
slice ×1
string ×1
token ×1