javascript

java

python

c#

android

node.js

reactjs

c++

php

html

jquery

css

git

.net

ios

ruby-on-rails

sql

c

string

ruby

并发性-共享内存与消息传递如何处理大型数据结构?

在查看Go和Erlang的并发方法时,我注意到它们都依赖于消息传递。

这种方法显然可以减轻对复杂锁的需求,因为没有共享状态。

但是,请考虑许多客户想要并行只读访问内存中单个大数据结构(例如后缀数组)的情况。

我的问题:

  • 与消息传递相比,使用共享状态是否会更快并且使用更少的内存,因为数据是只读的,并且只需要存在于单个位置,锁通常就不再是必需的了?

  • 在消息传递上下文中如何解决此问题? 是否将有一个可以访问数据结构的流程,而客户端仅需要按顺序从中请求数据? 或者,如果可能,将数据分块以创建几个保存块的进程吗?

  • 鉴于现代CPU和内存的体系结构,两种解决方案之间有很大区别-即共享内存是否可以由多个内核并行读取-意味着没有硬件瓶颈会导致这两种实现大致执行相同的工作?

trans by 2019-11-09T01:25:16Z

错误处理-如何在不使用日志的情况下在Go中打印到Stderr

如何不使用os.Stderr.WriteString("Message")向Stderr写消息?

在此SO帖子中的评论显示了如何使用os.Stderr.WriteString("Message")576:log.Println("Message"),但是如果我不想要时间戳怎么办?

以下是好的Go吗?

os.Stderr.WriteString("Message")

trans by 2019-11-08T16:46:38Z

go-从整数转换为二进制表示

有谁知道Go中是否有任何内置功能可以将任何一种数字类型转换成其二进制数字形式。

例如,如果输入123,则字符串"1111011"将作为输出。

trans by 2019-11-08T02:43:24Z

go-按名称访问struct属性

这是一个不起作用的简单go程序:

package main
import "fmt"

type Vertex struct {
    X int
    Y int
}

func main() {
    v := Vertex{1, 2}
    fmt.Println(getProperty(&v, "X"))
}

func getProperty(v *Vertex, property string) (string) {
    return v[property]
}

错误:

prog.go:18:无效的操作:v [property](* Vertex类型的索引)

我要使用名称访问Vertex X属性。 如果我执行v.X,则可以,但是v["X"]无法。

有人可以告诉我如何进行这项工作吗?

trans by 2019-11-08T01:10:34Z

go-在Golang中终止以os / exec开头的进程

有没有办法终止Golang中以os.exec开始的进程? 例如(来自[http://golang.org/pkg/os/exec/#example_Cmd_Start),]

cmd := exec.Command("sleep", "5")
err := cmd.Start()
if err != nil {
    log.Fatal(err)
}
log.Printf("Waiting for command to finish...")
err = cmd.Wait()
log.Printf("Command finished with error: %v", err)

是否可以提前3秒钟终止该过程?

提前致谢

trans by 2019-11-07T04:44:34Z

全面了解

我有一个项目目前正在组织这样的事情:

~/code/go
         /bin
         /pkg
         /src
             /proj/main.go
                  /some_package/package.go
                  /some_other_package/some_other_package.go

现在,如果我想在整个项目中使用go fmt工具,似乎唯一的方法就是对项目源代码树中的每个目录分别进行操作:

go fmt proj
go fmt proj/package
go fmt proj/some_other_package

有没有办法告诉fmt命令在整个源代码树上运行?

trans by 2019-11-05T05:05:27Z

go-从http.Request获取客户端IP地址的正确方法

x-forwarded-for获取所有客户端IP地址的正确方法是什么? 在X-Forwarded-For中,我应该检查很多变量。 Go上也一样吗?

我发现的一个是:

req.RemoteAddr

并且请求区分大小写吗? 例如x-forwarded-for是否与X-Forwarded-ForX-FORWARDED-FOR相同? (来自req.Header.Get("X-FORWARDED-FOR")

trans by 2019-11-04T18:35:24Z

mongodb-服务器在SASL身份验证步骤上返回错误:身份验证失败

以下是我从GoLang获得的MongoDB连接拨号。 但是它返回一个紧急消息“服务器在SASL身份验证步骤上返回错误:身份验证失败。”。 我的用户名,密码,hostAddrs和dbName是正确的。 我在这里想念什么?

dbName: = os.Getenv("ENV_DBNAME")
userName: = os.Getenv("ENV_DBUSER")
password: = os.Getenv("ENV_DBPASS")
dbHost: = os.Getenv("ENV_DBHOST")
mongoDialInfo: = & mgo.DialInfo {
 Addrs: [] string {
  dbHost
 },
 Database: dbName,
 Username: userName,
 Password: password,
 Timeout: 60 * time.Second,
}
sess, err: = mgo.DialWithInfo(mongoDialInfo)
if (err != nil) {
 panic(err)

}
trans by 2019-11-04T00:11:10Z

如何实施Go渠道?

在(简要地)回顾了Go语言规范,有效的Go和Go内存模型之后,我仍然不清楚Go通道在后台如何工作。

它们是什么样的结构? 它们的行为有点像线程安全队列/数组。

它们的实现取决于体系结构吗?

trans by 2019-11-03T15:21:08Z

go-从goroutines捕获返回值

以下代码给出了编译错误,提示“意外运行”:

x := go doSomething(arg)

func doSomething(arg int) int{
    ...
    return my_int_value
}

我知道,如果正常调用函数就可以获取返回值,而无需使用goroutine。 或者我可以使用频道等

我的问题是为什么不能从goroutine中获取像这样的返回值。

trans by 2019-11-02T18:03:59Z

Go方法的默认值

有没有一种方法可以在Go函数中指定默认值? 我正在尝试在文档中找到它,但是找不到任何可以说明这一点的东西。

func SaySomething(i string = "Hello")(string){
...
}
trans by 2019-10-28T13:44:00Z

反射-如何在Go运行时根据结构的类型创建结构的新实例?

在Go中,如何在运行时根据对象的类型创建对象的实例? 我想您还需要先获取对象的实际type吗?

我正在尝试执行惰性实例化以节省内存。

trans by 2019-10-26T14:46:01Z

macos-无法在Mac OSX上设置$ GOPATH

我正在尝试将GOPATH变量设置为在计算机上运行一些示例代码:

$ smitego-example go run main.go 
main.go:5:2: cannot find package "github.com/#GITHUB_USERNAME#/smitego" in any of:
    /usr/local/go/src/pkg/github.com/#GITHUB_USERNAME#/smitego (from $GOROOT)
    ($GOPATH not set)

$ smitego-example export $GOPATH=$HOME
-bash: export: `=/Users/#OSX_USERNAME#': not a valid identifier

enter image description here

GOPATH的内容:

package smitego

如何设置GOPATH,使其始终有效?

trans by 2019-10-24T22:40:06Z

日志记录-为什么我应该使用log.Println而不是fmt.Println?

从log.go(执行日志包):

167 // Println calls l.Output to print to the logger.
168 // Arguments are handled in the manner of fmt.Println.
169 func (l *Logger) Println(v ...interface{}) { l.Output(2, fmt.Sprintln(v...)) }

log.Println只是fmt.Sprintln的函数包装,为什么我要使用它而不是fmt.Sprintlnfmt.Sprintln

有实际原因吗?

trans by 2019-10-23T20:12:46Z

go-如何停止http.ListenAndServe()

我正在使用Gorilla Web Toolkit中的Mux库以及捆绑的Go http服务器。

问题在于,在我的应用程序中,HTTP服务器只是一个组件,需要自行决定停止和启动。

当我致电http.ListenAndServe(fmt.Sprintf(":%d", service.Port()), service.router)时,它阻塞了,而且似乎无法停止服务器运行。

我知道过去这一直是个问题,还是这样吗? 请问有什么新的解决方案吗? 谢谢。

trans by 2019-10-15T22:48:51Z

go-使用net / http设置cookie

我正在尝试使用Go的net / http包设置cookie。 我有:

package main

import "io"
import "net/http"
import "time"

func indexHandler(w http.ResponseWriter, req *http.Request) {
    expire := time.Now().AddDate(0, 0, 1)
    cookie := http.Cookie{"test", "tcookie", "/", "www.domain.com", expire, expire.Format(time.UnixDate), 86400, true, true, "test=tcookie", []string{"test=tcookie"}}
    req.AddCookie(&cookie)
    io.WriteString(w, "Hello world!")
}

func main() {
    http.HandleFunc("/", indexHandler)
    http.ListenAndServe(":80", nil)
}

我尝试将“ Golang”与“ cookies”进行谷歌搜索,但未获得任何良好结果。 如果有人能指出我正确的方向,将不胜感激。

trans by 2019-10-15T15:54:29Z

操作系统-如何在G中可靠地检测OS /平台

这是我当前正在使用的,我认为可以完成工作,但是必须有一种更好的方法:

func isWindows() bool {
    return os.PathSeparator == '\\' && os.PathListSeparator == ';'
}

如您所见,就我而言,我只需要知道如何检测窗口即可,但是我想知道检测任何平台/操作系统的方法。

玩:

[http://play.golang.org/p/r4lYWDJDxL]

trans by 2019-10-15T07:06:29Z

G的编译可执行文件很大的原因

我编译了一个hello world Go程序,该程序在linux机器上生成了本机可执行文件。 但是我很惊讶地看到简单的Hello world Go程序的大小为1.9MB!

为什么Go中如此简单的程序的可执行文件如此庞大?

trans by 2019-10-15T06:51:54Z

数组-为什么Go中不经常使用列表?

我是Go的新手,对此感到很兴奋。 但是,在我广泛使用的所有语言中:Delphi,C#,C ++,Python-列表非常重要,因为列表可以动态调整大小,而不是数组。

在Golang中,确实存在一个list.List结构,但是我很少看到有关它的文档-无论是在Go By Example还是我所拥有的三本Go书籍-Summerfield,Chisnal和Balbaert中,他们都花了大量时间在数组和切片上, 然后跳到地图。 在源代码示例中,我也很少或根本没有使用Range

看来,与Python不同,List不支持Range-缺点很大的IMO。 我想念什么吗?

切片当然不错,但它们仍需要基于具有硬编码大小的数组。 这就是List出现的地方。有没有一种方法可以在Go中创建数组/切片,而没有硬编码的数组大小? 为什么列表被忽略?

trans by 2019-10-14T06:51:33Z

go-显示带有标准http包的自定义404错误页面

假设我们有:

http.HandleFunc("/smth", smthPage)
http.HandleFunc("/", homePage)

尝试输入错误的URL时,用户会看到普通的“找不到404页”。 如何为这种情况返回自定义页面?

有关大猩猩/木糖的更新

对于使用纯net / http软件包的用户,可以接受答案。

如果您使用大猩猩/多路复用器,则应使用以下内容:

func main() {
    r := mux.NewRouter()
    r.NotFoundHandler = http.HandlerFunc(notFound)
}

并根据需要实施func notFound(w http.ResponseWriter, r *http.Request)

trans by 2019-10-13T20:32:21Z

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 下一页 共32页