在查看一些golang代码时,我发现了以下内容:
ch := make(chan int)
Run Code Online (Sandbox Code Playgroud)
我在golang Chanels的在线教程中查了解:
https://tour.golang.org/concurrency/2
但我觉得这个例子不清楚.
有人可以给我一个简单的解释和使用频道的例子吗?
我正在尝试用goroutines编写一个简单的工作池.
work_channel?码:
package main
import (
"fmt"
"math/rand"
"sync"
"time"
)
func worker(id string, work string, o chan string, wg *sync.WaitGroup) {
defer wg.Done()
sleepMs := rand.Intn(1000)
fmt.Printf("worker '%s' received: '%s', sleep %dms\n", id, work, sleepMs)
time.Sleep(time.Duration(sleepMs) * time.Millisecond)
o <- work + fmt.Sprintf("-%dms", sleepMs)
}
func main() {
var work_channel = make(chan string)
var results_channel = make(chan string)
// create goroutine per item in work_channel
go func() {
var c = 0
var wg …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用"Go Go Programming Language"来学习Golang,并且我已经达到了关于切片的部分.他们在数组和切片之间进行比较,==因为可以将两个数组与两个切片不能进行比较.该文本如下:
"== operator for arrays of strings, it may be puzzling that slice
comparisons do not also work this way. There are two reasons why deep
equivalence is problematic. First, unlike array elements, the elements
of a slice are indirect, making it possible for a slice to contain
itself. Although there are ways to deal with such cases, none is
simple, efficient, and most importantly, obvious."
Run Code Online (Sandbox Code Playgroud)
由于元素是间接的,因此切片可能包含自身的含义是什么意思?
我有一个简单的java程序,我想知道一些操作之间的时差.对于这个问题,细节并不重要,但让我们采取以下方案.
long beginTime = System.currentTimeMillis();
//Some operations. Let us asssume some database operations etc. which are time consuming.
//
long endTime = System.currentTimeMillis();
long difference = endTime - beginTime;
Run Code Online (Sandbox Code Playgroud)
当代码在机器上运行时,差异有多可靠?
让我们说,处理器开始从我的代码中执行一些指令,然后将上下文提供给另一个进程,该进程执行一段时间,然后返回执行与此java进程相关的指令.
那么,时差应该取决于我的机器的当前状态,即运行了多少个进程等?因此,在运行某些操作所需的分析时间内,这种机制不可靠吗?
我想找到哪个更快:struct vs array.所以我编写了一个GO代码,在其中我将4个int值(1,2,3和4)写入结构的成员,然后写入长度为4的数组.我试图找到写入所需的时间.
案例1:首先,我将值写入结构,然后写入数组.在这里,我发现数组比结构更快.
package main
import (
"fmt"
"time"
)
type abc struct {
a, b, c, d int
}
func main() {
var obj abc
t1 := time.Now()
obj.a = 1
obj.b = 2
obj.c = 3
obj.d = 4
t2 := time.Since(t1)
fmt.Println("Struct access time: : ", t2)
a := make([]int, 4)
t3 := time.Now()
a[0] = 1
a[1] = 2
a[2] = 3
a[3] = 4
t4 := time.Since(t3)
fmt.Println("Array access time: : ", t4)
} …Run Code Online (Sandbox Code Playgroud) go ×4
slice ×2
arrays ×1
benchmarking ×1
channel ×1
comparison ×1
concurrency ×1
goroutine ×1
java ×1
performance ×1
struct ×1
time ×1