小编Tia*_*hen的帖子

Golang条件编译

我在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)

go

45
推荐指数
5
解决办法
2万
查看次数

Go - 将表示二进制数的字符串转换为int

我写了一个愚蠢的解决方案,任何更好的食谱?正如你可以看到很多无用的转换.

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)

go

12
推荐指数
2
解决办法
1万
查看次数

为什么golang堆配置文件中的"Total MB"小于顶部的"RES"?

我有一个写入的服务,在运行时需要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 pprof

6
推荐指数
1
解决办法
1383
查看次数

如何导入非标准库包使用gccgo

首先,所有这些代码都可以使用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的经验,所以我在这里寻求一些帮助.

go gccgo

3
推荐指数
1
解决办法
3087
查看次数

如何获得模板渲染的结果

我是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)

templates go

2
推荐指数
1
解决办法
188
查看次数

标签 统计

go ×5

gccgo ×1

pprof ×1

templates ×1