GO 언어 문법 (struct에 method 추가하기) #2
2022. 3. 30. 10:34ㆍ99. 정리전 - IT/01. GO LANG
go version go1.18 windows/amd64
main.go |
package main
import (
"fmt"
banking "scraping/structExample/main/detail"
)
/* main의 의미 : 컴파일을 위해 필요한 것!
명령어 go run main.go 뜻
1. main package 찾음
2. main function 찾고 실행 */
func main() {
// fmt : formattiing 을 위한 패키지, Print의 "P"가 대문자인 이유는 function을 export 하겠다는 의미
fmt.Println("GO 에서 Constructor 와 Method 사용")
// [01] GO 에서 Constructor를 만드는 방법
a := banking.NewAccount("Donz")
fmt.Println(a) // <- 결과를 출력해 보면 요렇게 &{a 0} 주소표시가 붙어있음, a는 복사본이 아니라 object라는 뜻임
// fmt.Println(a) 에서 콘솔에 "&{a 0}" 요렇게 표현해 주는 것은 String() 펑션 때문임, 출력형태 변경가능니 맨아래 참조
// [02] GO 에서 Method 사용 방법
a.Deposit(10)
a.Balance()
// [03] GO 에서 try-catch 처리
e := a.Withdraw(11)
if e != nil {
fmt.Println(e.Error())
}
}
|
anything_banking_file.go |
package anything_banking_package
import (
"errors"
"fmt"
)
// 앞글자 a가 소문자라서 private: 파일내부에서만 사용가능 type account struct {
owner string
balance int
}
/* 새로운 object를 리턴하고 싶은데, object를 만들긴 싫으니 복사본 자체를 return 함
새로 만들어진 object를 보내는 거, &:주소 / *:주소에 담긴값을 살펴봄 */
func NewAccount(owner string) *account {
a := account{owner: owner, balance: 0}
fmt.Println("a balance :", a.balance, &a.balance) // <- 0xc000004088
return &a
}
/* GO의 Method 만드는 방법
func와 func명 사이에 account의 b와 b의 type을 기입, (b account) 부분을 receiver라고 하고 reciever는 b */ func (b *account) Deposit(amount int) {
/* (*account) 뜻 : 누군가가 main.go의 a.Deposit을 호출한다면, Deposit method를 호출한 account를 사용하라는 거임 */
b.balance += amount
fmt.Println("b balance :", b.balance, &b.balance) // <- 0xc000004088
}
// main의 account를 여기로 가지고 와서 c로 복사본을 만듬
func (c account) Balance() int {
fmt.Println("c balance :", c.balance, &c.balance) // <- 0xc0000040b8
return c.balance
}
/* GO 는 try-catch가 없고 에러처리가 필요한 부분은 개발자가 이렇게 해줘야 함
errors.New("Can't withdraw") 를 리턴하고, 받는 쪽에서 표현 */
func errWithdrwa() error { return errors.New("Can't withdraw")
}
func (d *account) Withdraw(amount int) error { if d.balance-amount < 0 {
return errWithdrwa()
} else {
fmt.Println("d balance :", d.balance, &d.balance) // <- 0xc000004088
d.balance -= amount
}
return nil
}
// GO 가 자동으로 호출해주는 method (fmt.Println 명령어 사용시 아래의 형태로 변형되어 표현됨)
func (a *account) String() string {
return fmt.Sprint(a.owner, "'s account.\nHas :", a.balance)
}
|
mod.go |
module scraping/structExample/main
go 1.18
|