如何从地图中删除选定的键?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)
如何从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
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) 从地图中删除选定键的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) 如果通过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) 如何在用gomobile写的原生游戏中隐藏Android状态栏?
我正在尝试使用gomobile工具用纯Go编写的简单原生Android游戏.它应该能够使用全屏来渲染帧.但是,我找不到一个API来隐藏本机应用程序的状态栏.
有人解决了这个问题吗?如果是,请分享指示.
为什么这个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) 我遇到了这个错误“远程错误: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) 我有一个在多个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) 如何检测两个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)