image - 为什么 ioutil.ReadFile() 在 for 循环中被调用后挂起?
问题描述
我编写了一个将图像转换为 base64 字符串的函数:
func getBase64Screenshot() string {
// Image name
imageName := "Screenshots/screenshot.png"
imageFileBytes, err := ioutil.ReadFile(imageName)
handleError(err)
// Converts file to base64 string
encoded := base64.StdEncoding.EncodeToString(imageFileBytes)
return encoded
}
上面的函数在 a 中调用for loop
,但是在 for 循环的一些迭代之后,程序只是挂在了行上imageFileBytes, err := ioutil.ReadFile(imageName)
(它不会抛出错误,它只是停止运行并停止)。
我进行了一些实验,发现如果我使用较小的图像,它将通过大约 5 次for loop
停止前的迭代,但是如果我截取整个屏幕,它只会通过for loop
停止前的第一次迭代。
我的问题是:是什么导致程序挂起,我能做些什么来防止它挂起?
谢谢!
解决方案
调试你的代码。
试试这个,让我知道这是否也适合你:
这对我来说就像在 Linux 上的魅力:
package main
import (
"encoding/base64"
"fmt"
"io/ioutil"
"log"
"os"
)
func main() {
for i := 0; i < 10; i++ {
fmt.Println(getBase64Screenshot()[:10])
}
}
func getBase64Screenshot() string {
buf, err := ioutil.ReadFile(os.Args[0])
if err != nil {
log.Fatal(err)
}
encoded := base64.StdEncoding.EncodeToString(buf)
return encoded
}
输出:
time go run main.go
f0VMRgIBAQ
f0VMRgIBAQ
f0VMRgIBAQ
f0VMRgIBAQ
f0VMRgIBAQ
f0VMRgIBAQ
f0VMRgIBAQ
f0VMRgIBAQ
f0VMRgIBAQ
f0VMRgIBAQ
real 0m0.340s
user 0m0.369s
sys 0m0.128s
推荐阅读
- postgresql - 在 postgrSQL 中使用主键
- python-3.x - 可视化链接攻击的最佳方法是什么
- javascript - 减少 React-Native 图像资产大小
- javascript - 使用循环 javascript 创建选择选项
- asp.net-mvc - 将部分视图 select2 控件值传递给父视图控制器
- python - ValueError:时间数据“无”与格式“%Y-%m-%dT%H:%M:%S.%f”不匹配
- html - 每次都强制浏览器链接到新的 pdf 副本?
- r - 将相同的行号分配给R中另一列中的重复值
- android - RecyclerView 中的项目确实保留在 android 中
- javascript - 使用 JQuery 从数组上的单选按钮获取单个值