我正在尝试通过构建一个小型原型订单管理应用来学习Go和Gorm.数据库是MySQL.通过简单的查询,Gorm一直很出色.然而,当试图获得涉及一对多与一对一关系的组合的结果集时,Gorm似乎不足.毫无疑问,我缺乏理解实际上是在做空.我似乎无法找到任何我想要完成的在线示例.任何帮助将不胜感激.
去结构
// Order
type Order struct {
gorm.Model
Status string
OrderItems []OrderItem
}
// Order line item
type OrderItem struct {
gorm.Model
OrderID uint
ItemID uint
Item Item
Quantity int
}
// Product
type Item struct {
gorm.Model
ItemName string
Amount float32
}
Run Code Online (Sandbox Code Playgroud)
数据库表
orders
id | status
1 | pending
order_items
id | order_id | item_id | quantity
1 | 1 | 1 | 1
2 | 1 | 2 | 4
items
id | item_name | amount …Run Code Online (Sandbox Code Playgroud) 我有以下型号......
type User struct {
ID string `sql:"type:uuid;primary_key;default:uuid_generate_v4()"`
FirstName string `form:"first_name" json:"first_name,omitempty"`
LastName string `form:"last_name" json:"last_name,omitempty"`
Password string `form:"password" json:"password" bindind:"required"`
Email string `gorm:"type:varchar(110);unique_index" form:"email" json:"email,omitempty" binding:"required"`
Location string `form:"location" json:"location,omitempty"`
Avatar string `form:"avatar" json:"avatar,omitempty"`
BgImg string `form:"bg_img" json:"bg_img,omitempty"`
CreatedAt time.Time
UpdatedAt time.Time
DeletedAt time.Time
}
Run Code Online (Sandbox Code Playgroud)
我尝试了几种不同的方式,但这种方式会抛出(pq: relation "users" does not exist).我没有相关的模型,它只是一个模型.
我试过用...
func (user *User) BeforeCreate(scope *gorm.Scope) error {
scope.SetColumn("ID", uuid.NewV4())
return nil
}
Run Code Online (Sandbox Code Playgroud)
随着一个uuid lib,但也没有运气.
我有以下人为的例子:
type Top struct {
ID uint `gorm:"primary_key"`
Name string
Middle []*Middle
}
type Middle struct {
ID uint `gorm:"primary_key"`
TopID int
Name string
Low []*Low
}
type Low struct {
ID uint `gorm:"primary_key"`
MiddleID int
Name string
Bottom []*Bottom
}
type Bottom struct {
ID uint `gorm:"primary_key"`
LowID int
Name string
}
top := Top{
Name: "Top",
Middle: []*Middle{
{
Name: "Middle",
Low: []*Low{
{
Name: "Low",
Bottom: []*Bottom{
{
Name: "Bottom",
},
},
},
},
},
},
} …Run Code Online (Sandbox Code Playgroud) 我在golang上写了"hello world"rpc服务.它运行正常,并且jsonrpc客户端正在运行.但是我需要用curl发送请求,这个例子不起作用:
curl \
-X POST \
-H "Content-Type: application/json" \
-d '{"id": 1, "method": "Test.Say", "params": [{"greet": "world"}]}' \
http://localhost:1999/_goRPC_
Run Code Online (Sandbox Code Playgroud)
去接受连接,但绝对没有结果:
curl: (52) Empty reply from server
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
package main
import (
"log"
"os"
"time"
"net"
"net/rpc"
"net/rpc/jsonrpc"
)
// RPC Api structure
type Test struct {}
// Greet method arguments
type GreetArgs struct {
Name string
}
// Grret message accept object with single param Name
func (test *Test) Greet(args *GreetArgs, result *string) (error) {
*result = "Hello …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Go 构建一个示例共享对象库。代码编译(使用命令go build -o libsample.so -buildmode=c-shared .),成功构建了一个共享对象库 - 但是在通过 JNA(来自 Java)或 ctypes(来自 python)访问导出的方法时,我感到恐慌。我用 Go 写的代码是:
// package name: libsample.so
package main
import "C"
import "fmt"
//export Hello
func Hello(s string) {
fmt.Println("Hello " + s + "!")
}
func main() {
}
Run Code Online (Sandbox Code Playgroud)
Hello从 Java访问此方法时:
import com.sun.jna.*;
public class sample {
public interface GoSO extends Library {
GoSO INSTANCE = (GoSO) Native.loadLibrary("sample" ,GoSO.class);
void Hello(String s);
}
public static void main(String[] args) {
GoSO.INSTANCE.Hello("World");
}
}
Run Code Online (Sandbox Code Playgroud)
或来自 …
我正在生成一个 Go 文件(包括构建版本等常量),以便这些常量可以在其他包中使用。我创建了一个小工具来创建文件,go generate但我正在尝试想一个合适的名称,以便
很明显它是生成的,所以如果它丢失(在构建时),用户就会知道运行go generate
然后我可以将文件添加到 .gitignore
我的第一个猜测是这样的version_GENERATED.go
我应该注意哪些约定或更好的建议?
go ×6
go-gorm ×3
cgo ×1
curl ×1
http ×1
json-rpc ×1
one-to-many ×1
one-to-one ×1
postgresql ×1