[디자인패턴] Factory 패턴

Factory Pattern 1. factory method pattern 객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정한다. package main import ( "errors" "fmt" ) type Character interface { Attack() } const ( warrior = iota mage ) type Warrior struct { } func (w *Warrior) Attack() { fmt.Println("sword attack") } type Mage struct { } func (m *Mage) Attack() { fmt.Println("magic attack") } Factory struct type CharacterFactory struct { } func (f *CharacterFactory) Create(job int) (Character, error) { switch job { case warrior: return &Warrior{}, nil case mage: return &Mage{}, nil default: return nil, errors....

April 16, 2021 · 2 min · icecat471

[디자인패턴] Builder 패턴

1. Builder Pattern Person 객체를 예로 들어보자 type Person struct { name string age int job string height float32 weight float32 } func NewPerson(name string, age int, job string, height float32, weight float32) *Person { return &Person{ name, age, job, height, weight, } } func main() { p := NewPerson("홍길동", 22, "developer", 177.2, 72.9) } 위처럼 모든 정보를 입력하지 않아도 될때도 있고, 가독성도 좋지않으며 parameter의 순서도 맞춰주어야한다.또 객체에 새로운 정보가 추가된다면 NewPerson()을 계속 수정해주어야 한다....

April 16, 2021 · 2 min · icecat471

[Go언어] VSCode에서 gopls 에러가 날때

vscode에서 아래와 같은 에러 발생시 gopls requires a module at the root of your workspace. You can work with multiple modules by opening each one as a workspace folder. settings.json 파일에 아래와 같이 추가하고 vscode를 재실행한다. "gopls": { "experimentalWorkspaceModule": true, },

April 16, 2021 · 1 min · icecat471

Go언어 log.SetPrefix()

package main import ( "fmt" "log" ) func init() { log.SetPrefix("Blockchain: ") } func main() { fmt.Println("test") log.Println("test") } 실행시켜보면 test Blockchain: 2021/04/15 15:04:03 test

April 15, 2021 · 1 min · icecat471

Go언어 defer와 panic

출처: 예제로 배우는 Go 프로그래밍 1. defer 특정 문장 혹은 함수를 defer를 호출하는 함수가 return하기 직전에 실행하게 한다. package main import "os" func main() { f, err := os.Open("1.txt") if err != nil { panic(err) } // main 마지막에 파일 close 실행 defer f.Close() // 파일 읽기 bytes := make([]byte, 1024) f.Read(bytes) println(len(bytes)) } 2. panic 함수를 즉시 멈추고 defer를 모두 실행한 뒤 즉시 리턴.이것은 콜스택을 따라 상위함수에도 모두 적용....

April 13, 2021 · 1 min · icecat471

Go언어 flag 패키지를 통한 command-line flag 파싱

golang flag package command-line flag를 파싱해주는 패키지. // flag값에 저장된 int64변수의 주소값 반환 maxValue := flag.Int64("max", 10, "Defines maximum value") /* xxxVar() 함수는 반환값이 없고 첫번째 인자로 변수의 포인터를 넘겨주면 변수에 값을 할당해줌. */ var minValue int64 flag.Int64Var(&minValue, "min", 0, "Defines minimum value") // flag에 command-line 파싱 // 꼭 호출해주어야 함 flag.Parse()

April 12, 2021 · 1 min · icecat471

Go언어 프로젝트 외부의 모듈 import하기

go.mod 파일에서 require ( <모듈명> v0.0.0 ) replace <모듈명> v0.0.0 => ../module // 이런 형태로 경로를 지정해줌

April 12, 2021 · 1 min · icecat471