type error error 타입은 비정상적인 상태를 나타낸다. Go는 try-catch-finally처럼 예외처리를 할 수 있는 구문이 없다. 대신 error 타입 값으로 에러 상태를 표현하고 처리를 한다. Go 에서는 Error() string 메서드를 가지고 있다면 에러로 사용될 수 있다. 위는 내장 타입이다. type error은 Error() string를 가지고 있다. 내장 인터페이스 타입인 error은 에러 상황을 나타내는 인터페이스 이고, 에러가 없다면 nil 값으로 나타낸다라고 적혀 있다. 위에는 에러 타입의 한 종류이다. PathError은 Error() string 메서드를 가지고 있다. Go에서 함수나 메서드의 마지막 반환 값으로 에러 상태를 리턴하는데, 에러가 발생하지 않았다면 ..
유닉스의 명령어에는 파이프(기호: | )가 있다. 파이프를 사용하여 쉘 명령어를 연결하면, 프로세스의 결과를 다른 프로세스에 전달하는 것이 가능하다. Go의 기본 라이브러리로 io.Pipe()가 제공된다. io.Pipe()는 *PipeReader과 *PipeWriter을 리턴하고 이를 사용하여 유닉스 스타일로 파이프 라인을 생성할 수 있다. *PipeWriter과 *PipeReader은 서로 연결되어 바로 결과가 전달된다. 파이프는 구조화 되지 않는 바이트 스트림이다. 따라서 파이프를 사용하면 데이터의 포맷을 선택하고 직렬화 및 역직렬화를 거쳐야하기 때문에 더 많은 가능성이 발생할 위험이 있다. 채널은 Go의 스트림이기 때문에 포맷이 정해져 있고 직렬화도 손쉽기 때문에 더 단순하다. 아래는 파이프라인을 ..
타임아웃 시간이 오래 걸리는 작업에 select문을 사용하여 타임아웃 기능을 쉽게 구현할 수 있다. time.After은 채널을 리턴한다. 이 채널은 인자로 받은 시간이 지난 뒤 리턴한 채널로 실제 시간을 전달한다. select를 사용하여 done 채널과 timeout 채널 case로 done 채널이 timeout 채널보다 먼저 data를 보내면 제 시간 안에 작업이 완료 된 것, 아니면 시간 초과가 난것이다. 타임아웃이 난 작업을 처리를 해 줘야 한다. 시간 초과가 발생했을 때 아무처리도 안할 수 있지만, 만약 작업이 리소스를 많이 사용한다면 작업을 종료하는 것이 좋다.
Go에는 고루틴과 채널 외에도 sync 패키지를 사용하여 병행 프로그래밍이 가능하다. sync 패키지에는 공유 메모리를 제어하는 뮤텍스(mutex), sync/atomic 패키지에는 원자성을 보장할 수 있는 연산이 있다. sync.Mutex 뮤텍스는 공유 데이터를 보호하기 위해 사용한다. 뮤텍스 구조체는 Lock, Unlock 함수를 제공한다. func (m *Mutex) Lock(): 뮤텍스 잠금 func (m *Mutex) Unlock(): 뮤텍스 잠금 해제 임계 영역(critical section)의 코드를 실행하기 전에는 뮤텍스의 Lock() 메서드로 잠금을 하고, 실행한 후에는 Unlock() 메서드로 잠금을 해제한다. 임계 영역 병렬 컴퓨팅에서 둘 이상의 스레드가 동시에 접근해서는 안 되는 영..
https://sdardew-valley.tistory.com/entry/Go-%EB%B0%B0%EC%97%B4-%EC%8A%AC%EB%9D%BC%EC%9D%B4%EC%8A%A4 [Go] 배열 & 슬라이스 Go는 데이터의 시퀀스를 다루기 위해서 배열과 슬라이스 타입을 사용할 수 있다. 배열: 길이가 고정된 시퀀스 슬라이스: 길이가 가변적인 시퀀스 배열과 슬라이스 비교 배열 슬라이스 길이가 고 sdardew-valley.tistory.com Go의 배열과 슬라이스는 위의 내용을 참고하시면 됩니다! 위의 코드는 정상적으로 실행되는 코드이다. main 함수의 numbers와 multiply의 파라미터 numbers 모두 슬라이스 타입이다. numbers의 모든 값이 factor의 배수만큼 거진 것을 확인할 수..
고루틴과 채널은 병행 처리를 위해서 사용되는 방법이다. 병행 처리 동시에 2개 이상의 작업이 실행되는 것 고루틴 (goroutine) Go 프로그램 안에서 동시에 독립적으로 실행되는 흐름의 단위. 스레드와 비슷한 개념. 고루틴과 스레드의 차이점 킬로바이트 정도의 아주 적은 리소스에서 동작 적은 리소스에서 동작하여 한 프로세스에 수천, 수만 개의 고루틴을 동작시킬 수 있음 정보를 공유하는 방식이 아닌 서로 메시지를 주고 받는 방식으로 동작 Lock으로 공유 메모리를 관리할 필요가 없음 고루틴을 생성하는 방법 go f(x, y) 고루틴에서 f(x, y)가 실행된다. func main() { fmt.Println("main 함수 시작", time.Now()) go long() go short() time.Sl..
다형성 다형성 다양한 타입의 객체가 같은 메시지를 통해 다양한 방식으로 동작하는 것 다른 언어에서는 메서드 오버로딩, 서브타이핑 등으로 다형성을 지원한다. Go에는 서브타이핑, 오버로딩이 없다. 대신 Go에서는 인터페이스를 통하여 다형성을 지원한다. 오버로딩 같은 이름의 함수이지만 매개 변수 등의 signature를 다르게 하여 정의한 것 서브타이핑 상위 타입을 하위 타입으로 대체할 수 있는 것 인터페이스는 메서드 signature의 묶음이다. Go는 이런 메서드에 따른 동작에 따라서 인터페이스와 is-a 관계를 형성한다. is-a 상속 관계이다. "그랜저는 자동차이다"는 is-a 관계이다. 그랜저는 자동차의 속성을 모두 가지고 있다. has-a 소유 관계이다. "자동차는 바퀴를 가지고 있다"는 is-a..
인터페이스 객체의 동작을 표현하는 것 내부 구현이 아닌 동작 방식만을 표현 추상 메커니즘을 제공 매개변수로 사용되면 '값이 무엇을 할 수 있는지'에 집중할 수 있음 덕 타이핑 방식: 변수와 메서드의 집합이 객체의 타입을 결정 인터페이스 정의 type 인터페이스명 interface { 메서드1(매개변수) 반환타입 메서드2(매개변수) 반환타입 } 함수 시그니처가 같은 메서드를 가진 타입은 인터페이스로 사용 가능하다. shaper 인터페이스는 area 메서드를 가지고 있다. decribe는 shaper 인터페이스를 받아 shaper의 area 메서드의 리턴값을 출력한다. main에서는 rect 구조체를 만들고 descirbe 함수를 실행한다. rect 구조체와 sharper 인터페이스는 연결 고리가 없다. r..
구조체 속성을 가진 실제 엔티티를 표현한 것이다 이름과 필드를 사용하여 속성들을 표현할 수 있다. 구조체 정의 type 타입명1 struct { 필드명1 필드타입1 필드명2 필드타입2 ... } type 타입명2 struct { 필드명1-1, 필드명1-2 필드타입1 필드명2 필드타입2 ... } type 타입명3 struct { 필드명1, 필드명2 필드타입 } 내장 데이터 타입과 더불어 인터페이스, 함수 signature, 다른 구조체도 필드로 지정 가능하다. 필드 타입이 동일하면 묶어서 타입명2처럼 타입을 지정할 수 있다. 모든 필드의 타입이 동일하면 타입명3처럼 한 줄로 필드들을 표기할 수 있다. 생성 & 초기화 타입 {초기값} // 1. 구조체 리터럴 &타입 {초깃값} // 2. 구조체 리터럴의 포..
Go는 상태를 표현하는 '타입'과 동작을 표현하는 '메서드'를 분리하여 정의한다. 타입과 메서드의 명확한 연결고리는 없다. 사용자 정의 타입과 메서드 사용자 정의 타입 기본 타입 외의 사용자가 직접 정의한 타입 일반적으로 구조체와 인터페이스를 사용자 정의 타입으로 사용한다 기본 타입이나함수 signature을 사용자 정의 타입으로 사용하기도 한다 메서드 사용자 정의 타입과 함수를 바인딩시키는 방식으로 정의한 것 func (리시버명 리시버타입) 메서드명 (매개변수) (반환값 혹은 반환타입) { ... } 함수를 정의하는 것에 리시버가 추가되었다. 메서드를 호출시 리시버 값이 메서드에 전달되어 메서드에서 리시버 값을 사용할 수 있다. 리시버 (receiver) 타입과 동작을 연결하기 위해서 사용 Item은..
- Total
- Today
- Yesterday
- pm.test
- 코틀린
- postman
- Python
- go 특징
- 코딩테스트
- 주생성자
- Kotlin
- 1차 인터뷰
- pm.expect
- Squash and merge
- github
- python3
- mysql
- Basic Type
- solidity
- string
- postman tests
- 2차 인터뷰
- java
- postman collection
- 확장 함수
- downTo
- graphql
- squash merge
- git
- Kotlin In Action
- 네이버 2022 공채
- hashcode
- DGS Framework
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |