gpt4 book ai didi

web-applications - Golang Web 应用程序中的同步

转载 作者:IT王子 更新时间:2023-10-29 00:35:12 28 4
gpt4 key购买 nike

我正在编写一个 golang 网络应用程序。 Web 应用程序访问文件系统(读取和写入)和一个 sqlite3 数据库文件。

问题 1:如何在 Go 中同步文件系统访问?

type DataObject struct {
data []byte
}

func (*d DataObject) Write() {
//
// Synchronization ?
//
ioutil.WriteFile("file.name", d.data, 0644)
//
// Stop synchronization ?
//
}

问题2:需要同步sqlite3数据库文件访问吗?

type SqlObject struct {
sqldata string
}

func (*s SqlObject) Store() error {
//
// Open the file, do I need some sort of synchronization?
//
con, err := sqlite.Open("database/datafile.db")
if err != nil {
return err
}
defer con.Close()

err = con.Exec("INSERT INTO data(sqldata) values(?)", s.sqldata)
if err != nil {
return err
}
return nil
}

我正在使用 gosqlite3 驱动程序 ( http://code.google.com/p/gosqlite/ )。

最佳答案

对于文件,这取决于您的应用程序。如果只有一个 goroutine 写入文件,则不需要。如果不止一个,则取决于:

如果您在不同进程(程序)之间进行协调,您可以使用 flock (而且它可能不会很有趣)。

如果您在程序中协调多个 goroutine,您可以使用 mutexes或者您可以查看是否可以重新组织程序,以便只有一个例程写入文件,而其他例程通过 channel 发送更新。

对于 SQLite,我认为最简单的方法是保持一个 sqlite 连接打开并从各种 goroutines 中使用它;尽管它确实支持同时打开它的多个进程,并且如果您的系统执行许多并发读取可能会更快(它使用全局锁进行写入)。

关于web-applications - Golang Web 应用程序中的同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14779769/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com