일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- Golang
- 건프라
- go언어
- 벤치마크
- 키보드
- emacs
- Go 언어
- md600alpha
- doom-emacs
- 음각몰드
- 터미널
- 스플릿키보드
- mistel md600 alpha
- mf642cdw
- 바로코
- 고양이책
- 양자역학
- Griffiths
- eslip
- 체리적축저소음
- nil
- driverless
- 패널라인
- 이맥스
- 리플렉션
- Go
- 다이어트
- mopria
- 엘리스배열
- Reflection
- Today
- Total
목록Go (4)
Meandering Trajectory
panic Go에서 에러 처리는 반환값을 통해 이루어지는 것이 일반적이다. 하지만 프로그램 수행을 더 이상 진행할 수 없을 정도의 심각한 에러가 발생한 경우 Go 런타임은 panic을 발생시킨다. 예를 들어 아래 프로그램은 고의로 "index out of range" 예외를 일으키고 있는데package main import ( "fmt" ) func fn() { a := []int{1,2,3}; fmt.Println(a[3]); } func main() { fn() } 이때 Go 프로그램은 panic을 발생시키고 그 결과는 다음과 같다.panic: runtime error: index out of range goroutine 1 [running]: main.fn() /tmp/sandbox410484699..
Go의 인터페이스 타입 변수는 단순한 포인터가 아니다. 예를 들어 인터페이스 I를 구현한 구조체 S가 있다고 할 때, var s *Svar i Ii = s 위 코드에서 s는 초기화를 하지 않았으므로 nil이지만 이변수가 대입된 i는 nil이 아니다. 그 이유는 인터페이스가 nil이 되기 위해서는 내부적으로 타입에 해당하는 필드와 값에 해당하는 필드가 모두 nil이어야 하기 때문이다. 다시 말해서 위 코드에서 i가 nil이 아닌 이유는 값에 해당하는 필드는 nil이지만 타입에 해당하는 필드가 nil이 아니기 때문이다. 더 자세한 설명은 다음 링크 참고:"nil" Interfaces and "nil" Interfaces Values
Go에는 메모리에 오브젝트를 생성하는데 쓰이는 내장 함수가 2가지 있다. make와 new가 그것이다.newnew에 임의의 데이터 타입을 파라미터로 주고 호출하면 메모리에 해당 오브젝트를 생성한 뒤 오브젝트에 할당된 공간을 모두 0으로 초기화하고 그 포인터를 반환한다. 예를 들어type Point struct { x int32 y int32 } ptr := new(Point) // ptr의 타입은 *Point 이 코드에서 ptr.x와 ptr.y의 값은 0이 된다.부연하면 new는 내장함수로 builtin 패키지에 속하고 Go 언어 공식 매뉴얼에 나온 프로토타입을 보면 다음과 같다.func new(Type) *Type Type을 파라미터로 받아 *Type을 반환하게 되어 있다. 반환하는 값의 자료형이 포인..
고루틴과 채널은 Go의 대표적인 기능이다. 고루틴은 서로 다른 작업이 함께 진행될 수 있도록 해주고 채널은 고루틴들이 통신을 통해 협력할 수 있게 한다.select 문을 이용하면 여러 채널을 모니터링하다가 먼저 데이터가 도착한 채널의 데이터를 읽도록 할 수 있다. 이런 기능이 없다면 프로그래머는 각 채널별로 별도의 고루틴을 할당해야 한다. Go 스케쥴러의 특성상 지나치게 많은 고루틴을 사용하는 것은 부작용이 있을 수 있으므로 한개의 고루틴으로 여러 가지 일을 할 수 있다는 것은 여러 모로 좋은 일이다.이렇게 한개의 스레드를 이용해 여러 데이터 소스(이 경우 채널)를 한꺼번에 들여다 보고 있다가 먼저 도착한 데이터를 우선 읽어 처리하는 방식의 프로그래밍을 이벤트 기반 프로그래밍(event-driven pr..