쉽고 빠르게 끝내는 GO언어 프로그래밍 핵심 기초 입문 과정

쉽고 빠르게 끝내는 GO언어 프로그래밍 핵심 기초 입문 과정

(15개의 수강평)

322명의 수강생
44,000원
지식공유자 · 좋은사람
63회 수업· 총 24시간 46분수업
평생 무제한 시청
수료증 발급 강의
수강 난이도 입문, 초급
장종철 프로필

작수가 뭐에요 장종철 11일 전

rjkeiq;ieuvipqeiriqirueiwupvuicmxipxriuivuiururopqxmiuevuurqwpciuwvpuicuiuqiuwieurvueiucviuwvucuuvcuruvuucuvceeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeewrercewcvv 

1
Yoonjoo Lee 프로필

Go의 IPC는 어떻게 접근해야 할까요? Yoonjoo Lee 2달 전

강의에 나온 채널등은 대부분 Internal thread 즉 한 process 안의 다양한 thread들에게는 적용이 가능한데,  process간에 적용을 하기 위해서는 어떻게 접근해야 한느지 궁금 합니다.

Go에서 멀티 쓰레드 말고 멀티 프로세스개념을 다루는 부분을 추가해 주실 순 없을까요?

1
Yoonjoo Lee 프로필

atomic.LoadInt64(&cnt) 결과가 이상 합니다. Yoonjoo Lee 2달 전

package main

import (

"fmt"

"runtime"

"sync"

"sync/atomic" //

_ "time"

)

func init() {

fmt.Println("Go Sync Advance study 4")

}

func onceTest() {

fmt.Println("onceTest !!")

}

func main() {

// 고루틴 동기화 고급

// 원자성 사용 -> 기능적으로 분할 불가능한 완전 보증된 일려의 조작

// 모든 조작이 완료 될 때까지 다른 프로세스 개입 불가

// sync/atomic 에서 원자적 연산자 제공

// https:// golang.org/pfg/sync/atomic 에서 계열 확인 가능

runtime.GOMAXPROCS(runtime.NumCPU())

var cnt int64 = 0

wg := sync.WaitGroup{}

maxN := 5000

for i := 0; i < maxN; i++ {

wg.Add(1)

go func(n int) {

//cnt++

atomic.AddInt64(&cnt, 1)

wg.Done()

}(i)

}

maxN = 2000

for i := 0; i < maxN; i++ {

wg.Add(1)

go func(n int) {

//cnt--

atomic.AddInt64(&cnt, -1)

wg.Done()

}(i)

}

var finalCnt int64 = 0

finalCnt = atomic.LoadInt64(&cnt)

wg.Wait()

fmt.Println("finalCnt : ", finalCnt)

fmt.Println("cnt : ", cnt)

}

상기 코드를 실행하면

cnt 는 3000 항상 나오는데

finalCnt  는 3005같은 다른 값이 나오는데, 혹시 놓친 부분이 있을까요?

1
Yoonjoo Lee 프로필

Panic이 발생하지 않는 이유가 있을까요? Yoonjoo Lee 2달 전

channel 을 close 

close(ch) 후

ok4 가 false라고는 나오지만,

log에 panic이 발생을 하는데,  강사님 화면에는 panic이 없어서 궁금합니다.

1
최규선 프로필

godoc을 입력하면... 명령어가 아니라고 뜹니다.. 최규선 4달 전

정확히는

'godoc'은 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다.

라고 뜹니다.

2
厳慶一 프로필

구조체 출력 관련 질문 厳慶一 4달 전

수고하십니다. 강의 반복해서 잘 듣고 있습니다.

질문드리니 바쁘시겠지만 답변 부탁 드립니다.

예제 1에서

kim, lee, park, cho의 구조체를 출력하면 &가 안붙고 출력이 되는데 구조체를 출력하면 &가 붙어서 출력이 되는게 아닌가요?

이상입니다.

1
厳慶一 프로필

용량 관련 질문 드립니다. 厳慶一 4달 전

[3]번째 용량이 6이 되는게 궁금합니다.

지정한 용량이 넘을때는 2배가 되는데 계산대로 라면 

2의 2배인 4가 넘으니깐 4의 두배인 8이 되지 않나요? 

답변 부탁 드립니다.

var s []int
printSlice(s)
fmt.Println()

s = append(s, 0) <- 1번
printSlice(s)
fmt.Println()

s = append(s, 1) <- 2번
printSlice(s)
fmt.Println()

s = append(s, 2, 3, 4) <- 3번
printSlice(s)
fmt.Println()


func printSlice(s []int) {
fmt.Printf("mem=%p len=%d cap=%d %v", s, len(s), cap(s), s)
}


mem=0x0 len=0 cap=0 []
mem=0xc000090000 len=1 cap=1 [0]
mem=0xc00008c020 len=2 cap=2 [0 1]
mem=0xc0000a0000 len=5 cap=6 [0 1 2 3 4]

3
제정민 프로필

왜 matchnode함수에서는 ParseMainNodes함수와 생김새가 다른가요? 제정민 4달 전

func parseMainNodes(n *html.Node) bool {
if n.DataAtom == atom.A && n.Parent != nil {
return scrape.Attr(n.Parent, "class") == "row"
}
return false
}

func matchNode(n *html.Node) bool {
return n.DataAtom == atom.A && scrape.Attr(n, "class") == "deco"
}
왜 parseMainNodes 함수를
matchNode처럼 한 문장으로 표현하면 에러가 나고
왜 matchNode 함수를
parseMainNodes처럼 if문을 사용하면 에러가 나는지요 ㅠㅠ
하루종일 삽질하다가 matchNode가 문제인 걸 찾았는데 ,
왜 matchNode를 parseMainNodes처럼 구현하면 안되는지요?

1
厳慶一 프로필

[재 질문2]구조체가 참조형 인가요 厳慶一 4달 전

구조체가 참조형이라는게 알려주신 소스를 보고는 파악이 안됩니다.

슬라이스나 맵을 함수에 인자로 전달 하면 무조건 메모리 주소가 전달 되니 참조형 이라는 건 알겠는데 구조체는 변수나 배열처럼 값으로도 참조형으로도 전달 할 수 있으니 참조형도 가능하고 데이타 형도 가능하다고 해야 하지 않나 생각을 합니다만 제가 잘 못 이해하고 있는건가요

바쁘신 중에 죄송합니다만 답변 부탁 드립니다.

1
厳慶一 프로필

[재 질문]구조체가 참조형 인가요 厳慶一 4달 전

알려주신 링크를 봐도 제가 잘 이해를 못하는건지 구조체 자체가 참조형이라는 정확한 설명이 없는거 같습니다만..혹시 mutable개체 라는게 참조형이라는 건지요? 강의 중에 구조체를 %v로 출력 해 보면 &가 붙어서 출력이 되기에 구조체 라고 들었습니다만...잘 이해가 안되는데 강사님의 생각을 알려주시면 감사하겠습니다.

1
厳慶一 프로필

프린트 문에관련 질문입니다. 厳慶一 4달 전

안녕하세요 강의 반복해서 잘 듣고 있습니다.
아래의 주석 처리한 부분의 질문입니다.
그냥 포인트 변수가 역 참조 하는 값을 프린트 문이 아닌 곳에서는 가능한데
프린트 문 내에 쓰면 에러가 발생하는 이유가 잘 이해가 안됩니다.
알기 쉽게 설명좀 부탁 드리겠습니다.

func
main() {
i := 7
p := &i

*p++
fmt.Println(*p)
// fmt.Println(*p++) 에러
}

결과
8

1
厳慶一 프로필

슬라이스 선언시 초기값 관련 厳慶一 4달 전


var
slice1 []int
slice2 := []int{}

fmt.Println(slice1)
fmt.Println(slice2)

if slice1 == nil {
fmt.Println("slice1 is nil")
}

if slice2 == nil {
fmt.Println("slice2 is nil")
}

실행결과
[] [] slice1 is nil

질문
slice2는 널이 아닌 무슨 값이 들어가 있는건지요?
답변 부탁 드리겠습니다.

1
제정민 프로필

recover() 은 실행되는 순간 에러 하나를 꺼내고 에러를 기록에서 지우나요? 제정민 4달 전

if s := recover(); s != nil {

fmt.Println("Error message : ", s)

}

은 Error message : runtime error : index out of range [3] with length 3

이 출력되지만

if recover() != nil {

fmt.Println("Error message : ", recover())

}

은 Error message : <nil> 이 출력되네요

recover() 은 실행되는 순간 에러 하나를 꺼내고 에러를 기록에서 지우나요?

그래서 s := recover() 을 하면 되지만 

recover() != nil 일 시 recover() 이라고 하면 안되는건가요?

아니라면 왜 안 되는 것인지 궁금합니다.

1
제정민 프로필

go언어는 컴파일 언어임에도 동적 언어의 특성을 가지고 있는건가요? 제정민 4달 전

go는 컴파일 언어로 기계어 번역 후 실행하지만 동적 언어의 특성도 가지고 있다고 알고 있는데, 맞나요?

맞다면 어떻게 타입을 표시하지 않는 짧은 선언을 컴파일할 때 알컴퓨터가 알아먹는걸까요?

1
제정민 프로필

항상 코딩할 때 시스템 전체 cpu를 사용하는 것이 좋나요? 제정민 4달 전

궁금합니다.

1
지식공유자 되기
많은 사람들에게 배움의 기회를 주고,
경제적 보상을 받아보세요.
지식공유참여
기업 교육을 위한 인프런
“인프런 비즈니스” 를 통해 모든 팀원이 인프런의 강의들을
자유롭게 학습하는 환경을 제공하세요.
인프런 비즈니스