소개
- 쉬운 강의를 제공하려고 합니다.
- 효율적이고 재치있는 방식을 좋아합니다.
- 간단하게 해결할 문제를 빙빙 돌아가는 걸 좋아하지 않습니다.
게시글
질문&답변
2022.04.14
에러 메시지 대응 방법
안녕하세요 hen Cho 수강자님. 질문에 대한 답변 드리겠습니다. 먼저, go mod를 사용하시다가 no required module provides package라는 에러를 만나신 상황이군요! 이 경우, 프로젝트 루트 디렉토리에 go mod 파일이 없을 가능성도 있는데요 터미널에서 ls 를 입력하셔서, 원하는 test.go 파일이 현재 디렉토리에 있는지 확인해야합니다. 예를 들자면 바탕화면에 A라는 폴더에 test.go 가 있는데, 모듈파일은 바탕화면에 있어서 test.go가 찾지 못하는 상황일 수 있습니다! 혹은 다양한 다른 상황들이 있을 수 있으니, 코드를 첨부해주시면 확인해보도록 하겠습니다. go get으로 사용해도 문제는 없습니다. 다만 go mod로 사용하는 이유는 파일으로 관리하기 위해서에요! 파일으로 관리하면, 다양한 이점이 있는데 지금 컴퓨터 말고 다른 컴퓨터에서도 파일만 보고 바로 실행시킬 수 있는 장점이 있습니다. 질문에 답변이 안되셨다면 언제든 다시 질문주세요! 감사합니다.
- 0
- 2
- 162
질문&답변
2022.04.11
채널과 배열은 전혀 다른 건가요?
안녕하세요 hen Cho 수강자님. 질문에 대한 답변 드리겠습니다. 먼저, 채널과 배열의 차이에 대해서 질문주셨는데요. 이해하신 내용도 틀린 내용은 아닙니다. 오히려 정확히 핵심을 파악하신 듯 합니다. Go 채널은 Go 루틴간의 통신을 위해 만들어진 구현입니다 채널의 작동원리에 대해 간단히 설명드리며, 배열과의 차이에 대해 말씀드리도록 하겠습니다. ch := make(chan int, 3) 이 make 함수는 프로그래머가 편리하게 사용할 수 있도록 미리 초기화 과정을 진행해줍니다. make 함수는 슬라이스, 맵, 채널에 사용할 수 있는데 배열을 만들 때와는 다르게, 채널을 make할 경우 내부 저장소(heap)에 hchan이라는 구조체를 만들고 이 주소를 반환해줍니다. 그러면 ch에는 hchan의 주소가 저장되게 되고 나중에라도 언제든 찾아갈 수 있습니다. hchan이라는 구조체는 어떻게 구성이 되어있느냐 하면, '큐'라는 자료구조로 이뤄진 3개의 int 자료형이 들어갈 수 있는 공간이 할당됩니다. 그림으로 간단히 표현해보자면 아래와 같습니다. (사진) 이렇게 공간이 할당이 되고 3개의 공간은 "원형 큐"로 버퍼 구현이 됩니다. 이외에도 hchan 부분에 'mutex' 라고 다른 Go 루틴으로부터 접근을 하거나 못하게 하는 제어를 해주는 녀석이나, 현재 큐에서 고로, Go루틴이 발생시킬 수 있는 다양한 상황을 효율적으로 컨트롤 할 수 있는 기능들로 만들어져 있는 것이 채널입니다. 유튜브에 유용한 영상이 있어 공유드립니다. (https://youtu.be/KBZlN0izeiY) 조금 깊은 내용이라 혹시나 어려우셨다면, 다시 질문주시면 언제든 답변 드리겠습니다! 감사합니다.
- 1
- 2
- 228
질문&답변
2021.08.17
어떻게 실행된것인지...
이어서 답변 드리겠습니다! 제가 이해한 부분으로는 질문자님께서, main 함수를 제외하고 여러개의 함수가 동시에 동작하는 원리가 궁금하신 것으로 파악했는데요! 혹은, main 함수 내에서 여러개의 함수가 동시에 동작하는 원리일수도 있겠다고 생각했습니다. 두가지 상황 모두에 대해 답변드리겠습니다! 먼저 첫번째 상황은, main 함수를 제외하면 몇 개의 함수라도 미리 만들어 둘 수 있습니다. 마치 집 안에서 "나"라는 주체가 main 함수인 것이고, 나머지 저희가 커스텀하게 만든 함수들이 여러 가전제품으로 비유할 수 있는데요. 제가 여러개의 가전제품을 사용할 수 있듯이, main이라는 함수는 각각의 함수의 위치를 찾아가 실행시킬 수 있습니다. 또, 두번째 상황은 실행시키는 부분이 main이라는 함수일 뿐입니다. 제가 청소기를 먼저 사용하고 그 다음에 세탁기를 사용할 수 있듯이, main이라는 함수도 마찬가지로 동작할 수 있습니다! 혹시 위와같은 궁금증이 아니라면 추가 질문 주시면 답변 드리겠습니다 :) 감사합니다
- 1
- 2
- 157
질문&답변
2021.08.17
질문 여러가지
안녕하세요 상혁 수강자님! 질문에 대한 답변 드리겠습니다! 저는 (a, b int)라는 input값에 자신이 작성한 함수를 알아볼 수 있도록 add라는 이름을 설정해 준 것으로 이해했습니다. => 정확하게 이해하셨습니다! 개인의 취향이라는 말은 add라는 단어 말고 "더하다"라는 단어를 써도 된다는 소리인가요?? => 이 부분도 맞습니다. 제가 의도한 개인의 취향이라는 단어는 plus라는 단어든 minus라는 단어든 본인이 알아볼 수 있도록, 혹은 협업하여 코딩하는 누군가가 알아볼 수 있도록 함수의 이름을 작성할 수 있다는 뜻이었습니다! 그리고 결국 저기 나온 func add(a, b int) int { return a + b } 코드는 단순히 a + b 라는 내용의 함수인건가요? => 넵 맞습니다 :) a와 b 두가지를 더하여 반환해주는 함수인거죠!
- 1
- 1
- 236
질문&답변
2021.08.12
1:16 구간에서 질문
안녕하세요 수강자님! 두가지 질문에 대한 답변 드리겠습니다 1. 변수의 위치 변수의 위치가 두 가지가 다른 것은, 다양한 경우를 보여드리기 위함입니다. 만약, for i := 0; i 만약, a := 1 for a fmt.Println(a)} 이렇게 선언을 하게 된다면, 변수는 반복문 바깥에 존재하게 되고 변수를 다르게 활용할 수 있는 여지가 있습니다 a라는 변수를 반복문 뿐만 아니라 조건문 등 다른 경우에도 쓸 수 있습니다. 조건문을 예로 들자면 a := 1 if a == 2 { for a fmt.Println(a) } } 이렇게도 쓸 수 있는 것이지요! 변수를 선언하지 않고 반복문을 사용할 경우 다양한 케이스를 만들어낼 수 있습니다. 2. 왜 무한적으로 1이 생성되는 가 이에 대한 답변은 이해하신바와 같이 간단합니다. 증감식이 없기 때문에 a의 값이 항상 언제나 2보다 작습니다. a라는 변수는 1로 선언을 해줬고, 어떠한 변화도 주지 않았기 때문에 코드가 끝날때까지 계속 1로 존재합니다. 하지만 반복문의 조건은 "a가 2보다 작을 경우 반복문 안의 내용을 실행하라" 라고 말하고 있기 때문에 항상 조건을 만족하게게 되어서 무한히 a라는 변수를 출력해주는 것이죠! 이해가 되셨으면 좋겠습니다 :) 궁금한 점이 있으시다면 언제든 추가질문 부탁드립니다!
- 1
- 1
- 155