Как я могу очистить этот тип возврата для нео-гоанга?

Эта модель, которую я пытаюсь сделать с помощью неоизма, сейчас работает, но я не могу понять, как сделать возвращаемый тип более коротким и более чистым. Должен быть способ сделать это: []struct { UserId string "json:\"account.UserId\""; FirstName string "json:\"account.firstName\""; LastName string "json:\"account.lastName\"" }

В: []Account или что-то

package models

import (
  "errors"
  "strconv"
  "time"
  // "fmt"

  "github.com/jmcvetta/neoism"
)

var (
  Accounts map[string]*Account
)

var (
  db *neoism.Database
)

func panicErr(err error) {
  if err != nil {
    panic(err)
  }
}

type Account struct {
  UserId   string `json:"account.UserId"`
  FirstName     string `json:"account.firstName"`
  LastName      string `json:"account.lastName"`
}

func init() {
  var err error
  db, err = neoism.Connect("http://neo4j:password@localhost:7474/db/data")
  if err != nil {
    panic(err)
  }
}

// map[lastName:PATRUS UserId:7f7014f9-bd59-4739-8e1b-5aebfa00f4c5 firstName:LARISSA]

func GetAccounts() []struct { UserId string "json:\"account.UserId\""; FirstName string "json:\"account.firstName\""; LastName string "json:\"account.lastName\"" } {
  stmt := `
    MATCH (account:Account) RETURN account.UserId, account.firstName, account.lastName
  `

  res := []struct {
    UserId string `json:"account.UserId"`
    FirstName  string `json:"account.firstName"`
    LastName  string `json:"account.lastName"`
  }{}

  // construct query
  cq := neoism.CypherQuery{
    Statement:  stmt,
    Result:     &res,
  }

  // execute query
  err := db.Cypher(&cq)
  panicErr(err)

  return res
}

Вот еще одна копия: http://play.golang.org/p/14gzc0a_89

Я новичок и собираюсь уйти от этих примеров для неоизма: https://gist.github.com/verdverm/b43444063995a7f5b913

Примеров много, но verdverm всегда просто выводит, а не возвращает.

У меня также есть контроллер, где я хотел бы вывести JSON.

package controllers

import (
  "github.com/astaxie/beego"
  "social/models"
)

type AccountsController struct {
  beego.Controller
}

func (c *AccountsController) Get() {
  c.Data["json"] = models.GetAccounts()
  // c.Data["json"] = "hello world"
  c.ServeJson()
}

Спасибо за любую помощь / советы для новичка!

2 ответа

Решение
package models

import (
  "errors"
  "strconv"
  "time"
  // "fmt"

  "github.com/jmcvetta/neoism"
)

var (
  Accounts map[string]*Account
)

var (
  db *neoism.Database
)

func panicErr(err error) {
  if err != nil {
    panic(err)
  }
}

type Account struct {
  UserId   string `json:"account.UserId"`
  FirstName     string `json:"account.firstName"`
  LastName      string `json:"account.lastName"`
}

func init() {
  var err error
  db, err = neoism.Connect("http://neo4j:password@localhost:7474/db/data")
  if err != nil {
    panic(err)
  }
}

// map[lastName:PATRUS UserId:7f7014f9-bd59-4739-8e1b-5aebfa00f4c5 firstName:LARISSA]

func GetAccounts() []Account {
  stmt := `
    MATCH (account:Account) RETURN account.UserId, account.firstName, account.lastName
  `

  var accounts []Account

  // construct query
  cq := neoism.CypherQuery{
    Statement:  stmt,
    Result:     &accounts,
  }

  // execute query
  err := db.Cypher(&cq)
  panicErr(err)

  return accounts
}

Нужно использовать структуру Account над функцией, а затем создать переменную внутри и использовать указатель на var для ответа neoism db.

Может ли getAccounts вернуть массив указателей аккаунта?

func GetAccounts() []*Account {}

Другие вопросы по тегам