일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- mistel md600 alpha
- emacs
- md600alpha
- 건프라
- 이맥스
- 스플릿키보드
- 바로코
- Reflection
- 패널라인
- doom-emacs
- Go
- 터미널
- nil
- mf642cdw
- eslip
- Golang
- 다이어트
- 고양이책
- go언어
- Go 언어
- 체리적축저소음
- 리플렉션
- mopria
- 양자역학
- 음각몰드
- 벤치마크
- driverless
- 키보드
- 엘리스배열
- Griffiths
- Today
- Total
목록go언어 (5)
Meandering Trajectory
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..
Go에는 슬라이스라는 확장 가능한 배열이 있다. 다음과 같이 선언한 뒤 사용한다.var s []int s = append(s, 1, 2, 3)다음과 같이 변수 선언만 한 경우var s []int슬라이스는 값은 무엇일까? 정답은 nil이다.그런데 이렇게 선언만 된 슬라이스의 동작은 기묘하다. 예를 들어 다음과 같이 선언만 된 슬라이스를 출력하면var s []intfmt.Println(s)결과는 이 아니라[] 즉 빈 문자열이다. 심지어 이 슬라이스의 길이도 구할 수가 있다.fmt.Println(len(s)결과는 0이다. 슬라이스 자체를 출력했을 때 빈 문자열이 출력된 것과 결이 맞다.따라서 출력된 결과값만 봐서는 어떤 슬라이스가 빈 슬라이스인지 선언만된 슬라이스인지 알 방도가 없다. 그렇다면 이 슬라이스는 ..
이전 포스팅에서 리플렉션에 대한 아주 간략한 설명을 했다. 이번 글에서는 간단한 예제 코드를 통해 리플렉션이 어떻게 유용한지 알아보도록 하자. 1 import "reflect" 2 3 var methodMap map[string]reflect.Method 4 5 func initMethodMap(i interface{}) { 6 methodMap = make(map[string]reflect.Method) 7 8 t := reflect.TypeOf(i) 9 for idx := 0; idx < t.NumMethod(); idx++ { 10 m := t.Method(idx) 11 methodMap[m.Name] = m 12 } 13 }initMethodMap 함수는 임의의 구조체 변수를 입력 파라미터로 받은..
리플렉션(reflection)의 사전적 의미는 '반사'다.컴퓨터 프로그래머에게 리플렉션은 이런 사전적 의미 외에 다른 의미가 하나 더 있다. 그들 업계에서 통용되는 리플렉션은 프로그램이 실행 중에 프로그램에 포함된 타입과 메서드에 대한 정보를 조회하고 이렇게 얻은 정보를 바탕으로 메서드 실행까지도 할 수 있도록 해주는 기능이다.사람이 자신의 얼굴을 잘 보려면 거울에 비춰(reflection)봐야 한다. 그런데 프로그램이 스스로에 대한 정보를 실행 중에 알아네는 행동 역시 거울에 비춰보는 행위와 유사하다고 볼 수 있으니 그야말로 적절한 용어선택이다.이렇게 아는 척을 했지만 내가 업계적 의미의 리플렉션을 알게 된 것은 사실은 불과 며칠 전이다. 예기인 즉슨 Go로 된 오픈소스 소프트웨어의 코드를 읽다가 뭔가..