본문 바로가기

분류 전체보기110

Goland undefined 오류 해결하기 main.go routes.go 예를 들어 위처럼 두개의 파일이 있고 둘다 같은 package main이라면 routes.go파일에 있는 함수를 main.go에서 import 없이 쓸 수 있습니다. routes.go의 something()이란 함수를 main.go에서 사용했다고 가정해봅시다. Goland에서 main.go를 실행하면 undefined something이란 오류가 나오면서 컴파일이 안될 때가 있습니다. 이를 위한 해결 방법은 jetbrain ide에서 shift키를 2번 누르면 위와 같은 창이 나옵니다. 여기서 run을 검색하고 파란 부분에 "Run Configurations"를 들어가줍니다. 그럼 위와 같은 창이 나오는데 "More Run/Debug" -> "Modify run Confi.. 2021. 4. 26.
./ 경로 사용시 주의점 ./경로는 현재 파일의 디렉토리를 나타냅니다. 예를 들어 .../base/test.html 파일 안에서 ./를 쓴다면 base를 나타내는 것이죠. 위와 같이 폴더 구조가 있다고 가정해보겠습니다. handlers.go 파일안에 아래와 같은 코드가 있습니다. templates 디렉토리안에 layout.gohtml로 끝나는 모든 파일들을 찾아내는 코드입니다. 그런데 handlers.go의 경로는 matcha/pkg/handlers/handlers.go 이므로 ./경로를 쓰게 되면 matcha/pkg/handlers/templates ... 이 되어서 오류가 날 것 같습니다. 그러나 정상 작동합니다. 왜냐하면 결국 handlers.go도 main.go에 import 될 것이고 go run main.go 명령어를.. 2021. 4. 25.
Unix Domain Socket이란? Unix Domain Socket이란 같은 local machine안에서 사용되는 IPC 기법의 한 종류로 프로세스 간의 통신을 하기 위한 것입니다. 같은 local machine안에서 사용하는 기법이므로 서로 다른 노드(컴퓨터)간의 커뮤니케이션을 하기위한 용도는 아닙니다. 그런데 TCP/IP를 이용해서도 같은 노드 안에서 프로세스간 통신을 할 수 있습니다. 바로 loopback address(127.0.0.1)를 사용하면 가능합니다. 그렇다면 Unix Domain Socket과 TCP/IP 간의 차이는 무엇일까요? 우선 TCP를 사용하면 loopback address라도 네트워크 통신을 하는데 필요한 여러 overhead가 발생합니다. osi 7 layer에 따라 각각의 layer에서 패킷헤더를 만들고.. 2021. 4. 24.
golang network bytes함수를 이용한 marshal/unmarshal 이번 글에서는 golang의 기본 모듈인 bytes를 활용하여 어떻게 marshal/unmarshal을 하는지 알아보겠습니다. hello world라는 문자열을 marshaling할건데 hello와 world 사이에 byte 숫자 0을 집어넣을 것입니다. 그리고 파싱할 때는 0을 구분자로 사용하여 구분자까지만 데이터를 받아오는 예제를 만들어보겠습니다. (즉, 파싱을 완료하면 world는 볼 수 없겠지요.) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 package main import ( "bytes" "fmt" ) func main() { b := new(bytes.Buffer) b.WriteString("hello") b.WriteByte(0) b.WriteString("world") .. 2021. 4. 18.