小编icz*_*cza的帖子

Go中令人难以置信的并行任务的惯用解决方案是什么?

我目前正在盯着以下代码的增强版本:

func embarrassing(data []string) []string {
  resultChan := make(chan string)
  var waitGroup sync.WaitGroup
  for _, item := range data {
    waitGroup.Add(1)
    go func(item string) {
      defer waitGroup.Done()
      resultChan <- doWork(item)
    }(item)
  }

  go func() {
    waitGroup.Wait()
    close(resultChan)
  }()

  var results []string
  for result := range resultChan {
    results = append(results, result)
  }
  return results
}
Run Code Online (Sandbox Code Playgroud)

这只是在想我的想法.所有这一切都可以用其他语言表达为

results = parallelMap(data, doWork)
Run Code Online (Sandbox Code Playgroud)

即使在Go中不能轻易做到这一点,是不是还有比上面更好的方法呢?

concurrency channel go goroutine

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

在哪里可以找到golang模块?

我来自node.js生态系统。

Golang终于发布了其模块系统,我已经阅读了一些有关它的文章:

但是,在那之后,我仍然找不到像npmjs.com这样的地方可以找到可用的go模块。

module go go-modules

-2
推荐指数
3
解决办法
188
查看次数

如何在Golang中检测结构指针是否为nil?

如以下代码所示:is n := localplugin.NewPluginNet()的类型,它是由struct指针实现的接口。函数返回指向的nil指针。nlocalnet.Net*localnet.DomainSocketfunc NewPluginNet() localnet.Netn

var n localnet.Net    
n = localplugin.NewPluginNet()
fmt.Println("----> ", n)
if n == nil {
    fmt.Println("n is nil")
}else{
    fmt.Println("n is not nil : ",  n)
}
fmt.Println(reflect.TypeOf(n), reflect.TypeOf(nil), n)
Run Code Online (Sandbox Code Playgroud)

以下是上面代码的输出。

---->  <nil>
n is not nil :  <nil>
*localnet.DomainSocket <nil> <nil>
Run Code Online (Sandbox Code Playgroud)

为什么n不为nil?

==================================

var n1 *localnet.DomainSocket
n1 = nil
fmt.Println(">> ", n1)
if n1 == nil {
    fmt.Println(">>n1 is nil")
}else{
    fmt.Println(">>n1 is not nil : ",  n) …
Run Code Online (Sandbox Code Playgroud)

null pointers compare interface go

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

映射键类型和值类型之间的空间的句法含义

我正在关注的Go的在线示例将以下映射语法用作函数中的参数:

func (contact *Contact) Validate() (map[string] interface{}, bool) {

map [string]和接口之间的空间是什么意思?我找不到其他定义地图并在其中留有空格的示例。

syntax dictionary go

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

是否可以在 Go 中使用 `string()` 将一个字节转换为空字符串?

是否可以在 Go 中将一个字节转换为空字符串?我已经尝试过string(0),但结果是string长度为 1 的:

emptyString := ""
nullByte := 0
fmt.Printf("%T, %v - %T, %v", emptyString, len(emptyString), string(nullByte), len(string(nullByte)))
Run Code Online (Sandbox Code Playgroud)

输出

string, 0 - string, 1
Run Code Online (Sandbox Code Playgroud)

我想这样做的原因是我有一个函数,它接受 abyte并将其转换为 a string,并且我想为这个函数提供空字符串。

string type-conversion go

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

空字符串作为 Go 中的映射键?

在 Go 中将 "" 存储为映射键是好还是坏的做法?这似乎是一种特殊情况,不适合作为钥匙存储。你怎么认为?

string dictionary go

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

无法将结构转换为具有相同基础字段的不同类型

type Req struct {
    apiVersion       string
    path             string
    resourceEndpoint string
    accessKey        string
    log              *logrus.Entry
    incomingReq      interface{}
    httpClient       lib.HTTPClient
    redisClient      redis.Cmdable
    ctx              context.Context
} 

type TestReq struct {
    Req
}
Run Code Online (Sandbox Code Playgroud)

根据this this question及其答案,我觉得我应该能够做到以下几点:

req := &Req{}
req = TestReq(req)
Run Code Online (Sandbox Code Playgroud)

但是我在 VsCode 中收到此错误:

无法将 req(*Req 类型的变量)转换为 TestReq 编译器(InvalidConversion)

这两个结构体是否具有相同的底层字段?如果是这样,为什么第一个不能转换为第二个?

struct embedding type-conversion go

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

当 `User` 是 struct 时,`(*User)(nil)` 是什么?

这编译:

package main

import (
    "fmt"
)

type User struct {
    ID int64
}

func main() {
    v := (*User)(nil)
    fmt.Println(v)
}
Run Code Online (Sandbox Code Playgroud)

在这里,什么是(*User)(nil)?我在go-pg遇到了这个符号,并且没有线索找到答案,因为在谷歌上搜索非常困难。

pointers type-conversion go

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

如何删除 if 块中的否定?

遵循此处推荐的 do..while 模式:

for {
    work()
    if !condition {
        break
    }
}
Run Code Online (Sandbox Code Playgroud)

下面的代码使用 for 循环实现 do..while(condition) :

var r *s
var err error
counter := 0

for { // do..while(specificerror && < MAX && trigger_not_initiated)

    r, err = f()
    counter = counter + 1
    if !(err != nil &&
        strings.Contains(err.Error(), "specificerror") &&
        counter < MAX &&
        !IsTriggerInitiated()) {
        break
    }
}
Run Code Online (Sandbox Code Playgroud)

if但审查小组建议通过删除语句中的否定(条件)中的否定来使 if 条件更具可读性

如何删除否定(条件)forif语句中的否定?

boolean-logic go boolean-algebra

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

Golang运算符&^工作细节

我正在阅读运算符章节中的Golang教程书,上面写着5 &^ 11 = 4,但是这个运算符似乎并不常见,所以我无法立即理解,

我尝试通过列出三个数字的二进制形式来猜测其逻辑:

      5 = 0101
 &^)  11= 1011
 -------------
      4 = 0100
Run Code Online (Sandbox Code Playgroud)

但是我还是不明白,有人可以解释它是如何&^工作的吗?谢谢。

operators go bitwise-operators

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