GO 언어 시작기 #2

ims·2021년 5월 15일
0

GO 언어 시작기

목록 보기
2/4
post-custom-banner

📌 1. 기본 컨셉

🔥 Pointers

C,C++에서와 같이 포인터를 사용할 수 있다. ( 문법은 같다 )

🔥 arr & slice

배열은 data 크기, data type, 값을 선언해주어야 한다.

slice는 arr에서 크기를 지정하지 않으면 만들어진다. 특이한 점은 append를 할 때 기존의 값에 추가되는 것이 아니라, 추가된 값으로 return을 뱉는다.

🔥 slice 삭제연산

만약 index 1의 원소를 지우고 싶으면
1까지 slicing하고, 2부터 뒤에까지를 slicing 한뒤 ... -> slice로 만들어줘야 되는 것 같다.

그런데 왜 이렇게 복잡하게 만들어놓은지는 잘 모르겠다.
그냥
arr.append()
arr.delete()
등으로 만드는 게 더 편했을 것 같은데... 이유가 있겠지

🔥 map

선언 방법이 특이하다.

다른 구조와 마찬가지로 for - range 를 이용할 수 있다.

🔥 struct

go에는 class, object가 없고, struct 위주로 돌아간다.

위와 같이 value들만 전달하는 형태로 사용할 수도 있지만, 위위의 코드처럼 key값을 적어주는 것이 가시적으로 좋다.

📌 2. struct 사용법

🔥 Bankaccount 예제

account struct를 만들고, owner와 balance를 설정할 수 있다고 해보자.
account와 멤버변수에 접근하기 위해서는 모두 public으로 선언해야 하므로 모두 대문자로 선언해야 한다.
그런데 이렇게 만들면 정보은닉이 제대로 지켜지지 않는다.
그래서 account 자체는 private으로 만들고, getter를 만든다.

  • 원래는 Account가 private으로 선언되는게 맞는데, 예제 활용상 public으로 선언했다.

🔥 Receiver

method는 struct 안에 선언하는게 아니라, 외부에서 선언한다.

a Account <--- 이 부분을 리시버라고 하며, 명명규칙은 struct의 앞글자를 따온다.

허나 만약 위의 코드대로 실행한다고 하더라도 제대로 동작되지 않는 것을 볼 수 있다.

왜냐하면 go는 인자를 넘길 때, 복사된 값을 넘기기 때문이다.
만약 해당 객체에 대한 값을 바꾸고 싶은 것이라면, 포인터 값으로 값을 받는다고 명시해주어야 한다.

포인터 값으로 변경하면 정상작동한다.

🔥 String()

Java에서의 toString이 Go에서는 String()으로 구현돼있다.

그래서 그냥 struct를 찍어보면 위와 같이 나온다.

새롭게 override하고 싶다면, 위와 같이 String() method를 재정의 해주면 된다.

📌 3. 예외처리

WithDraw라는 function을 선언해서 출금을 하는 메서드가 있다고 해보자.
만약 위와 같이 돈을 갖고 있는 돈에 초과해서 뺀다면, 예외처리가 발생해야 한다.

허나 지금은 -10이 출력되고 있다.

🔥GO에는 Try-Catch나 Exception이 없다. 오직 error만 존재한다.

🔥그래서 GO에서는 항상 err 처리가 강제된다.


WithDraw function을 위와 같이 수정할 수 있다.

nil = null

log.Fatalln은 print하고 프로그램을 종료시킨다.


좀 더 깔끔한 코드를 위해 err들을 한데 모으는 것도 방법이다.

err를 변수로 선언해서 모을 땐, 변수명 앞에 err를 붙여주는 것이 명명규칙이다.

profile
티스토리로 이사했습니다! https://imsfromseoul.tistory.com/ + https://camel-man-ims.tistory.com/
post-custom-banner

0개의 댓글