小编icz*_*cza的帖子

filepath.Join删除点

我对rsync的创建路径有问题。

x := filepath.Join("home", "my_name", "need_folder", ".")
fmt.Println(x)
Run Code Online (Sandbox Code Playgroud)

我得到了"home/my_name/need_folder",但是需要"home/my_name/need_folder/.",没有concat怎么解决?在名称为“。”的linux文件夹中。不是不可能。

谢谢!

go filepath

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

具有固定大小的Golang并发访问映射/数组

我正在探索使用固定密钥同时访问地图的可能性,而没有锁定以提高性能.我以前用切片探索过类似的东西,似乎有效:

func TestConcurrentSlice(t *testing.T) {
    fixed := []int{1, 2, 3}
    wg := &sync.WaitGroup{}
    for i := 0; i < len(fixed); i++ {
        idx := i
        wg.Add(1)
        go func() {
            defer wg.Done()
            fixed[idx]++
        }()
    }
    wg.Wait()
    fmt.Printf("%v\n", fixed)
}
Run Code Online (Sandbox Code Playgroud)

上面的代码将通过-race测试.

这让我有信心用固定大小的地图(固定数量的键)实现同样的事情,因为我假设如果键的数量没有改变,那么下划线数组(在地图中)不需要扩展,所以它我们可以安全地访问不同的例行程序中的不同密钥(不同的内存位置).所以我写了这个测试:

type simpleStruct struct {
    val int
}

func TestConcurrentAccessMap(t *testing.T) {
    fixed := map[string]*simpleStruct{
        "a": {0},
        "b": {0},
    }
    wg := &sync.WaitGroup{}
    // here I use array instead of iterating the map to avoid read access
    keys := []string{"a", "b"} …
Run Code Online (Sandbox Code Playgroud)

concurrency synchronization dictionary go slice

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

golang中的100阶乘

我想在 golang 中计算 100 阶乘。这是我正在使用的代码。

var fact big.Int
fact.MulRange(1, 100)
Run Code Online (Sandbox Code Playgroud)

打印输出给出

30414093201713378043612608166064768844377641568960512000000000000

但是谷歌搜索100!给出9.332622e+157。我想这可能是因为我使用的数据类型(或者可能不是)。我该如何解决?提前致谢。

编辑:所以我在 go playground 中运行了这段代码,它给出了正确的答案。这是由于我的 PC 上的限制吗?另外,当我将其转换为字符串并对其进行迭代时,它会显示不同的数字

str := fact.String()
for _,val := range str{
    fmt.Print(val)
}
Run Code Online (Sandbox Code Playgroud)

这是所有的代码

package main

import (
    "fmt"
    "math/big"
)

func main() {
    var fact big.Int
    fact.MulRange(1, 100)
    fmt.Println(fact)
    n := fact.String()
    fmt.Println(n) //printing 100!
    sum := 0
    for _, i := range n {
        sum += int(i) //sum of each digits in 100!
    }
    fmt.Println(sum)
}
Run Code Online (Sandbox Code Playgroud)

这是 go env …

string math go bigint

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

在 Go 中使用页码和限制进行分页的好做法是什么?

我使用页码和限制在 Go 中创建了分页。在哪里Limit & Page Number are INT

我创建了如下分页:

MONGO_SESSION.Find(nil).Skip(pageNumber*limit).Limit(limit).Sort("_id").All(&RETURN_STRUCT)
Run Code Online (Sandbox Code Playgroud)

它工作正常。但是当我发送页码或限制为零时。默认情况下 mongo DB 返回所有记录,因为没有什么可以跳过和限制的。

所以我的问题是,在零限制和零页码的情况下什么是好的做法。

练习 1:发送所有数据。不要发送错误响应。

实践二:发送错误响应说“页数和限制不能为零”

注意:我不能硬编码限制或页码。

任何建议将不胜感激。

go mongodb mgo

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

在Go中间隔地同时运行多个函数

我有一个功能列表和它们各自的间隔.我想同时以其间隔运行每个函数.

在JavaScript中,我写了类似的东西:

maps.forEach(({fn, interval}) => {
    setInterval(fn, interval)
})
Run Code Online (Sandbox Code Playgroud)

如何在Golang中实现此功能?

timer scheduler go

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

sort.Slice 排序不正确

abc := []byte{'a', 'c', 'b'}  
sort.Slice(abc[1:], func(i, j int) bool {
  return abc[i] < abc[j]
})
fmt.Println(string(abc)) //print acb
Run Code Online (Sandbox Code Playgroud)

上面的代码没有abc正确排序。为什么?

sorting go slice

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

如何暂停和恢复 goroutine?

我正在尝试暂停和恢复 groutine。我知道我可以sleep跑步,但我正在寻找就像一个按钮“暂停/恢复”而不是一个计时器。

这是我的尝试。我正在使用通道的阻塞功能来暂停,并select根据通道值切换要执行的内容。但是,输出总是Running在我的情况下。

func main() {
    ctx := wctx{}
    go func(ctx wctx) {
        for {
            time.Sleep(1 * time.Second)
            select {
            case <-ctx.pause:
                fmt.Print("Paused")
                <-ctx.pause
            case <-ctx.resume:
                fmt.Print("Resumed")
            default:
                fmt.Print("Running \n")
            }
        }
    }(ctx)

    ctx.pause <- struct{}{}
    ctx.resume <- struct{}{}
}

type wctx struct {
    pause  chan struct{}
    resume chan struct{}
}
Run Code Online (Sandbox Code Playgroud)

concurrency channel go goroutine

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

Golang,下面是做什么的[]

我是 golang 的新手,有一个基本问题。我从网上的一个例子中提取了以下代码

func (d Direction) String() string {
    return [...]string{"North", "East", "South", "West"}[d]
}
Run Code Online (Sandbox Code Playgroud)

我很困惑[d]方法体中的作用是什么?

arrays go composite-literals

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

go vet - 我由 func 文字捕获的循环变量

在下面的代码中:

package main

import "fmt"

func main() {
    for i := 0; i <= 9; i++ {
        go func() {
            fmt.Println(i)
        }()
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

code$ 
code$ go install github.com/myhub/cs61a
code$ bin/cs61a 
code$ 
Run Code Online (Sandbox Code Playgroud)

以上程序不提供任何输出。

1)他们是否i在 10 个 go-routines 之间进行单一内存位置的数据竞争?

2)为什么上面的代码不打印自由变量的值i

concurrency loops go goroutine

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

如何使用加密/rc4

我正在尝试使用 RC4 在 Go 中加密/解密一些数据。我发现 Go 在 crypto/rc4 包中提供了 rc4 算法。我尝试使用该包加密/解密数据,但密文和解密的明文不是我所期望的。

我RC4在线工具像比较这个,但我敢肯定,Go的RC4包有一些问题。因为在我用 Go rc4 加密明文并解密密文后,解密的明文'不是我加密的。我应该找其他图书馆吗?

我运行的代码是这样的。

package main

import (
    "crypto/rc4"
    "fmt"
    "log"
)

func main() {
    c, err := rc4.NewCipher([]byte("dsadsad"))
    if err != nil {
        log.Fatalln(err)
    }
    src := []byte("asdsad")
    dst := make([]byte, len(src))
    fmt.Println("Plaintext: ", src)
    c.XORKeyStream(dst, src)
    c.XORKeyStream(src, dst)
    fmt.Println("Ciphertext: ", dst)
    fmt.Println("Plaintext': ", src)
}
Run Code Online (Sandbox Code Playgroud)

输出是这样的

Plaintext:  [97 115 100 115 97 100]
Ciphertext:  [98 41 227 117 93 79]
Plaintext':  [111 154 128 …
Run Code Online (Sandbox Code Playgroud)

encryption go rc4-cipher

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