我在Go 1中遇到条件编译问题.
这是我的测试代码.有什么我误解了"// + build"约束和"-tags"标志吗?
main1.go
// +build main1
package main
import (
"fmt"
)
func main() {
fmt.Println("This is main 1")
}
Run Code Online (Sandbox Code Playgroud)
main2.go
// +build main2
package main
import (
"fmt"
)
func main() {
fmt.Println("This is main 2")
}
Run Code Online (Sandbox Code Playgroud)
当运行"go build"时,我仍然遇到编译错误
$ go build -tags 'main1'
# test
./main2.go:8: main redeclared in this block
previous declaration at ./main1.go:8
Run Code Online (Sandbox Code Playgroud) 我写了一个愚蠢的解决方案,任何更好的食谱?正如你可以看到很多无用的转换.
package main
import (
"fmt"
"strconv"
"math"
)
func conv(str string) int {
l := len(str)
result := 0.0
for i,n := range str {
number,_ := strconv.Atof64(string(n))
result += math.Exp2(float64(l-i-1))*number
}
return int(result)
}
func main() {
fmt.Println(conv("1001"))
}
Run Code Online (Sandbox Code Playgroud) 我有一个写入的服务,在运行时需要6-7G内存(RES在顶部).所以我使用pprof工具试图找出问题所在.
go tool pprof --pdf http://<service>/debug/pprof/heap > heap_prof.pdf
Run Code Online (Sandbox Code Playgroud)
但结果中只有大约1-2G的内存(pdf中的'总MB').其余的在哪里?
我尝试用GOGC = off来配置我的服务,因此'Total MB'与顶部的'RES'完全相同.似乎内存是GCed但尚未返回内核将不会被分析.
任何的想法?
PS,我已经在1.0.3和1.1rc3中进行了测试.
首先,所有这些代码都可以使用go工具成功构建(例如go build,go install)
比方说我得到了一个尝试从github导入非标准库pkg的a.go:
package a
import (
"fmt"
"github.com/usr/pkg"
)
func init() {
fmt.Println("Import pkg", pkg.somevar)
}
Run Code Online (Sandbox Code Playgroud)
当我尝试用gccgo编译它时:
$ gccgo -c a.go
a.go:5:20: error: import file ‘github.com/usr/pkg’ not found
...
Run Code Online (Sandbox Code Playgroud)
然后我读了设置和使用gccgo,它说
当您使用gccgo导入包FILE时,它将在以下文件中查找导入数据,并使用它找到的第一个.
FILE.gox FILE.o libFILE.so libFILE.a
gccgo编译器将在当前目录中查找导入文件
所以我将$ GOPATH/pkg/github.com/usr/pkg.a命令到当前目录并将其重命名为libpkg.a.
它似乎再次失败:
$ gccgo -c a.go
a.go:9:4: error: libpkg.a: malformed archive header name at 8
a.go:9:4: error: libpkg.a exists but does not contain any Go export data
Run Code Online (Sandbox Code Playgroud)
是的,我使用gccgo 4.7.2
我没有使用gcc的经验,所以我在这里寻求一些帮助.
我是golang的新手.
这是我的问题:我想得到一个template.Execute的字符串结果,我不想直接执行它到http.ResponsWriter
这是我的代码,它似乎不能很好地工作
package main
import (
"fmt"
"os"
"template"
)
type ByteSlice []byte
func (p *ByteSlice) Write(data []byte) (lenght int, err os.Error) {
*p = data
return len(data), nil
}
func main() {
page := map[string]string{"Title": "Test Text"}
tpl, _ := template.ParseFile("test.html")
var b ByteSlice
tpl.Execute(&b, &page)
fmt.Printf(`"html":%s`, b)
}
Run Code Online (Sandbox Code Playgroud)
和text.html:
<html>
<body>
<h1>{{.Title|html}}</h1>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
但我得到的是
"html":</h1>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)