본문 바로가기

golang37

golang 인터페이스 활용 golang에서는 빈 인터페이스를 통해서 여러가지 타입을 받을 수 있습니다. 바로 예시로 넘어가서 확인해보겠습니다. myPrint 함수의 인자를 보면 타입명이 interface{} 입니다. 빈 인터페이스를 나타내는 것으로 모든 타입을 받을 수 있습니다. 원리를 간단하게 살펴보겠습니다. 위 코드처럼 선언하게 되면 run()이란 함수를 가진 구조체 타입들만 해당함수의 인자로 들어올 수 있습니다. 그런데 이러한 조건없이 empty interface로 선언하면 아무조건이 없으므로 모든 타입을 받을 수 있게 됩니다. 이번에는 인터페이스의 형변환에 대해 알아보겠습니다. a는 empty interface type으로 b는 int형으로 선언후 더하기 연산을 해보았습니다. 그러나 위에 빨간줄이 나와있듯이 에러가납니다. .. 2021. 3. 25.
golang의 is a 관계 이번 글에서는 golang의 is a 관계에 대해 알아보겠습니다. 예시 보는게 이해가 빠르므로 바로 예시로 넘어가겠습니다. 위 코드를 보다시피 일반 Player에는 bonus가 없고 Pro에게만 bonus가 있습니다. 그리고 Pro의 구조체를 보면 Player를 포함하고 있습니다. 그런데 Pro는 getSalary 함수를 사용할 수 있을까요? Player와 Pro는 현재 타입이 달라보여서 아래와 같은 방법을 써야할 것 같은 느낌이 듭니다. 이런식으로 Pro의 타입을 받는 함수를 새로 생성해야 될 것 같습니다. 그러나 굳이 이런 함수를 새로 만들지 않아도 작동합니다. 확인을 해보겠습니다. 위 코드의 결과는 100, 150이 출력되고 이는 proPlayer가 Player 타입을 받는 getSalary함수를 .. 2021. 3. 25.
golang array와slice 이번 글에서는 golang에서 햇갈릴만한 array와 slice의 차이점을 알아보겠습니다. 1 2 3 4 5 6 func main() { var a = [3]int{1,2,3} b := a b[1] = 22 } cs []안에 숫자를 넣으면 길이가 늘어나지 않는 array가 됩니다. 위 코드의 경우 b의 값을 바꾸었는데 a[1]의 값도 바뀔까요? a의 값은 바뀌지 않습니다. array의 경우 := 연산자를 이용했을 때 call by value 형식으로 넘어가기 때문입니다. 1 2 3 4 5 6 7 func main() { var a = []int{1,2,3} b := a b[1] = 22 } cs 이번에는 slice 코드입니다. 첫번째 코드와 다른점은 []안에 숫자가 없다는 점입니다. slice의 경우에는.. 2021. 3. 23.
golang과 함께 알아보는 쿠키 쿠키란? - 쿠키란 쉽게 말해서 서버가 유저의 브라우저에 정보를 심어놓는것이라고 볼 수 있다. 예를들면 자동로그인 같이 미리 기억해놔야하는 정보들을 심어놓았다가 다음에 유저가 서버에게 요청을 할 때 쿠키를 보고 여러가지 처리를 해주는 것이다. 오늘은 간단한 덧셈을 쿠키를 이용해서 해볼건데 아래와 같다. localhost:8080/으로 접속하면 새로운 쿠키가 생긴다. (Value가 0인 쿠키가 생긴다.) localhost:8080/read로 접속하면 현재 쿠키의 값을 볼 수 있다. localhost:8080/addNum으로 접속하면 현재 가지고 있는 쿠키의 값에 11을 더한 쿠키를 새로 받게 된다. 전체코드는 아래와 같다. 기본 http모듈을 사용했으며 쿠키에는 string값이 저장되므로 덧셈에 형변환을 .. 2020. 12. 9.