struct의 이름(struct 내 변수 포함)을 대문자로 시작해야 다른 파일에서 해당 구조체에 접근이 가능함. (대문자: public, 소문자: private)
type Account struct {
owner string
balance int
}
*를 붙이게 되면 변수의 주소를 반환한다. 따라서 원래 변수의 값을 변경하거나 큰 구조체를 복사하지 않고 주소만 전달하여 성능을 최적화 할 수 있다.
*를 안붙이면 변수의 값을 복사하여 반환하여 원래 변수와 독립적으로 사용하고자 할 때 사용한다.
go언어에서는 자바스크립트와 달리 error를 직접 핸들링한다.
error을 알아서 exception해주지 않고 그 에러 값을 변수화 할 수도 있는데 변수화 할 때는 err를 접두사로서 앞에 붙여야 한다.
nil은 자바스크립트의 null 혹은 파이썬의 none과 같다. (= zero value)
func NewAccount (owner string) *Account {
account:= Account{owner: owner, balance: 0}
return &account;
}
// Deposit x amount on your account
func (a *Account) Deposit(amount int) {
a.balance += amount;
}
// Balance of your account
func (a Account) Balance() int {
return a.balance;
}
// Withdraw x amount from your account
func (a *Account) Withdraw(amount int) error {
if a.balance < amount {
return errNoMoney
}
a.balance -= amount;
return nil;
}