2014-10-06 2 views
-2

Есть ли хороший способ вставить инициализированные структурные переменные в другую структуру?Как вставить инициализированную переменную в структуру?

Рассмотрим следующую ситуацию:

type Account struct { 
    AdminUser, AdminPass string 
} 

const (
    acc1: "account_user", 
    pass: "111222" 
) 

var AccountDef = Account { 
    AdminUser: "acc1", 
    AdminPass: "pass1" 
} 

type Login struct { 
    Acc *AccountDef 
    Username, Password, Token string 
} 

var LoginDef = Login { 
    Token: "adaasdasddas1123" 
} 

Я хочу повторно AccountDef в Login, то я хочу, чтобы создать экземпляр LoginDef в другой функции, то использовать его для рендеринга шаблонов как LoginDef.Acc.AdminUser

Возможно ли это сделать ?

+1

Я найти его трудно следовать, что вы пытаетесь спросить , Возможно, я устал, или, может быть, вы не очень хорошо объяснили. Не могли бы вы переписать его более четко? – Alasdair

+0

[Вложение] (http://golang.org/doc/effective_go.html#embedding) имеет конкретное значение в Go, но я вообще не вижу, чтобы вы использовали встроенные структуры. Вы пытаетесь использовать их таким образом? – JimB

+0

@JimB да. Я пытаюсь использовать их таким образом, чтобы я мог использовать инициализированный AccountDef в структуре Login, поэтому, когда я создаю экземпляр в функции с помощью 'new (Login)' или 'Login {}' я хочу 'AdminUser' и' AdminPass' как заполнены значениями по умолчанию, поэтому мне не нужно использовать 'Login {AdminUser:« acc1 », AdminPass:« pass1 »}' для каждой функции, которая этого требует. Я мог бы взглянуть на использование другой частной функции для выполнения этой задачи и назвать ее, но было интересно, есть ли лучший способ, чем просто создание фабричной функции. –

ответ

0

Если вы хотите Login содержать поля из Account, вы можете вставлять их так:

http://play.golang.org/p/4DXnIsILd6

type Account struct { 
    AdminUser string 
    AdminPass string 
} 

type Login struct { 
    *Account 
    Username, Password, Token string 
} 

func main() { 
    acct := &Account{ 
     AdminUser: "username", 
     AdminPass: "pass", 
    } 

    login := Login{Account: acct} 

    fmt.Println("login.AdminUser:", login.AdminUser) 
    fmt.Println("login.AdminPass:", login.AdminPass) 
} 
+0

Привет, спасибо за ответ, но то, что я ищу, не создает значения по умолчанию в каждой функции. Я создаю экземпляр, например, в примере вашего примера, 'Account' около 20-30 раз. Я хочу иметь ссылку на конструктор вместо –

+0

Итак, вы хотите повторно использовать «учетную запись» с определенными значениями, вместо этого, если инициализировать новые? Если это так, просто сделайте одну «учетную запись» в области, которая имеет смысл. Я не уверен, что вопрос сейчас, или что это связано с внедрением. Возможно, попробуйте создать пример, показывающий, что именно вы хотите. – JimB

Смежные вопросы