44,000원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨쉽고 빠르게 끝내는 GO언어 프로그래밍 핵심 기초 입문 과정
package is not in std 오류
강사님 안녕하세요. 해당 강의 실습 중 오류가 발생하고 궁금한 부분이 있어 글 남깁니다. 작성하신 코드 함수부분만 살짝 바꾸고 package, import 구문은 동일한 상태에서 go run src/section4/test.go 명령어를 실행시켰을 때 아래와 같은 오류가 발생했습니다. src\section4\test.go:5:2: package section4/lib is not in std (C:\Program Files\Go\src\section4\lib) src\section4\test.go:6:2: package section4/lib2 is not in std (C:\Program Files\Go\src\section4\lib2)gopath 문제인가 싶어 확인해보았는데 문제가 없는 상태입니다. 결국, 구글링을 통해 해결법을 찾았는데 section4 디렉토리에서 go mod init 명령어를 통해 go.mod 파일을 생성하니까 문제없이 실행되더라구요. 강사님 영상에서는 mod 관련 명령어없이 실행이 잘 되는 것으로 보이는데 제 환경에서는 왜 이런일이 발생하는지 궁금합니다 ㅠㅠ 답변해주시면 정말 감사드리겠습니다.
- 미해결쉽고 빠르게 끝내는 GO언어 프로그래밍 핵심 기초 입문 과정
맵 예제 코드가 바이러스 검사에 걸려요
if _, ok := map12["kiwi"]; !ok { fmt.Println("ex7 : kiwi is not exist!") }visual studio code 1.86.2에디션 Windows 10 Pro버전 22H2설치 날짜 2023-10-09OS 빌드 19045.4046경험 Windows Feature Experience Pack 1000.19053.1000.0 이 버전에서 Map 기초 수업의 예제 코드가 바이러스 체크에 걸립니다..!굉장히 흥미로운 현상인데, 같은 현상을 겪으시는 분이 있으신가요?왜 그런 것일까요? 최대한 문제의 소스코드만 발라내보려고 했는데, 코드가 조금 덜어지면 디펜더에 안걸리네요... 신기하네요... 메모리 침범이라도 되나...// 자료형 맵 package main import "fmt" func main() { // 맵 (Map) // 해시테이블, 딕셔너리(파이썬) // Key-Value로 자료 저장 // 레퍼런스 타입 (참조값 전달) // 비교 연산자 사용 불가능 (참조 타입이므로) // 참조 타입으로는 Key에 사용 불가. Value로는 모든 타입 가능 // make 함수 및 축약 (리터럴) 로 초기화 가능 // 순서 없음 // 예제 1 var map1 map[string]int = make(map[string]int) // 정석 var map2 = make(map[string]int) // 자료형 생략 map3 := make(map[string]int) // 리터럴형 fmt.Println("ex1 : ", map1) fmt.Println("ex1 : ", map2) fmt.Println("ex1 : ", map3) fmt.Println() // 예제 2 map4 := map[string]int{} // Json 형태 map4["apple"] = 25 map4["banana"] = 40 map4["orange"] = 33 map5 := map[string]int{ "apple": 15, "banana": 40, "orange": 23, } map6 := make(map[string]int, 10) map6["apple"] = 25 map6["banana"] = 40 map6["orange"] = 33 fmt.Println("ex2 : ", map4) fmt.Println("ex2 : ", map5) fmt.Println("ex2 : ", map6) fmt.Println("ex2 : ", map6["orange"]) fmt.Println("ex2 : ", map6["apple"]) // 예제 3 맵 조회 및 순회 (Iterator) map11 := map[string]string{ "daum": "http://daum.net", "naver": "http://naver.com", "google": "http://google.com", } fmt.Println("ex3 : ", map11["google"]) fmt.Println("ex3 : ", map11["daum"]) fmt.Println() // 예제 4 순서 없으므로 랜덤 for k, v := range map11 { fmt.Println("ex4 : ", k, v) } for k, v := range map11 { // 실행 중에도 순서 보장 X fmt.Println("ex4 : ", k, v) } for _, v := range map11 { // 스킵 가능 fmt.Println("ex4 : ", v) } fmt.Println() // 예제 5 맵 값 변경 및 삭제 fmt.Println("ex5 : ", map11) map11["home"] = "localhost" // 없을 때 추가 fmt.Println("ex5 : ", map11) map11["home"] = "http://test.com" // 있을 때 수정 fmt.Println("ex5 : ", map11) delete(map11, "home") // 삭제 fmt.Println("ex5 : ", map11) // 예제 6 맵 조회할 경우의 주의 및 팁 map12 := map[string]int{ "apple": 15, "banana": 115, "orange": 1115, "lemon": 0, } value1 := map12["lemon"] value2 := map12["kiwi"] // 존재 X. 변수형 기본값 int 0, string "", float 0.0 value3, ok1 := map12["kiwi"] // 키값 존재를 확인하기 위해 true, false value4, ok2 := map12["lemon"] // 두번째 리턴값으로 키값 존재 확인 fmt.Println("ex6 : ", value1) fmt.Println("ex6 : ", value2) fmt.Println("ex6 : ", value3, ok1) fmt.Println("ex6 : ", value4, ok2) // 예제 7 if value, ok := map12["kiwi"]; ok { fmt.Println("ex7 : ", value) } else { fmt.Println("ex7 : kiwi is not exist!") } if value, ok := map12["banana"]; ok { fmt.Println("ex7 : ", value) } else { fmt.Println("ex7 : banana is not exist!") } if _, ok := map12["kiwi"]; !ok { // _ 사용 가능, 키값 없을 때 예외 처리할 때 많이 사용 fmt.Println("ex7 : kiwi is not exist!") } // ??? 윈도우 디펜더에서 바이러스 있어보인다고 막네요 ??? }
- 미해결쉽고 빠르게 끝내는 GO언어 프로그래밍 핵심 기초 입문 과정
for 반복문에서 break와 continue 차이점
for 반복문에서 break와 continue 차이점에 대해서 자세히 설명 부탁드릴게요 ㅠ
- 미해결쉽고 빠르게 끝내는 GO언어 프로그래밍 핵심 기초 입문 과정
후치연산 관련 질문입니다.
for i, j := 0, 0; i <= 10; i++, j += 10 { fmt.Println("ex4 : ", i, j) } 해당 부분에서 후치연산이기때문에 에러가 발생한다고 하셨는데, 자세한 설명 부탁드릴게요 ㅠㅠㅠ
- 미해결쉽고 빠르게 끝내는 GO언어 프로그래밍 핵심 기초 입문 과정
package관리에 질문이 있습니다.
golang package 버전 관리 및 local package 관리 관련되서 질문이 있습니다.go mod 정확하게 사용법을 잘 모르겠 더 라구요go work를 설정하면 go path를 건들지 않고 locoal package 관리를 쉽게 할 수 있다고 하는데 관련된 내용 예제 같은 것 추천해주실 수 있을까요?
- 미해결쉽고 빠르게 끝내는 GO언어 프로그래밍 핵심 기초 입문 과정
go channel 에제에서 질문이 있습니다.
gochannel_ex3.go에서채널을 반환 받을 때 무조건 close를 써야되는 것은 아닌것으로 보입니다.하지만 다른 함수에 보내기 위해서는 close된 상태로만 채널을 보낼 수 있나요?
- 미해결쉽고 빠르게 끝내는 GO언어 프로그래밍 핵심 기초 입문 과정
golang 질문
go env set GOBIN=C:\go_study\binset GOROOT=C:\Program Files\Goset GOPATH=C:\go_study PS C:\go_study\src\section1> go run maincannot find package "main" in any of: C:\Program Files\Go\src\main (from $GOROOT) C:\go_study\src\main (from $GOPATH) 관련된 에러가 나고 있습니다.이유를 잘모르겠습니다. PS C:\go_study\src\section1> go mod init maingo: creating new go.mod: module maingo: to add module requirements and sums: go mod tidyPS C:\go_study\src\section1> go mod tidyPS C:\go_study\src\section1> go run mainhelloworld.go:1:1: expected 'package', found pakcage visual studio일 경우에는 어떻게 해결하나요?
- 미해결쉽고 빠르게 끝내는 GO언어 프로그래밍 핵심 기초 입문 과정
재귀 함수 관련하여 질문이 있습니다.
func fact(n int) int { if n == 0 { return 1 // 함수 종료 } return n * fact(n-1) } return 값을 0,1 값을 줘서 출력을 해봤는데 0 을 줄 때는 출력이 0 나오고 1 을 줄 때는 120 나오던데 return 값을 정확하게 이해가 잘 안됩니다 ....
- 미해결쉽고 빠르게 끝내는 GO언어 프로그래밍 핵심 기초 입문 과정
atom 서비스 종료 관련
안녕하세요, 최근에 강의를 구입해서 듣고 있는 수강생입니다. 지금 동영상을 보면서 공부하는 도중에 atom 서비스 부분에 막혀 진도를 못나가고 있는 상태입니다. 인터넷에 찾아보니 아톰서비스는 작년에 종료되었다고 하는데 추후 다른 서비스를 통한 개발 환경 강의 업데이트 예정인가요? 예정이라면 언제쯤 업로드 가능한지 궁금합니다.
- 미해결쉽고 빠르게 끝내는 GO언어 프로그래밍 핵심 기초 입문 과정
vscode 환경설정 업데이트 부탁드립니다
아톰 서비스 종료로 인해 vscode를 사용해야하는데vscode로 환경 설정할 수 있는 영상은 없을까요..
- 미해결쉽고 빠르게 끝내는 GO언어 프로그래밍 핵심 기초 입문 과정
waitGroup.Done을 지연 시키는 방식
안녕하세요. 강사님~! 여러 개념을 쉽게 설명해주셔서 재밌게 듣고 있습니다. ^^코드를 찾아보다 다음과 같은 케이스를 보았는데요. 저 방식을 제대로 해석한 것인지 질문드립니다.func main() { waitGroup := sync.WaitGroup{} waitGroup.Add(1) defer waitGroup.Done() // Goroutine 처리 waitGroup.Wait() }defer는 해당 함수가 비정상 종료 되었을 때도 수행한다.내부 Goroutine에서 Done을 알리지 못했을 때도 Done 호출을 보장하기 때문에 자원 회수를 할 수 있다.
- 미해결쉽고 빠르게 끝내는 GO언어 프로그래밍 핵심 기초 입문 과정
첫 번째 예제 질문있습니다.
func receiveOnly(c <-chan int) { for i := range c { fmt.Println("received : ", i) } fmt.Println(<-c) }저번 강의에서 range 키워드로 채널 종료 전까지 채널의 모든 데이터를 수신할 때까지 기다린다고 말씀해주셨는데, 한번 더 채널 수신을 하는 이유가 궁금합니다!
- 미해결쉽고 빠르게 끝내는 GO언어 프로그래밍 핵심 기초 입문 과정
2개씩 체크가 되는 이유가 궁금합니다.
go func() { for i := 0; i < 5; i++ { fmt.Println("check : ", i) ch <- true } close(ch) // 5회 채널에 값 전송 후 채널 닫기 }() for i := range ch { // 채널에서 값을 꺼내온다. 닫힐 때 까지 fmt.Println("ex1 : ", i) }코드출력check : 0check : 1ex1 : trueex1 : truecheck : 2check : 3ex1 : trueex1 : truecheck : 4ex1 : true 위 코드가 아래와 같이 출력됩니다. 왜 2개씩 출력이 되는 걸까요?.. 제 생각에는 check가 0부터 하나씩 출력이 되야 할 것 같은데.. ch := make(chan bool, 2) 이렇게 버퍼(?)를 추가해 주면 3개 3을 추가하면 4개씩 늘어나네요.기본이 2개씩 모아서 실행을 하고 추가되는 값 만큼 처리를 한다고 생각하면 될까요?+) 개인적으로 강사님 의견이 궁금한 부분인데요.restAPI를 Java-Spring 대신 Go로 짠다고 했을 때 비동기가 중요한 작업이라고 하면 Go가 더 괜찮은 선택이 될 수 있을까요?
- 미해결쉽고 빠르게 끝내는 GO언어 프로그래밍 핵심 기초 입문 과정
go 표준 코드 컨벤션이 있나요?
안녕하세요.강의를 듣다 보면 함수 네이밍 규칙에도 어떤 부분은 스네이크, 어떤 부분은 카멜케이스로 작성되는데 디렉토리 명 네이밍 규칙이나 .go 파일, 패키지, go.mod에 있는 모듈 네이밍 규칙 등 현업에서 사용할 만한 코드 컨벤션 정리 글 중 강사님이 추천하시는 참고할 만한 글이 있을까요?
- 미해결쉽고 빠르게 끝내는 GO언어 프로그래밍 핵심 기초 입문 과정
slice에서 make 궁금한 게 있습니다.
안녕하세요.slice를 make로 사용할 때 var slice5 []int = make([]int, 5, 10)make의 파라미터로 slice형식, 길이, 용량으로 정해줬는데 굳이 왜 두번 막는지 모르겠습니다.예를 들면 slice5[6] = 1 이렇게 초기화 했을 때 길이 5에 막혀서 어차피 초기화가 안 되는데 굳이 10까지 제한을 또 두는 이유를 모르겠네요.길이를 제한하고 이 길이의 최종 길이(용량)?까지 제한해서 활용하는 경우가 어떤 경우가 있을까요?..
- 미해결쉽고 빠르게 끝내는 GO언어 프로그래밍 핵심 기초 입문 과정
import 관리는 어떻게 하나요?
안녕하세요.강의 잘 듣고 있습니다.패키지를 임포트해서 사용하게 되는데 go mod init user-service로 root 디렉토리에 .mod 파일을 만들어 사용하고 있습니다.문제가 root 디렉토리에서 root-controller-user 이런식으로 디렉토리를 추가로 만들고 root에 있는 main.go에서 user 패키지를 사용하기 위해서는 임포트문으로 "user-service/controller/user" 이렇게 적어줘야 하는데 만약 패키지 위치를 root-controller-service-user 이렇게 옮긴다 했을 때 임포트 위치를 모두 찾아가서 각각 바꿔줘야 하나요?지금 예시는 하나의 파일이라 가서 바꿔줄만 한데.. 디렉토리에 많은 .go 파일들이 있고 해당 이 파일들을 여러 곳에서 사용하고 있을 때 디렉토리 자체를 다른 곳으로 옮겨야 한다면 좀 끔찍한 것 같은데 관리하는 방법이 따로 있을까요?
- 미해결쉽고 빠르게 끝내는 GO언어 프로그래밍 핵심 기초 입문 과정
개발환경설정 질문드립니다.
안녕하세요. 강의가 시간이 개발환경이 현재랑 좀 맞지 않은 것 같습니다. 현재는 아톰이 지원이 안되는 것 같아서, vscode에서 진행을 했는데, GO환경변수 설정이랑 src, bin, pkg 이 세 폴더를 만들지 않아도 상관없는게 맞을까요? (그냥 go, git, vscode 다운로드 후, 환경변수 설정 없이 vscode에서 go 익스텐션 설치 후, 아무 폴더에서 go 파일 만들고 실행)
- 미해결쉽고 빠르게 끝내는 GO언어 프로그래밍 핵심 기초 입문 과정
이것도 closure인가요?
안녕하세요 선생님. go에서 closure를 처음 접하였고 아직 모르는 부분이 있어 이렇게 질문드리게 되었씁니다. 익명함수로 외부에 있는 변수에 접근하는게 가능한 이유는 go가 closure를 지원하기 때문인가요? 밑의 defer를 예로하면 2번은 closure로 s 에 접근하고 있고 3번은 파라메타로 접근이라고 이해하면 될까요? package main import ( "errors" "fmt" ) type stmt struct {} func (s *stmt) close() error{ return errors.New("error occuerd!") } func main() { s := stmt{} // 1번 defer s.close() // 2번 defer func() { err := s.close() if err != nil { fmt.Println(err) } }() // 3번 defer func(s stmt) { err := s.close() if err != nil { fmt.Println(err) } }(s) }
- 미해결쉽고 빠르게 끝내는 GO언어 프로그래밍 핵심 기초 입문 과정
짧은 선언으로 변수 여러개를 만들때
a, b := 1, 2 a2, b := 3, 4 b변수 중복선언 에러가 날것 같은데, b변수에 4가 대입되는 이유는 무었인가요?
- 미해결쉽고 빠르게 끝내는 GO언어 프로그래밍 핵심 기초 입문 과정
굳이 고루틴이 필요없는거 같은데 고루틴으로 실행하는 이유가 있을까요?
안녕하세요. 오픈소스를 보면 `sync.WaitGroup`의 wait를 고루틴으로 대기하는 코드가 많은데 굳이 이렇게 하는 이유가 있는걸까요? go func() { wg.Wait() }()