a Struct

func newUser(username string, firstname string, lastname string, email string, token string) user {
	var funcUser = new(user)
	funcUser.id = uuid.New().String()
	funcUser.username = username
	funcUser.firstname = firstname
	funcUser.lastname = lastname
	funcUser.email = email

	return *funcUser
}

// var name type = func(params)
var postUser user = newUser(postUsername, postFirstname, postLastname, postEmail, token)

// for Export the struct -> name must be uppercase: user -> User, id -> Id, ...
type user struct {
	id          string        `json:"id"`
	firstname   string        `json:"firstname"`
	lastname    string        `json:"lastname"`
	email       string        `json:"email"`
	username    string        `json:"username"`
	token       string        `json:"token"`
}

Multiple Typs

func newUser() (User, string) {
	if 1 == 1 {
		user := User{}
		return user, "email already exists"
	} else {
		var currentUser = new(User)
		...
		return *currentUser, ""
	}
}

Nil

Wenn man z.B. zwei Return-Typen hat und eines davon ein Struct ist, kann man nicht nil als Struct zurückgeben. Normalerweise gibt man dann ein leeres Struct zurück: (Nil kann man nur verwenden wenn man ein Slice, eine Variable oder ein Pointer zurückgibt.)

func test()(User, err){
	// don't work
	return nil, err

	// works
	return User{}, err
}

cannot use nil as type model.Article in return argument

Struct-Slice (Array)

func getData() ([]data, error){
	return []data, nil
}

Right pattern for returning slice of structs from function in golang