小编Mar*_*arc的帖子

Golang 读取 csv 消耗的内存空间是磁盘空间的 2 倍以上

我正在使用 Golang 将大量 CSV 文件加载到结构中。结构是

type csvData struct {
    Index   []time.Time
    Columns map[string][]float64
}    
Run Code Online (Sandbox Code Playgroud)

我有一个解析器使用:

csv.NewReader(file).ReadAll()
Run Code Online (Sandbox Code Playgroud)

然后我迭代行,并将值转换为其类型:time.Timefloat64

问题是这些文件在磁盘上占用了 5GB 空间。一旦我将它们加载到内存中,它们就会消耗 12GB!

我使用ioutil.ReadFile(path)后发现,正如预期的那样,这几乎与磁盘上的大小完全相同。

这是我的解析器的代码,为了可读性省略了错误,如果您可以帮助我排除故障:

csv.NewReader(file).ReadAll()
Run Code Online (Sandbox Code Playgroud)

我尝试通过在函数调用结束时将columnData和设置为 nil 来进行故障排除,但没有任何变化。reader

csv go

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

Websphere 耳朵展开失败

我正在尝试部署 Ear 文件,但出现错误

“名称为 ace-ear 的组合单元已存在。请选择其他应用程序名称”

哪个不存在。还有什么问题吗?

deployment ear websphere

0
推荐指数
1
解决办法
5582
查看次数

panic() 堆栈跟踪不显示函数参数

在下面的代码中:

package main
    
func main() {
    example(make([]string, 2, 4), "hello", 10)
}
    
func example(slice []string, str string, i int) {
    panic("Want stack trace")
}
Run Code Online (Sandbox Code Playgroud)

6 个字用于存储数据并传递给函数example

  • slice标题3个字
  • 2 个字表示str字符串
  • 一个字表示i整数

预期的堆栈跟踪:

goroutine 1 [running]:
main.example(0xc000042748, 0x2, 0x4, 0x106abae, 0x5, 0xa)
    stack_trace/example1/example1.go:13 +0x39
main.main()
    stack_trace/example1/example1.go:8 +0x72
    
// Declaration
main.example(slice []string, str string, i int)
    
// Call
make([]string, 2, 4), "hello", 10
    
// Values (0xc000042748, 0x2, 0x4, 0x106abae, 0x5, 0xa)
Slice Value:   0xc000042748, 0x2, 0x4 …
Run Code Online (Sandbox Code Playgroud)

go

0
推荐指数
1
解决办法
280
查看次数

有没有办法将地图附加到切片?

我正在用 Golang 制作一种新的编程语言。对于我的词法分析器,我想将我的标记映射附加到我的切片中。例如:

var tokens []map[string]string
tokens = append(tokens, {"type": "number", "value": "123"})
Run Code Online (Sandbox Code Playgroud)

我不断收到此错误:syntax error: unexpected {, expecting expression

go slice

0
推荐指数
1
解决办法
54
查看次数

go map value 和 nil 之间的区别

在 go 中,当 key 不存在时,map 的值是零值。我在下面有一个简短的代码片段: 操场

package main

import (
    "sync"
)

func main() {
    var mm map[int]sync.Mutex
    var m sync.Mutex
    mm[1].Lock() // not work due to cannot call pointer method on mm[1] and cannot take the address of mm[1]
    m.Lock() // work normal
}
Run Code Online (Sandbox Code Playgroud)

mm[1]m上面有什么区别?我用reflect来检查,但看不出它们之间的区别。关于导致差异的任何线索?

go

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

标签 统计

go ×4

csv ×1

deployment ×1

ear ×1

slice ×1

websphere ×1