我目前正在盯着以下代码的增强版本:
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中不能轻易做到这一点,是不是还有比上面更好的方法呢?
我来自node.js生态系统。
Golang终于发布了其模块系统,我已经阅读了一些有关它的文章:
但是,在那之后,我仍然找不到像npmjs.com这样的地方可以找到可用的go模块。
如以下代码所示: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) 我正在关注的Go的在线示例将以下映射语法用作函数中的参数:
func (contact *Contact) Validate() (map[string] interface{}, bool) {
map [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,并且我想为这个函数提供空字符串。
在 Go 中将 "" 存储为映射键是好还是坏的做法?这似乎是一种特殊情况,不适合作为钥匙存储。你怎么认为?
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)
这两个结构体是否具有相同的底层字段?如果是这样,为什么第一个不能转换为第二个?
这编译:
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遇到了这个符号,并且没有线索找到答案,因为在谷歌上搜索非常困难。
遵循此处推荐的 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语句中的否定?
我正在阅读运算符章节中的Golang教程书,上面写着5 &^ 11 = 4,但是这个运算符似乎并不常见,所以我无法立即理解,
我尝试通过列出三个数字的二进制形式来猜测其逻辑:
5 = 0101
&^) 11= 1011
-------------
4 = 0100
Run Code Online (Sandbox Code Playgroud)
但是我还是不明白,有人可以解释它是如何&^工作的吗?谢谢。