일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- go언어
- md600alpha
- Go
- mf642cdw
- 벤치마크
- Reflection
- Golang
- 리플렉션
- 엘리스배열
- Go 언어
- 음각몰드
- 터미널
- mistel md600 alpha
- 고양이책
- doom-emacs
- 키보드
- nil
- 이맥스
- mopria
- 체리적축저소음
- Griffiths
- 양자역학
- 스플릿키보드
- 다이어트
- 바로코
- 패널라인
- eslip
- driverless
- 건프라
- emacs
- Today
- Total
목록분류 전체보기 (51)
Meandering Trajectory
C나 C++ 같은 언어에서는 다음과 같이 조건절에 변수에 값을 할당(assignment)하는 문법을 사용하는 것이 가능하다.if (x = 10) {...}이것이 가능한 이유는 이들 언어에서 할당은 표현식(expression)이고 0이 아닌 임의의 값이 참으로 간주되기 때문이다.이런 특성 때문에 종종 프로그래머들은 등호(==)를 넣어야 할 자리에 할당 연산자(=)를 넣는 실수를 한다. 이런 실수를 할 경우 조건이 무조건 참이 되는데다가 변수의 값마저 변경되기 때문에 심각한 오류가 발생할 수 있다. 따라서 이런 실수를 방지하기 위해 많은 프로그래머가 if 문의 조건을 다음과 같이 쓰도록 조언한다.if (10 == x) {...}상수값과 변수의 위치를 바꾼 것이다. 이렇게 쓰면 등호를 할당 연산자로 잘못 썼다..
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
오랫동안 오디오테크니카의 ATH-M50을 사용해왔다. 헤드밴드가 벗겨져 지져분하다는 것만 빼면 여전히 좋은 소리를 들려주고 있고 임피던스가 낮아 아무 기기에나 연결해도 음악듣는데 문제가 없어서 좋다.그런데 최근 들어 다른 성향의 헤드폰, 특히 오픈형 헤드폰으로 음악을 들어보고 싶다는 생각이 자꾸 들어 벼르다가 며칠전 베이터다이나믹의 DT990을 주문했다. 이 제품은 32, 250, 600옴 이렇게 세가지 임피던스를 갖는 모델이 나오는데 이 중 250옴 모델을 구입했다.물론 외국 포럼과 유튜브 리뷰 영상 등을 통해 확인해보고 산 것이기는 하지만, 헤드폰을 앰프에 물려 들어보기 전까지 불안했던게 바로 헤드폰의 임피던스였다. 내가 가진 헤드폰 앰프는 Fiio 사의 Q1이라는 모델인데 이 제품의 권장 헤드폰 임..
난 리눅스 데스탑 환경으로 KDE를 사용한다. KDE의 기본 터미널 에뮬레이터는 콘솔(konsole)이다. 콘솔 역시 현대적인(?) 터미널 에뮬레이터답게 탭기능이 있다.작업을 하다보면 탭을 여러개 띄우게 되는 경우가 있는데 탭 사이를 클릭을 해서 옮겨다니는 일은 여간 귀찮은게 아니다. 그래서 나는 Alt와 함께 숫자를 누르면 특정 탭으로 바로 이동할 수 있도록 단축키를 지정해서 사용한다.단축키를 지정하려면 다음과 같은 경로를 통해 콘솔의 단축키 설정창을 연다.상단 매뉴의 설정 --> 단축키 설정열린 창에서 위 스크린 샷에 보이는 것처럼 "탭 X(으)로 바꾸기" 동작을 찾아 단축키를 설정하면 원하는 탭으로 한번에 이동할 수 있다. Alt+1부터 Alt+0까지 10개의 단축키를 지정해 둔 것을 볼 수 있다...
변수 선언 Go의 기본적인 변수 선언 방법은 다음과 같다. var v int Go에서는 변수를 선언할 떄 초기화 하지 않으면 각 타입별 기본값으로 초기화된다. int와 같은 숫자를 표현하는 타입은 0이 기본값이다. 따라서 위와 같이 선언을하고 나면 v의 값은 0이 된다. 원하는 값으로 변수를 초기화하고 싶다면 이렇게 하면 된다. var v int = 7 또는 var v = int(7) 이렇게 해도 된다. 단축형 선언 그리고 Go에는 변수를 선언하는 다른 방법이 하나 있으니 바로 단축형 변수 선언이다. 다음과 같이 ":="를 이용해서 단축형 선언을 할 수 있다. v := 7 타이핑을 적게 한다는 것은 반길 일이다. 단축형 선언에는 독특한 특성이 하나 있는데 바로 변수 재선언이 가능하다는 것이다. 아래 코드..
에러타입(error)의 정체 Go는 예외처리를 함수의 반환값에 기반하여 처리한다. 하지만 C와 달리 에러의 타입을 표준화 했다. 에러타입은 error라는 이름을 가지고 있고 다음과 같이 정의되어 있다. type error interface { Error() string } Error() 메서드 한개를 가진 인터페이스다. 이 인터페이스를 구현한 어떤 타입이든 에러가 될 수 있다. 그냥 정수형도 사용자 정의 타입으로 만들면 에러로 사용 가능하고 멤버가 없는 구조체도 Error() 메서드만 구현하면 에러로 사용할 수 있다. // 정수를 사용자 정의 타입으로 정의 type intAsError int // Error() 메서드 구현 func (i intAsError) Error() string { return f..
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..
C의 영향을 받은 언어들은 대다수가 부등호를>=이렇게 표시한다. 최근 구글의 빽을 등에 없고 뜨고 있는 Go 언어도 위 기호를 부등호로 사용한다. 한편 Go에는 채널에 대한 데이터 흐름의 방향을 표시하기 위해 빼기 문자와 부등호가 조합된 화살표 기호를 쓴다.ChanX
Go에는 슬라이스라는 확장 가능한 배열이 있다. 다음과 같이 선언한 뒤 사용한다.var s []int s = append(s, 1, 2, 3)다음과 같이 변수 선언만 한 경우var s []int슬라이스는 값은 무엇일까? 정답은 nil이다.그런데 이렇게 선언만 된 슬라이스의 동작은 기묘하다. 예를 들어 다음과 같이 선언만 된 슬라이스를 출력하면var s []intfmt.Println(s)결과는 이 아니라[] 즉 빈 문자열이다. 심지어 이 슬라이스의 길이도 구할 수가 있다.fmt.Println(len(s)결과는 0이다. 슬라이스 자체를 출력했을 때 빈 문자열이 출력된 것과 결이 맞다.따라서 출력된 결과값만 봐서는 어떤 슬라이스가 빈 슬라이스인지 선언만된 슬라이스인지 알 방도가 없다. 그렇다면 이 슬라이스는 ..