3 回答
TA贡献1848条经验 获得超10个赞
我正在编写一个调整图像大小的程序。我希望它能够识别不同格式的图像,如JPEG、PNG、GIF并将它们转换为JPEG。
所以除了image和image/jpeg包,我还必须导入image/png并且image/gif只注册它们各自的解码器。
如果我没有导入这些,缩放器将只能读取JPEG图像。
package main
import(
"image"
"image/jpeg" // I wanted to export the images as JPEG
_ "image/png"
_ "image/gif"
)
// ...
image包中的相关文档:
解码任何特定的图像格式需要预先注册解码器功能。作为初始化该格式的包的副作用,注册通常是自动的,因此,要解码 PNG 图像,它就足够了:
import _ "image/png"
TA贡献1851条经验 获得超3个赞
这是因为init 函数
每个源文件都可以定义自己的 niladicinit函数来设置所需的任何状态。(其实每个文件可以有多种init功能。)
finally 的意思是 finally:init在包中的所有变量声明都评估了它们的初始值设定项之后调用,并且只有在所有导入的包都已初始化之后才评估它们。
这就是“ Go 中 import 语句前面的下划线是什么意思”中提到的go-sqlite3 的工作原理。
func init() {
sql.Register("sqlite3", &SQLiteDriver{})
}
你在“理解 Golang Packagese ”中有另一个例子:
在某些情况下,我们可能只需要导入一个包来调用它的init方法,而我们不需要调用包的其他方法。
如果我们导入了一个包并且没有在程序中使用包标识符,Go 编译器将显示错误。
在这种情况下,我们可以使用一个空白标识符 ( _) 作为包别名,这样编译器会忽略不使用包标识符的错误,但仍然会调用该init函数。
- 3 回答
- 0 关注
- 275 浏览
添加回答
举报