Tag:

Go / Golang将日志写入文件

我正在尝试用Golang写入日志文件。 我尝试了几种方法,都失败了。 这是我曾经试过的: func TestLogging(t *testing.T) { if !FileExists("logfile") { CreateFile("logfile") } f, err := os.Open("logfile") if err != nil { t.Fatalf("error: %v", err) } // attempt #1 log.SetOutput(io.MultiWriter(os.Stderr, f)) log.Println("hello, logfile") // attempt #2 log.SetOutput(io.Writer(f)) log.Println("hello, logfile") // attempt #3 log.SetOutput(f) log.Println("hello, logfile") } func FileExists(name string) bool { if _, err := os.Stat(name); […]

在Go中使用分叉包导入

假设您在github.com/someone/repo有一个存储库, github.com/someone/repo其github.com/you/repo到github.com/you/repo 。 你想使用你的叉子,而不是主要的回购,所以你做一个 go get github.com/you/repo 现在,这个repo中的所有导入path都将被“破坏”,也就是说,如果存储库中有多个通过绝对URL相互引用的包,它们将引用源代码,而不是fork。 有没有更好的方法将其手动克隆到正确的path? git clone git@github.com:you/repo.git $GOPATH/src/github.com/someone/repo

去,AppEngine:如何构build模板的应用程序

人们如何在基于Go的AppEngine应用程序中处理模板的使用? 具体而言,我正在寻找一个项目结构,提供以下内容: 模板和部分模板的分层(目录)结构 允许我在我的模板上使用HTML工具/编辑器(在xxx.go文件中embedded模板文本使得这很困难) 在开发服务器上时,自动重新加载模板文本 潜在的绊脚石是: template.ParseGlob()不会recursion地遍历。 出于性能方面的原因,build议不要以原始文本file upload模板(因为这些文本文件驻留在不同的服务器上,而不是执行代码)。 请注意,我不在寻找一个教程/使用模板包的例子。 这更多的是一个应用程序结构的问题。 这就是说,如果你有解决上述问题的代码,我很乐意看到它。 提前致谢。

有没有办法在Go中反向切片?

能够说出如下内容会很方便: for _, element in reverse range mySlice { … }

如何在Go中执行不区分大小写的正则expression式?

现在,当然,我可以编写正则expression式来处理这两种情况,例如regexp.Compile("[a-zA-Z]") ,但是我的正则expression式是由用户给出的string构造的: reg, err := regexp.Compile(strings.Replace(s.Name, " ", "[ \\._-]", -1)) 其中s.Name是名称。 这可能是“北西北”。 现在,对我来说,最明显的解决方法是遍历每个字母的每个字母,并为每个字母写“[nN]”: for i := 0; i < len(s.Name); i++ { if s.Name[i] == " " { fmt.Fprintf(str, "%s[ \\._-]", str); } else { fmt.Fprintf(str, "%s[%s%s]", str, strings.ToLower(s.Name[i]), strings.ToUpper(s.Name[i])) } } 但我觉得这是一个相当不雅的解决scheme。 速度并不是一个问题,但是我需要知道是否有另一种方法。

为什么不能用指针接收器来实现接口

我很困惑,为什么这不能编译: 不可能的types断言:Faz没有实现Foo(Bar方法有指针接收器) 如果我使接收器Faz.Bar Faz值而不是一个Faz指针,然后它编译好,但我认为总是有更好的指针接收器,所以值不被复制? package main import ( "log" ) func main() { foo := New().(Faz) log.Println(foo) } type Foo interface { Bar() string } func New() Foo { return &Faz{} } type Faz struct { } func (f *Faz) Bar() string { return `Bar` }

如何在golang中声明常量映射

我是golang的新手。 我正在努力申明不断的走下去。 但是这是一个错误。 任何人都可以请帮助我的语法去声明一个常量吗? 这是我的代码: const romanNumeralDict map[int]string = { 1000: "M", 900 : "CM", 500 : "D", 400 : "CD", 100 : "C", 90 : "XC", 50 : "L", 40 : "XL", 10 : "X", 9 : "IX", 5 : "V", 4 : "IV", 1 : "I", } 这是错误 # command-line-arguments ./Roman_Numerals.go:9: syntax error: […]

为什么我的golang服务器不处理并发请求?

这个简单的HTTP服务器包含对time.Sleep()的调用,使每个请求花费五秒钟。 当我尝试在浏览器中快速加载多个选项卡时,显然每个请求都是按顺序排队和处理的。 我怎样才能使它处理并发请求? package main import ( "fmt" "net/http" "time" ) func serve(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Hello, world.") time.Sleep(5 * time.Second) } func main() { http.HandleFunc("/", serve) http.ListenAndServe(":1234", nil) } 实际上,在写完这个问题之后,我才find了答案,这很微妙。 无论如何,我都会发布,因为我无法在Google上find答案。 你能看到我做错了吗?

如何解码JSON的types从string转换为在Golang中的float64?

我需要解码一个JSONstring的浮点数如下: {"name":"Galaxy Nexus", "price":"3460.00"} 我使用下面的Golang代码: package main import ( "encoding/json" "fmt" ) type Product struct { Name string Price float64 } func main() { s := `{"name":"Galaxy Nexus", "price":"3460.00"}` var pro Product err := json.Unmarshal([]byte(s), &pro) if err == nil { fmt.Printf("%+v\n", pro) } else { fmt.Println(err) fmt.Printf("%+v\n", pro) } } 当我运行它时,得到结果: json: cannot unmarshal […]

在Golang中解组嵌套的JSON对象

关于这个话题 有 几个 问题 ,但是他们都没有涉及我的案子,因此我正在创build一个新的问题。 我有以下JSON: {"foo":{ "bar": "1", "baz": "2" }, "more": "text"} 有没有一种方法来解组嵌套bar属性,并将其直接分配给一个struct属性而不创build一个嵌套的结构? 我现在采用的解决scheme如下: type Foo struct { More String `json:"more"` Foo struct { Bar string `json:"bar"` Baz string `json:"baz"` } `json:"foo"` // FooBar string `json:"foo.bar"` } 这是一个简化的版本,请忽略冗长。 正如你所看到的,我希望能够parsing和赋值 // FooBar string `json:"foo.bar"` 我见过有人用地图,但那不是我的情况。 我基本上不关心foo (这是一个大对象)的内容,除了一些特定的元素。 在这种情况下,正确的做法是什么? 我不是在寻找怪异的黑客,因此,如果这是要走的路,我很好。