@ubsa

Как контролировать инициализацию переменной Go?

Как контролировать инициализацию переменной Go?

Например, в языках Java, C++, Python есть конструктор, при создании обьекта, я могу обязательно потребовать задать значения для переменных класса.

class User {
    private String m_name;

    User(String name){
        m_name = name;
    }

    void print(){
        System.out.println("User name is " + m_name);
    }
}

class Main {
    public static void main(String[] args) {
        User user = new User(); //ошибка компиляции
        User user = new User("Alex"); //будет работать
        user.print(); // выведет "User name is Alex"
    }
}


Как мне реализовать такое же поведение в go?
type User struct {
	name string
}

func (user *User) print() {
	println("User name is " + user.name)
}

func main() {
	user := User{name:"Alex"}
	user.print() // Выведет User name is Alex

        //сделать так, чтобы код, который ниже не работал, а требовал ввести name
	user := User{}
	user.print() // Выведет User name is 
}


Или Go так не умеет и нужно самому в методе проверять?:
if name == "" {что то делать}
  • Вопрос задан
  • 103 просмотра
Пригласить эксперта
Ответы на вопрос 1
Обычно выносят такой тип в отдельный пакет, делают тип приватным и публичную функцию New, возвращающую подготовленный объект.

//// users/users.go
package users

type user struct {
  name string
}

func New(name string) *user {
    u := user{
        name: name,
    }
    if name == "" {
        u.name = "Nobody"
    }
    return &u
}

///// main.go
package main

import "github.com/yourproject/users"

func main() {
    user := users.New("")
    ...........
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы