小编Eve*_*ton的帖子

在范围循环中从地图中删除选定的键是否安全?

如何从地图中删除选定的键?delete()与范围结合是否安全,如下面的代码?

package main

import "fmt"

type Info struct {
    value string
}

func main() {
    table := make(map[string]*Info)

    for i := 0; i < 10; i++ {
        str := fmt.Sprintf("%v", i)
        table[str] = &Info{str}
    }

    for key, value := range table {
        fmt.Printf("deleting %v=>%v\n", key, value.value)
        delete(table, key)
    }
}
Run Code Online (Sandbox Code Playgroud)

https://play.golang.org/p/u1vufvEjSw

dictionary for-loop go

115
推荐指数
4
解决办法
3万
查看次数

如何从本地接口获取所有地址和掩码?

如何从golang的本地接口获取所有地址和掩码?

我需要配置实际的网络掩码以及每个IP地址.

此代码不显示Windows 7中的网络掩码:

package main

import (
    "fmt"
    "log"
    "net"
)

func localAddresses() {
    ifaces, err := net.Interfaces()
    if err != nil {
        log.Print(fmt.Errorf("localAddresses: %v\n", err.Error()))
        return
    }
    for _, i := range ifaces {
        addrs, err := i.Addrs()
        if err != nil {
            log.Print(fmt.Errorf("localAddresses: %v\n", err.Error()))
            continue
        }
        for _, a := range addrs {
            log.Printf("%v %v\n", i.Name, a)
        }
    }
}

func main() {
    localAddresses()
}
Run Code Online (Sandbox Code Playgroud)

更新:此问题已在Go中修复:https://github.com/golang/go/issues/5395

ip networking ip-address go

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

Go为什么要写封闭频道?

Go为什么要写封闭频道?

虽然可以使用这个value, ok := <-channel成语从频道中读取,因此可以测试ok结果是否可以打开一个封闭的频道:

// reading from closed channel

package main

import "fmt"

func main() {
    ch := make(chan int, 1)
    ch <- 2
    close(ch)

    read(ch)
    read(ch)
    read(ch)
}

func read(ch <-chan int) {
    i,ok := <- ch   
    if !ok {
        fmt.Printf("channel is closed\n")
        return
    }
    fmt.Printf("read %d from channel\n", i)
}
Run Code Online (Sandbox Code Playgroud)

输出:

read 2 from channel
channel is closed
channel is closed
Run Code Online (Sandbox Code Playgroud)

Playground上运行"从封闭频道阅读"

写入可能关闭的频道更复杂,因为如果您只是在频道关闭时尝试写,Go会感到恐慌:

//writing to closed channel

package main

import (
    "fmt"
) …
Run Code Online (Sandbox Code Playgroud)

concurrency channel go panic goroutine

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

从Dart Map中删除选定的键

从地图中删除选定键的Dart惯用方法是什么?下面我使用临时emptyList来保存String键.有更干净的方式吗?

List<String> emptyList = new List<String>();
_objTable.keys.forEach((String name) { 
  if (_objTable[name].indices.isEmpty) {
    emptyList.add(name);
    print("OBJ: deleting empty object=$name loaded from url=$url");
  } 
});
emptyList.forEach((String name) => _objTable.remove(name));
Run Code Online (Sandbox Code Playgroud)

map dart

9
推荐指数
2
解决办法
2561
查看次数

如果通过Golang通道发送,是否在goroutines之间实际复制了一个结构?

如果通过Go中的通道发送大型结构,它是否真的在goroutines之间复制?

例如,在下面的代码中,Go实际上会复制goroutines生产者和消费者之间的所有largeStruct数据吗?

package main

import (
    "fmt"
    "sync"
)

type largeStruct struct {
    buf [10000]int
}

func main() {
    ch := make(chan largeStruct)
    wg := &sync.WaitGroup{}
    wg.Add(2)
    go consumer(wg, ch)
    go producer(wg, ch)
    wg.Wait()
}

func producer(wg *sync.WaitGroup, output chan<- largeStruct) {
    defer wg.Done()
    for i := 0; i < 5; i++ {
        fmt.Printf("producer: %d\n", i)
        output <- largeStruct{}
    }
    close(output)
}

func consumer(wg *sync.WaitGroup, input <-chan largeStruct) {
    defer wg.Done()
    i := 0
LOOP:
    for {
        select {
        case …
Run Code Online (Sandbox Code Playgroud)

channel go goroutine

9
推荐指数
2
解决办法
3970
查看次数

如何在用gomobile编写的原生游戏中隐藏Android状态栏

如何在用gomobile写的原生游戏中隐藏Android状态栏?

我正在尝试使用gomobile工具用纯Go编写的简单原生Android游戏.它应该能够使用全屏来渲染帧.但是,我找不到一个API来隐藏本机应用程序的状态栏.

有人解决了这个问题吗?如果是,请分享指示.

mobile android opengl-es go gomobile

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

为什么这个Golang代码不能在多个时间内进行选择.通道工作后?

为什么这个Golang代码不能在多个时间内进行选择.通道工作后?

见下面的代码.永远不会发出"超时"消息.为什么?

package main

import (
    "fmt"
    "time"
)

func main() {
    count := 0
    for {
        select {
        case <-time.After(1 * time.Second):
            count++
            fmt.Printf("tick %d\n", count)
            if count >= 5 {
                fmt.Printf("ugh\n")
                return
            }
        case <-time.After(3 * time.Second):
            fmt.Printf("timeout\n")
            return
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在Playground上运行:http://play.golang.org/p/1gku-CWVAh

输出:

tick 1
tick 2
tick 3
tick 4
tick 5
ugh
Run Code Online (Sandbox Code Playgroud)

time timeout channel go

8
推荐指数
2
解决办法
1640
查看次数

Go https 客户端问题 - 远程错误:tls:握手失败

我遇到了这个错误“远程错误:tls:握手失败”:

~/go/bin/aci-tls 10.0.0.201 user pass
2016/12/20 18:12:04 post error: Post https://10.0.0.201/api/aaaLogin.json: remote error: tls: handshake failure
Run Code Online (Sandbox Code Playgroud)

代码是基本的HTTPS客户端:https : //play.golang.org/p/cqPT0oR__q

OpenSSL 对这个 https 服务器很满意:

$ openssl s_client -connect 10.0.0.201:443

(snip)
SSL handshake has read 1383 bytes and written 431 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-GCM-SHA384
(snip)
Run Code Online (Sandbox Code Playgroud)

测试:

$ go version
go version go1.7.4 linux/386

C:\>go …
Run Code Online (Sandbox Code Playgroud)

ssl https go tls1.2

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

在多个goroutine之间共享的Golang struct中,非共享成员是否需要互斥保护?

我有一个在多个goroutine之间共享的Golang结构.对于结构成员的并发访问,有互斥锁sync.RWMutex.对于由单个goroutine访问的struct成员,是否需要互斥保护?

例如,在下面的代码中,一个单独的writer goroutine访问成员shared.exclusiveCounter,没有任何锁定保护.这是正确/安全吗?或者是否需要互斥锁,因为整个结构由多个goroutines通过共享指针访问?

package main

import (
    "fmt"
    "sync"
    "time"
)

func main() {
    s := &shared{mutex: &sync.RWMutex{}}

    readerDone := make(chan int)
    writerDone := make(chan int)

    go reader(s, readerDone)
    go writer(s, writerDone)

    <-readerDone
    <-writerDone
}

type shared struct {
    mutex            *sync.RWMutex
    sharedCounter    int // member shared between multiple goroutines, protected by mutex
    exclusiveCounter int // member exclusive of one goroutine -- is mutex needed?
}

func (s *shared) readCounter() int {
    defer s.mutex.RUnlock()
    s.mutex.RLock()
    return s.sharedCounter
}

func (s *shared) …
Run Code Online (Sandbox Code Playgroud)

concurrency synchronization mutex go goroutine

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

如何检测两个Golang net.IPNet对象是否相交?

如何检测两个Golang net.IPNet对象之间是否存在交集?

也就是说,如何检查双方如果第一个网络是第二个子网如果第二网络是第一个子网.

Go是否为此特定任务提供了任何实用功能?

请参阅下面的测试代码

package main

import (
    "fmt"
    "net"
)

func main() {
    _, net1, _ := net.ParseCIDR("1.1.1.1/24")
    _, net2, _ := net.ParseCIDR("1.1.0.2/16")
    _, net3, _ := net.ParseCIDR("1.1.1.3/25")
    _, net4, _ := net.ParseCIDR("1.2.0.4/16")

    test(net1, net2, true)
    test(net2, net1, true)
    test(net1, net3, true)
    test(net3, net1, true)
    test(net1, net4, false)
    test(net4, net1, false)
}

func test(n1, n2 *net.IPNet, expect bool) {
    result := intersect(n1, n2)
    var label string
    if result == expect {
        label = …
Run Code Online (Sandbox Code Playgroud)

ip networking ip-address go cidr

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