본문 바로가기

Go4

golang 리시버 목차Value 리시버Pointer 리시버참고 go 언어에서는클래스가 없어그 클래스에 갖는 메소드가 없는 대신 리시버를 통해구조체가 갖는 메소드를 나타낼 수 있다 type Item struct { price, discount int } func (i Item) DiscountPrice() int { return i.price - i.discount } 위와 같이 함수명 앞에구조체 타입과 변수명을 같이 선언하면서해당 구조체의 메소드임을 알려주고이를 리시버라고 한다 💡리시버는 메소드에서 매개변수와 같이 사용할 수 있으며 go 언어는 포인터를 사용 하기 때문에 리시버도 value 리시버, pointer 리시버로 나뉜다 Value 리시버복사된 구조체의 데이터를 전달 받음 func (i Item) DiscountP.. 2021. 2. 14.
Go run, build, install? 목차go rungo buildgo installgo install go get 참조 go rungo 파일을 컴파일 하지만실행 파일을 임시 디렉토리에 둔 후실행이 끝나면 삭제 작은 프로그램을 테스트 할 때 유용 go buildgo 파일을 컴파일 하여실행 파일을 현재 디렉토리에 생성 원격에서 실행하려 할 때 유용 go installgo 파일을 컴파일 하여실행 파일을 GOBIN 환경 변수에 설정된 경로에 생성( 기본은 $GOPATH/bin ) 로컬에서 작성하고 사용할 때 유용 go install 패키지를 컴파일 하여.a 파일을 $GOPATH/pkg 에 생성( import 은 이 .a 파일을 참조함 ) go get 패키지를 다운받아패키지 소스 파일을 $GOPATH/src/ 에 생성그 후 go install 동작.. 2021. 1. 20.
Go modules 목차GOROOTGOPATHGo ModulesGO111MODULE사용go.mod GOROOTgo 가 설치된 경로 go와 관련된 실행파일, sdk 등이 위치하는 곳 GOPATH현재 내가 만들고 있는 go 프로그램의 경로 (working directory) 패키지, 소스 파일 등이 위치 기본 구조bin실행 파일이 위치pkg컴파일된 패키지의 오브젝트 파일이 위치src소스 파일이 위치 따라서, 프로젝트 경로도 GOPATH/src 안에 존재해야 하고 import한 라이브러리(모듈)의 소스 파일들도 여기 존재하게 된다 💡무엇보다 프로젝트 워크스페이스가 GOPATH/src에 고정 되어야 하기 때문에 외부 디렉토리에서 프로젝트를 생성할 수 없다는 단점이 있다 이런 단점을 해소하고 의존성을 관리해주기 위해 Go 버전 1... 2021. 1. 19.
golang 상속? 임베딩? 임베딩go 언어에는 상속이 없다 대신 임베딩을 통한 조합으로 상속과 유사한 효과를 볼 수 있다 표현type SmartPhone struct { Navigation }위와 같이 구조체 안에 변수명 없이 타입명만 정의 하는 것으로 그 타입(구조체)을 임베딩할 수가 있다 만일 SmartPhone이 변수명 있는 Navigation 타입의 멤버를 갖는다고 해보자type SmartPhone struct { navi Navigation } 이 때 SmartPhone에서 멤버 navi가 갖고 있는 Navigate()을 그대로 사용하고 싶다면 다음과 같이 함수를 만들 수 있다func (sp SmartPhone) Navigate() { return sp.navi.Navigate() } 그럼 아래와 같이 SmartPhone.. 2021. 1. 8.