분류 전체보기 38

Golang (Go언어) 채널과 컨텍스트(Channel & Context)

Tucker의 Go 언어 프로그래밍 책과 유튜브를 통해 학습 중입니다. 채널(Channel)- 고루틴끼리 메시지를 전달할 수 있는 메시지 큐(FIFO).- Thread Safe Queue라고도 하며, 멀티스레드 환경에서 Lcok 없이 사용할 수 있음.- 메시지 큐에 메시지들은 차례대로 쌓이게 되고 메시지를 읽을 때 맨 처음 온 메시지부터 차례대로 읽게됨. * 채널 인스턴스 생성- 채널을 사용하기 위해서는 먼저 채널 인스턴스를 만들어야 함.var message chan string = make(chan string) - 슬라이스, 맵 등과 같이 make() 함수로 만들 수 있고, 채널 타입은 채널(Channel)을 의미하는 Chan과 메시지 타입을 합쳐서 표현- chan string은 string 타입 메..

Language/Golang 2024.12.11

Golang (Go언어) Go루틴

Tucker의 Go 언어 프로그래밍 책과 유튜브를 통해 학습 중입니다. 스레드(Thread)- 프로세스 안의 세부 작업 단위- 프로세스는 스레드를 한 개 이상 가지고 있음.- 스레드가 하나면 싱글 스레드 프로세스, 여럿이면 멀티 스레드 프로세스라고 함. → 초기 컴퓨터에서 사용한 천공카드 다발을 스레드라고 부를 수 있고, 명령어가 적힌 종이 다발을 CPU가 한 줄씩 읽어서 수행하는게 컴퓨터     CPU 코어는 한 번에 하나의 명령어 다발 = 스레드를 수행할 수 있음.- 원래 CPU 코어는 한 번에 한 명령어 밖에 수행할 수 없음- 스레드가 CPU 코어를 빠르게 교대로 점유하면 동시에 모든 스레드가 실행되는 것 처럼 보임. * 컨텍스트 스위칭(Context Switching) 비용- CPU 코어가 여러 ..

Language/Golang 2024.12.07

Golang (Go언어) 에러 핸들링

Tucker의 Go 언어 프로그래밍 책과 유튜브를 통해 학습 중입니다. 에러 핸들링(Error handling)- 프로그램의 에러를 처리하는 방법을 의미- 에러는 프로그래머의 실수로 발생하지만, 때로는 외부적 요인(메모리/디스크 부족, 네트워크 단절 등)에 의해 발생되기도 함.- 에러가 발생하면 경우에 따라 프로그램을 종료하거나 적절한 방식으로 처리하여 프로그램을 계속 실행시킬 수 있음.  에러 반환- 에러를 처리하는 가장 기본 방식은 에러를 반환하고 알맞게 처리하는 방식ex) ReadFile() 함수로 파일을 읽을 때 해당하는 파일이 없어 에러가 발생package mainimport ( "bufio" "fmt" "os")func ReadFile(filename string) (string, error)..

Language/Golang 2024.12.05

Golang (Go언어) 자료 구조(Data Structure) 2/2

Tucker의 Go 언어 프로그래밍 책과 유튜브를 통해 학습 중입니다.맵(Map)- 키와 값 형태로 데이터를 저장하는 자료구조- 언어에따라 딕셔너리(Dictionary), 해시 테이블(Hash table), 해시 맵(Hash map)등으로 부름. - 맵은 키와 값의 쌍으로 데이터를 저장하고, 키를 사용해 접근하여 값을 저장하거나 변경할 수 있음.- 맵은 Go언어에서 패키지가 아닌, 기본 내장 타입이라 다른 패키지를 가져오지 않아도 사용할 수 있음.map[key]value → map[] 안에 사용한 string은 키 타입이고, 맨 뒤에 있는 string은 값 타입임.package mainimport "fmt"func main() { m := make(map[string]string) // 맵 생성 m["..

Language/Golang 2024.12.03

Golang (Go언어) 자료 구조(Data Structure) 1/2

Tucker의 Go 언어 프로그래밍 책과 유튜브를 통해 학습 중입니다. 자료 구조(Data Structure)- 자료들을 어떤 형태로 저장할 것인가를 나타냄.- 크게 배열, 리스트, 트리, 맵 등이 있음. 리스트(List)- 기본 자료 구조로서 여러 데이터를 보관할 수 있음- 베열과 함께 가장 기본적인 선형 자료구조 중 하나(하나의 데이터에 다음 데이터가 연결되는 것, 1:1 구조)   * 비선형 구조: 하나의 데이터에 2-3개의 데이터가 연결되는 것, ex) 트리 구조=폴더- 배열과 가장 큰 차이점은 배열은 연속된 메모리에 데이터를 저장하지만, 리스트는 불연속된 메모리에 데이터를 저장함.- 리스트는 데이터를 담고 있는 요소들을 포인터로 연결한 자료 구조- 요소들이 포인터로 연결됐다고 해서 링크드 리스트..

Language/Golang 2024.12.02

Golang (Go언어) 함수고급편

Tucker의 Go 언어 프로그래밍 책과 유튜브를 통해 학습 중입니다. 가변 인수 함수- fmt패키지의 Println 함수는 인수 개수가 정해져있지 않음.fmt.Println() // 인수가 없을 수도 있고fmt.Println(1) // 인수가 1개일 수도 있고fmt.Println(1, 2, 3, 4, 5, 6, 7, 8, 9) // 인수가 많을 수도 있음. → 위와 같이 함수 인수 개수가 고정적이지 않은 함수를 가변 인수 함수(Variadic function)이라고 함. ... 키워드 사용- ... 키워드를 사용해서 가변 인수를 처리할 수 있음- 인수 타입 앞에 ...를 붙여서 해당 타입 인수를 여러 개 받는 가변 인수임을 표시하면 됨.package mainimport "fmt"func sum..

Language/Golang 2024.11.29

Golang (Go언어) 인터페이스(Interface)

Tucker의 Go 언어 프로그래밍 책과 유튜브를 통해 학습 중입니다. 인터페이스(Interface)- 구체화된 객체(Concrete objecr)가 아닌 추상화된 상호작용으로 관계를 표현 ✓ 인터페이스 선언1) type을 씀2) 인터페이스명을 씀3) 인터페이스 키워드를 씀4) { } 블록 안에 인터페이스에 포함된 메서드 집합을 씀type DuckInterface interface { Fly() Walk(distance int) int} - 인터페이스도 구조체처럼 타입 중 하나이기 때문에 type을 써야 함.   = 변수 선언이 가능하고 변수의 값으로 사용할 수 있음. ✓ 메서드 집합을 쓸 때 주의할 점- 메서드는 반드시 메서드명이 있어야 함.(빈칸 지시자(_) 사용 불가)- 매개변수와 반환이 다르더..

Language/Golang 2024.11.27

Golang (Go언어) 메서드(Method)

Tucker의 Go 언어 프로그래밍 책과 유튜브를 통해 학습 중입니다. 메서드(Method)- 타입에 속한 함수- 메서드 선언하려면 리시버를 func 키워드와 함수 이름 사이에 소괄호로 명시해야 함- 리시버는 모든 패키지 지역 타입이 가능함 (구조체, 별칭 타입 등)func (r Rabbit) info() int { //(r Rabbit) = 리시버, info() = 메서드 명 return r.width * r.height} package mainimport "fmt"type account struct { balance int}func withdrawFunc(a *account, amount int) { // 일반 함수 표현 a.balance -= amount}func (a *account)..

Language/Golang 2024.11.27

Golang (Go언어) 슬라이스(Slice) 2/2

Tucker의 Go 언어 프로그래밍 책과 유튜브를 통해 학습 중입니다. * 흔히 하는 실수package mainimport "fmt"func addNum(slice []int) { slice = append(slice, 4)}func main() { slice := []int{1, 2, 3} addNum(slice) fmt.Println(slice)}// 결과[1 2 3] - slice  := []int{1, 2, 3}을 addNum의 인자를 새로 넣었는데, 이는 main의 slice와 다른 인스턴스임- 호출 될 때 main slice 값으로 Num slice에 type size만큼 복사해서 main과 동일함. (포인터, len, cap 동일)- main slice와 Num slice는 메모리 주소가 다..

Language/Golang 2024.11.20

Golang (Go언어) 슬라이스(Slice) 1/2

Tucker의 Go 언어 프로그래밍 책과 유튜브를 통해 학습 중입니다. ★슬라이스(Slice)★- Go에서 제공하는 동적 배열 타입 → Go에서 제공하는 배열을 가리키는 포인터 타입→ 동적(Dynamic), 프로그램 실행 도중에 결정(실행도중에 바뀔 수 있는 값)    정적(Static), 코드를 기계어로 바꿀 때 결정(실행도중에 절대 바뀌지 않는 값)var slice []int// var  - 타입의 [](가운데) 사이즈를 적지 않고 뒤에 요소 타입을 적음(ex. int, str 등) package mainimport "fmt"func main() { var slice []int if len(slice) == 0 { fmt.Println("slice is empty", slice) } slice[1..

Language/Golang 2024.11.19