1. Banking

기본적인 Go struct 연습.

nomadCoder 강의 실습 #1

  1. main.go

package main

import (
	"fmt"
	accounts "go_tutorial/nomadCoder/practiceStruct/banking"
)

type person struct {
	name    string
	age     int
	favFood []string
}

func main() {
	account := accounts.NewAccount("taeha")
	account.Deposit(10)
	fmt.Println(account.Balance())
	err := account.Withdraw(20)
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println(account.Balance(), account.Owner())
	fmt.Println(account)

}

2. banking.go

  • struct

  • private, public

    • 첫 글자가 소문자이면 private, 대문자이면 public.

    • function에서도 마찬가지이다. export 가능 여부가 달라짐.

  • method

    • func 옆에 receiver 를 설정함으로써 method 작성이 가능.

    • pointer 사용에 주의하자. (deepCopy, shallowCopy)

  • exception handling

    • try-catch 등의 기능이 없다.

    • error에 대해 개발자가 직접 신경써서 처리해줘야 함.

    • error 가 아닌 경우 nil을 return 한다.

  • String()

    • String() method를 정의함으로써 해당 객체를 print 했을 때 내용을 설정할 수 있다.

package accounts

import (
	"errors"
	"fmt"
)

var errNoMoney = errors.New("No money error")

// Account struct
type Account struct {
	owner   string
	balance int
}

// NewAccount creates Account
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
}

// ChangeOwner of the account
func (a *Account) ChangeOwner(newOwner string) {
	a.owner = newOwner
}

// Owner of account
func (a Account) Owner() string {
	return a.owner
}

func (a *Account) String() string {
	return fmt.Sprint(a.Owner(), "'s account.\nHas: ", a.Balance())
}

Last updated