我一直在努力学习Go,但我一直难以尝试从普通文件读取和写入.
我可以得到inFile, _ := os.Open(INFILE, 0, 0),但实际上获取文件的内容没有意义,因为read函数将a []byte作为参数.
func (file *File) Read(b []byte) (n int, err Error)
Run Code Online (Sandbox Code Playgroud) 是否可以在Visual Studio调试器中查看数组?QuickWatch仅显示数组的第一个元素.
我在Go中看到很多代码来检测nil,如下所示:
if err != nil {
// handle the error
}
Run Code Online (Sandbox Code Playgroud)
但是,我有一个像这样的结构:
type Config struct {
host string
port float64
}
Run Code Online (Sandbox Code Playgroud)
和config是Config的一个实例,当我这样做时:
if config == nil {
}
Run Code Online (Sandbox Code Playgroud)
有编译错误,说:无法将nil转换为类型Config
我正在通过编写一个小型的个人项目来学习Go.虽然它很小,但我决定从一开始就进行严格的单元测试,以便在Go上学习好习惯.
琐碎的单元测试都很好,花花公子,但我现在对依赖感到困惑; 我希望能够用模拟函数替换一些函数调用.这是我的代码片段:
func get_page(url string) string {
get_dl_slot(url)
defer free_dl_slot(url)
resp, err := http.Get(url)
if err != nil { return "" }
defer resp.Body.Close()
contents, err := ioutil.ReadAll(resp.Body)
if err != nil { return "" }
return string(contents)
}
func downloader() {
dl_slots = make(chan bool, DL_SLOT_AMOUNT) // Init the download slot semaphore
content := get_page(BASE_URL)
links_regexp := regexp.MustCompile(LIST_LINK_REGEXP)
matches := links_regexp.FindAllStringSubmatch(content, -1)
for _, match := range matches{
go serie_dl(match[1], match[2])
}
}
Run Code Online (Sandbox Code Playgroud)
我希望能够测试downloader()而不实际通过http获取页面 - 即通过模拟get_page(更容易,因为它只返回页面内容作为字符串)或http.Get().
我找到了这个帖子:https …
我刚刚开始使用Go.我的代码开始有很多这样的:
if err != nil {
//handle err
}
Run Code Online (Sandbox Code Playgroud)
或这个
if err := rows.Scan(&some_column); err != nil {
//handle err
}
Run Code Online (Sandbox Code Playgroud)
在Go中检查和处理错误是否有一些很好的习语/策略/最佳实践?
编辑澄清:我不是在追逐或暗示Go团队想出更好的东西.我问的是我做得对,还是我错过了社区提出的一些技巧.谢谢大家.
我刚开始使用Git和Mercurial一起熟悉Git.
我广泛使用Mercurial中的mq扩展来管理本地补丁,我正在寻找Git等价物.
我应该只使用Git分支吗?或者是否有更好的方法来管理本地补丁,以便轻松应用和删除补丁?
谢谢,
如果它发生混乱(在Go中)我想从函数返回错误:
func getReport(filename string) (rep report, err error) {
rep.data = make(map[string]float64)
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered in f", r)
err, _ = r.(error)
return nil, err
}
}()
panic("Report format not recognized.")
// rest of the getReport function, which can try to out-of-bound-access a slice
...
}
Run Code Online (Sandbox Code Playgroud)
我似乎误解了恐慌和推迟的概念.任何人都可以开导我吗?
来自node.js的观点,其中所有代码都是非阻塞的.
在Go中,使用通道可以轻松实现非阻塞.
如果有人在go中编写node.js类型的服务器,是否有意义使其无阻塞?例如,让数据库connect()函数返回一个通道,而不是在等待连接发生时阻塞.
对我来说,这似乎是正确的方法
但......
如何将Go二进制文件放入Debian包中?由于Go是静态链接的,我只有一个可执行文件 - 我不需要很多复杂的项目元数据信息.是否有一种简单的方法来打包可执行文件和资源文件而不经历创伤debuild?
我一直在寻找现有的问题; 但是,我的所有研究都提出了关于包含golang开发环境的.deb文件的问题/答案(例如,如果你这样做,你会得到什么sudo apt-get install golang-go).
什么网站有一些关于使用Go html/templates的最新资源,特别是在解析html文件和处理列表方面?我遇到了Hoka Poka网站,但似乎已经过时了.