Вы хотите установить значения полей для структуры UserDetail
, которую вы присвоили interface{} temp
.Но поле принадлежало структуре UserDetail
, а не temp interface{}
.Вот почему, во-первых, вам нужно получить структуру UserDetail
из interface{}
и установить ожидаемые значения полей.Также используйте знак указателя, чтобы убедиться, что значения установлены в исходную UserDetail
структуру.А затем напечатайте temp interface{}
.Go напечатает исходные значения.Поэтому используйте вот так:
func Testing(model string) {
var temp interface{}
if model == "UserDetail" {
fmt.Println("Enterr...")
temp = &UserDetail{}
}
u := temp.(*UserDetail)
u.FirstName = "Dev"
u.Email = "dev@gmail.com"
//temp = u
fmt.Println(temp) // {"", "", "", 0, 0}
}
Редактировать
Поскольку ваше движение составляет The objective is that users would define their own structs and call a function similar to the Testing and I would get the data from the correct table in a database and then return the interface filled with data
, используйте это:
package main
import (
"fmt"
"time"
)
type UserDetail struct {
FirstName string
LastName string
Email string
User int
ReportsTo int
}
type Matter struct {
ID int
Name string
Active bool
CreatedAt time.Time
UpdatedAt time.Time
UserID int
}
func Testing(model string) interface{} {
var temp interface{}
if model == "UserDetail" {
fmt.Println("Enter for UserDetail...")
temp = &UserDetail{
FirstName: "Dev",
Email: "dev@gmail.com",
}
} else if model == "Matter" {
fmt.Println("Enter for Matter...")
temp = &Matter{
Name: "Joe",
Active: true,
CreatedAt: time.Now(),
}
}
return temp
}
func main() {
var temp interface{}
temp = Testing("UserDetail")
fmt.Println(temp) // {"Dev", "", "dev@gmail.com", 0, 0}
temp = Testing("Matter")
fmt.Println(temp) // {0, "Joe", true, current timestamp, default timestamp, 0}
}