LINUX.ORG.RU

История изменений

Исправление alnkapa, (текущая версия) :

Более предметно. К примеру дано такое. (Код не мой ИИ нагенерил)

package main

import (
    "gorm.io/gorm"
    "gorm.io/driver/postgres"
)

type User struct {
    ID    uint
    Name  string
    Age   int
    City  string
}

func main() {
    dsn := "host=localhost user=gorm password=gorm dbname=gorm port=9920 sslmode=disable"
    db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
    if err != nil {
        panic(err)
    }

    // GROUP BY с подсчетом количества
    var results []struct {
        City  string
        Count int
    }
    
    db.Model(&User{}).
        Select("city, COUNT(*) as count").
        Group("city").
        Find(&results)
}

Все хорошо и понятно. И работает. Появляется задача. Теперь Name это структура.

// Структура для имени
type FullName struct {
    Title     string `gorm:"size:10"`  // Mr, Mrs, Dr
    FirstName string `gorm:"size:100"`
    LastName  string `gorm:"size:100"`
    MiddleName string `gorm:"size:100"`
}

И вот тут, уже надо писать свой. Value() (driver.Value, error) А дальше больше.

Исходная версия alnkapa, :

Более предметно. К примеру дано такое. (Код не мой ИИ нагенерил)

package main

import (
    "gorm.io/gorm"
    "gorm.io/driver/postgres"
)

type User struct {
    ID    uint
    Name  string
    Age   int
    City  string
}

func main() {
    dsn := "host=localhost user=gorm password=gorm dbname=gorm port=9920 sslmode=disable"
    db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
    if err != nil {
        panic(err)
    }

    // GROUP BY с подсчетом количества
    var results []struct {
        City  string
        Count int
    }
    
    db.Model(&User{}).
        Select("city, COUNT(*) as count").
        Group("city").
        Find(&results)
}

Все хорошо и понятно. И работает. Появляется задача. Теперь Name это структура.

// Структура для имени
type FullName struct {
    Title     string `gorm:"size:10"`  // Mr, Mrs, Dr
    FirstName string `gorm:"size:100"`
    LastName  string `gorm:"size:100"`
    MiddleName string `gorm:"size:100"`
}