Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Web services 申请者简单列表webapp_Web Services_Web_Go_Architecture - Fatal编程技术网

Web services 申请者简单列表webapp

Web services 申请者简单列表webapp,web-services,web,go,architecture,Web Services,Web,Go,Architecture,我正在创建一个web应用程序,其中列出了申请人及其在等待名单上的位置 我们需要能够在此列表中添加新的申请人,并从列表中删除申请人。名单上的申请者不到1万人 细节: package main import ( "log" "sync" "time" "github.com/boltdb/bolt" ) type applicant struct { FirstName string LastName string StudentID

我正在创建一个web应用程序,其中列出了申请人及其在等待名单上的位置

我们需要能够在此列表中添加新的申请人,并从列表中删除申请人。名单上的申请者不到1万人

细节:

package main

import (
    "log"
    "sync"
    "time"

    "github.com/boltdb/bolt"
)

type applicant struct {
    FirstName string
    LastName  string
    StudentID string
    Position  int
}

type priorityList struct {
    sync.Mutex
    applicants []applicant
}

func (l *priorityList) newApplicant(fn string, ln string, sid string) error {

    // add applicant to priorityList
    return nil
}

func (l *priorityList) removeApplicant(sid string) error {
    // remove applicant from priorityList
    return nil
}

func (l *priorityList) editApplicant(sid string) error {
    // edit applicant in priorityList
    return nil
}

func main() {
    // Database
    db, err := bolt.Open("priorityList.db", 0600, &bolt.Options{Timeout: 1 * time.Second})
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()
}
  • 我计划在Golang编写应用程序

  • 列表需要是安全的,如果程序关闭,它应该是可恢复的

  • 该应用程序应包含每个申请人的以下数据:姓名、学生ID、职位

问题:

package main

import (
    "log"
    "sync"
    "time"

    "github.com/boltdb/bolt"
)

type applicant struct {
    FirstName string
    LastName  string
    StudentID string
    Position  int
}

type priorityList struct {
    sync.Mutex
    applicants []applicant
}

func (l *priorityList) newApplicant(fn string, ln string, sid string) error {

    // add applicant to priorityList
    return nil
}

func (l *priorityList) removeApplicant(sid string) error {
    // remove applicant from priorityList
    return nil
}

func (l *priorityList) editApplicant(sid string) error {
    // edit applicant in priorityList
    return nil
}

func main() {
    // Database
    db, err := bolt.Open("priorityList.db", 0600, &bolt.Options{Timeout: 1 * time.Second})
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()
}
  • 如果同时对列表进行了两次更新,如何保护列表(锁定?)以使其正确更新
  • 我应该将数据保存在数据库中还是使用文件
  • 我需要你的帮助

    更新:

    package main
    
    import (
        "log"
        "sync"
        "time"
    
        "github.com/boltdb/bolt"
    )
    
    type applicant struct {
        FirstName string
        LastName  string
        StudentID string
        Position  int
    }
    
    type priorityList struct {
        sync.Mutex
        applicants []applicant
    }
    
    func (l *priorityList) newApplicant(fn string, ln string, sid string) error {
    
        // add applicant to priorityList
        return nil
    }
    
    func (l *priorityList) removeApplicant(sid string) error {
        // remove applicant from priorityList
        return nil
    }
    
    func (l *priorityList) editApplicant(sid string) error {
        // edit applicant in priorityList
        return nil
    }
    
    func main() {
        // Database
        db, err := bolt.Open("priorityList.db", 0600, &bolt.Options{Timeout: 1 * time.Second})
        if err != nil {
            log.Fatal(err)
        }
        defer db.Close()
    }
    
    模型代码:

    package main
    
    import (
        "log"
        "sync"
        "time"
    
        "github.com/boltdb/bolt"
    )
    
    type applicant struct {
        FirstName string
        LastName  string
        StudentID string
        Position  int
    }
    
    type priorityList struct {
        sync.Mutex
        applicants []applicant
    }
    
    func (l *priorityList) newApplicant(fn string, ln string, sid string) error {
    
        // add applicant to priorityList
        return nil
    }
    
    func (l *priorityList) removeApplicant(sid string) error {
        // remove applicant from priorityList
        return nil
    }
    
    func (l *priorityList) editApplicant(sid string) error {
        // edit applicant in priorityList
        return nil
    }
    
    func main() {
        // Database
        db, err := bolt.Open("priorityList.db", 0600, &bolt.Options{Timeout: 1 * time.Second})
        if err != nil {
            log.Fatal(err)
        }
        defer db.Close()
    }
    

    如果使用文件,则可以使用来阻止并发写入


    否则数据库就可以了。例如,可能是合适的。这是一种纯粹的使用程序运行的方式。

    如果使用文件,可以使用阻止并发写入


    否则数据库就可以了。例如,可能是合适的。这是一种纯粹的运行程序。

    有很多方法。您可以使用文件并使用Go互斥锁或系统锁对其进行保护。您可以通过内存映射文件来提高性能。您可以使用BoltDB,这是一款非常安全的软件,可以提供所需的机器,并且可以在过程中工作。如果你写的很少,大部分是读的,那么常量DB看起来也很有趣。 但是,经典的sqldb有一些优点

    • 您可以使用第三方存储来存储数据,并在需要时轻松迁移
    • 您可以从第三方应用程序或纯SQL访问数据 请求
    • 您可以分别考虑数据模式和代码逻辑

      • 有很多方法。您可以使用文件并使用Go互斥锁或系统锁对其进行保护。您可以通过内存映射文件来提高性能。您可以使用BoltDB,这是一款非常安全的软件,可以提供所需的机器,并且可以在过程中工作。如果你写的很少,大部分是读的,那么常量DB看起来也很有趣。 但是,经典的sqldb有一些优点

        • 您可以使用第三方存储来存储数据,并在需要时轻松迁移
        • 您可以从第三方应用程序或纯SQL访问数据 请求
        • 您可以分别考虑数据模式和代码逻辑

        BoltDB是否将数据保存在内存中?如果是这样,如果程序退出,数据就会丢失,对吗?BoltDB将数据存储在磁盘上。我用一些代码更新了我的问题。你怎么认为?将互斥体放在列表中而不是单个申请人中是否正确?如果使用BoltDB,则不需要互斥体。螺栓内部处理锁定和解锁。如果你自己使用文件,你只需要一个互斥锁。我应该像上面那样使用
        prioryList
        结构,还是直接在数据库中修改数据?BoltDB不把数据保存在内存中吗?如果是这样,如果程序退出,数据就会丢失,对吗?BoltDB将数据存储在磁盘上。我用一些代码更新了我的问题。你怎么认为?将互斥体放在列表中而不是单个申请人中是否正确?如果使用BoltDB,则不需要互斥体。螺栓内部处理锁定和解锁。如果你自己使用文件,你只需要一个互斥锁。我应该像上面那样使用
        prioryList
        struct,还是直接在数据库中修改数据?