我是来自python背景的Golang的新手,因此尝试了解新的和不同的概念。我正在尝试创建相关字段,然后从数据库中选择它们。
楷模:
type Company struct {
gorm.Model
Name string
}
type CreditCard struct {
gorm.Model
Number int
Company Company
CompanyId uint
}
type User struct {
gorm.Model
Name string
CreditCard CreditCard
CreditCardID uint
}
Run Code Online (Sandbox Code Playgroud)
创建表和行并从数据库中选择
common.DB.AutoMigrate(
&Company{},
&CreditCard{},
&User{},
)
user := User{
Name: "Alice",
CreditCard: CreditCard{Number: 123456, Company: Company{Name: "Bank A"}},
}
common.DB.Create(&user)
var retrivedUser User
var creditCard CreditCard
var company Company
common.DB.First(&retrivedUser, 1).Related(&creditCard).Related(&company)
fmt.Println("user name", retrivedUser.Name)
fmt.Println("creditcard number", retrivedUser.CreditCard.Number)
fmt.Println("creditcard number related", creditCard.Number)
fmt.Println("company name", retrivedUser.CreditCard.Company.Name)
fmt.Println("company name …Run Code Online (Sandbox Code Playgroud) 我是新手,尝试让两种方法在应用程序运行时定期同时运行。我已经设法想出以下内容,但该for true部分感觉不正确,因为这是阻塞的。
渠道是实现这一目标的更好方法吗?任何指向正确方向的指针都会有所帮助。
func main() {
t1 := schedule(ping, time.Second)
t2 := schedule(ping, 2*time.Second)
for true {
time.Sleep(1 * time.Second)
}
t1.Stop()
t2.Stop()
}
func schedule(f func(interval time.Duration), interval time.Duration) *time.Ticker {
ticker := time.NewTicker(interval)
go func() {
for range ticker.C {
f(interval)
}
}()
return ticker
}
func ping(interval time.Duration) {
log.Println("ping ", interval)
}
Run Code Online (Sandbox Code Playgroud) 我正在使用 spring boot 并希望将产品列表作为外键添加到页面中,但是当我从数据库中检索时如何维护 ArrayList 顺序?我应该有一个中间表,例如PageProductOrder维护产品主键和订单列吗?
@Entity
public class Page {
@OneToMany
@JoinColumn(name = "product_id")
private List<Product> products;
Run Code Online (Sandbox Code Playgroud) 我想每 5 分钟运行一次任务来更新我网站上的统计信息,而不会阻止 HTTP 服务器。
我刚刚添加了基本的 HTTP 服务器逻辑和一个工作程序示例。如果我添加了多个这样的任务,这被认为是不好的做法还是有更好的方法?
package main
import (
"fmt"
"net/http"
"time"
)
func Home(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Home page")
}
func schedule(f func(), interval time.Duration) *time.Ticker {
ticker := time.NewTicker(interval)
go func() {
for range ticker.C {
f()
}
}()
return ticker
}
func longRunningTask() {
fmt.Println("Long running task")
}
func main() {
schedule(longRunningTask, time.Second*5)
http.HandleFunc("/", Home)
http.ListenAndServe("127.0.0.1:8080", nil)
}
Run Code Online (Sandbox Code Playgroud)