我正在研究一些Go的并发模式.我看着使用goroutine和输入/输出通道实现后台工作程序,并注意到当我将新作业发送到接收通道(基本上将新作业排入队列)时,我必须在goroutine中执行它,否则调度会搞乱.含义:
for _, jobData := range(dataSet) {
input <- jobData
}
Run Code Online (Sandbox Code Playgroud)
go func() {
for _, jobData := range(dataSet) {
input <- jobData
}
}()
Run Code Online (Sandbox Code Playgroud)
对于更具体的东西,我玩了一些无意义的代码(这里是去游乐场):
package main
import (
"log"
"runtime"
)
func doWork(data int) (result int) {
// ... some 'heavy' computation
result = data * data
return
}
// do the processing of the input and return
// results on the output channel
func Worker(input, output chan int) {
for data := range …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个返回泛型类型长度的方法.如果我们有一个字符串,我们调用len(string),或者如果它是一个interface {}类型的数组,我们也会调用len().这很好用,但是,它在你传入指向字符串的指针时不起作用(我假设我对数组和切片也有同样的问题).那么如何检查我是否有指针并取消引用呢?
func (s *Set) Len(i interface{}) int {
if str, ok := i.(string); ok {
return len(str)
}
if array, ok := i.([]interface{}); ok {
return len(array)
}
if m, ok := i.(map[interface{}]interface{}); ok {
return len(m)
}
return 0
}
Run Code Online (Sandbox Code Playgroud) 我有一个目录包含几个要修改的文件。我没有手动进行更改(因为文件太多),而是下载了一个 diff 文件(由其他用户制作),这个 diff 文件由 .bat 文件执行。
让我让它更系统。
WinDDK_7600.16385.1_patch.bat这个文件的路径是( C:\Users\kunze\Documents\Visual Studio 2010\Projects\busmaster-master\Documents\1 Development Environment\files)这个文件的内容是
@echo on
set PATH=%PATH%;%ProgramFiles%\Git\bin
patch -p1 -d C:/ < WinDDK_7600.16385.1.diff
pause
Run Code Online (Sandbox Code Playgroud)
当我运行 bat 文件时,它将运行,WinDDK_7600.16385.1.diff并且此差异文件对 .bat 中的许多文件进行了更改C:\WinDDK。这个文件的路径是C:\Users\kunze\Documents\Visual Studio 2010\Projects\busmaster-master\Documents\1 Development Environment\files
需要更新差异的文件位于此目录中 C:\WinDDK
我已经为 git/bin 设置了路径环境变量
有人可以让我知道我应该在我的WinDDK_7600.16385.1_patch.bat 文件中进行哪些更改, 以便它可以找到并更新位于C:\WinDDK目录中的所有文件
我试了好几次,每次都出现这个错误"Assertion failed: hunk, file ../patch-2.5.9-src/patch.c, line 354"?有什么问题吗?
我想我明白指针是什么,但我不太明白何时使用它.
以下片段来自"A Tour of Go".
"*Vertex"和"&Vertex"的目的是什么?
我用"顶点"替换它们,它运行正常.
package main
import (
"fmt"
"math"
)
type Vertex struct {
X, Y float64
}
func (v *Vertex) Abs() float64 {
return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
func main() {
v := &Vertex{3, 4}
fmt.Println(v.Abs())
}
Run Code Online (Sandbox Code Playgroud) 我已使用Gmail API获取了邮件内容和必要的标头.我想把它们写入mbox文件.我可以找到Go包和样本来读取和解析mbox文件.但是如何使用Go创建和编写mbox文件?
我需要查询我的数据库以了解一小时内发生的事件。因此,我想获取从现在到那时(现在 - 24 小时,或现在 - 1 天)之间的事件。
我尝试过这种方法,但它是不正确的 -
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
// print the time now
fmt.Println(now)
then := time.Now()
diff := 24
diff = diff.Hours()
then = then.Add(-diff)
// print the time before 24 hours
fmt.Println(then)
// print the delta between 'now' and 'then'
fmt.Println(now.Sub(then))
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能使then == 1 全天/24 小时之前?
非常感谢你的帮助!!
最近推送到 git repo 时,继续从终端看到此错误日志。我认为这是因为我更新到 Xcode 9.2 或 macOS High Sierra。
2017-11-29 07:49:30.580 xcodebuild[1558:49212] [MT] DVTPlugInManager:所需的插件兼容性 UUID C3998872.. KSImageNamed.ideplugin (com.ksuther.KSImageNamed) 不存在
知道这意味着什么以及如何解决这个问题吗?
当我对REST API进行HTTP调用时,我可能会将JSON值count作为数字或字符串返回.在任何一种情况下,我都想把它整理成一个整数.我怎么能在Go中处理这个?
是否有一个简单的程序,演示如何在Go中运行队列.我只需要在队列中添加1到10之类的东西,并使用另一个线程并行地从队列中拉出那些.