목록분류 전체보기 (145)
쿼카러버의 기술 블로그
개발을 하다보면 makefile을 사용할 때가 정말 많다. 매번 헷갈려서 정리해보고자 한다. 1. subst 2. patsubst 1) subst subst = substitution의 약자다. subst {from},{to},{text} 형식을 가진다. {text}에서 모든 {from}은 {to}로 바뀐다 $(subst ee,EE,feet on the street) 위를 수행하면 "fEEt on the strEEt"이 출력된다. 2) patsubst patsubst는 pattern substitution의 약자다 쉽게 말해서 특정 문자열을 대체하는게 아니라 패턴을 대체한다. 이때 %를 사용하는데, 와일드카드에서 사용되는 *와 비슷한 기능을 한다고 보면된다. patsubst {pattern},{repla..
make에서 %의 의미가 뭘까? 1) %의 의미 간단한 설명 2) 내가 가장 많이 사용하는 경우 1) %의 의미 간단한 설명 makedpsms 패턴 룰 (pattern rule)이라는 개념이 있다. %를 제외하고 다른 패턴들은, 정확하게 일치해야 하지만, %는 any nonempty sunstring과 매칭될 수 있다. (최소 1자 이상은 있어야함.) 예를 들어 설명하자면 %.c에서 %는 모든 .c로 끝나는 문자열과 매칭된다. 마찬가지로 s.%.c를 쓰게되면, s.로 시작하고 .c로 끝나는 문자열과 매칭된다. 즉 최소 5자는 되는 문자열과 매칭되는 것. 이때, %와 매칭되는 substring을 stem이라고 부른다. 여기서 주의사항이 있다. target에만 %가 있고, prerequisite에는 %가 없..
리눅스에서 tr은 치환의 의미를 가진다. (번역 아님 주의) 사용 목적 : tr은 지정한 문자를 바꾸거나 삭제하는 명령어다. 문자를 지우거나 바꾸고 싶을 때 주로 사용한다. 기본 명령어 format tr {옵션} A {B} 옵션없이 tr A B 문자열 내의 A를 모두 B로 변경 옵션 -d : 문자열 A에서 지정한 문자를 삭제한다. (--delete) -s : 문자열 B에서 반복되는 문자를 삭제한다. (--squeeze-repeats) -t : 문자열 A를 문자열 B의 길이로 자른다. (--truncate-set1) tr -d '0-9' : -d옵션으로 지정한 문자열을 모두 삭제한다. 대표적인 예를 보면 다음과 같다. 소문자 대문자로 변환 echo richet | tr '[a-z]' '[A-Z]' ## R..
sed 명령어는 편집에 특화된 명령어다. sed = streamlined editor의 약자 (능률적인) 수정 치환 삭제 글 추가 등 편집기 기능을 수행할 수 있다. vi, vim은 편집기를 열어서 수정하는 방식이라면, sed는 명령행에서 파일을 인자로 받고, sed 명령어를 통해 작업한 후에 결과를 화면으로 확인할 수 있다. sed 명령어를 이용해서 파일을 변경할 경우엔 원본을 손상하지 않는다. 쉘 리다이렉션을 통해서 편집 결과를 저장하지 않는 이상 파일이 변경되지 않는다. 모든 결과는 명령을 수행한 화면으로 출력이 되고, 원본에는 손해가 없다는 것이 명령어의 특징이다. 원리를 자세히 알기 위해선, pattern space, hold space에 대한 개념이해가 돼야 하지만 해당 내용은 추후에 다루고,..
tar 압축 tar -cvf {filename} {directory name} #aaaa folder to aaaa.tar tar -cvf aaaa.tar aaaa tar 압축 해제 tar -xvf {filename.tar} ### unzip aaaa.tar tar -xvf aaaa.tar
한줄 요약 1. Marshal : golang object (e.g. string, struct) -> []byte, string 로 변환 2. Unmarshal : []byte, string -> golang object(e.g. struct) 코드 예시 Marshal 1) []string -> string func main() { slcD := []string{"apple", "peach", "pear"} slcB, _ := json.Marshal(slcD) fmt.Println(string(slcB)) } 2) map -> string data := make(map[string]interfcae{}) data["name"] = "richet" data["sex"] = "male" jsonDoc, _..
Go에서 string은 value다. 따라서, nil이 될 수 없다. Go has various value types including strings, integers, floats, booleans, etc. 따라서 아래 코드는 컴파일이 될 수 없다. x := "I am a string!" x = nil // Won't compile, strings can't be nil in Go 하지만 string을 가리키는 pointer(*string)는 nil이 될 수 있다. 따라서 아래 코드는 컴파일이 가능하다. var x *string x = nil 그럼 string pointer는 언제쓸까? 일반적으로 golang에서는 nil이 필요하지 않은 상황이면 string pointer는 사용하는 것을 권장하지 않..
함수 리터럴 외부 변수를 내부 상태로 가져오는 것을 클로저라고 한다. 값 복사가 아닌 참조 형태로 가져오기 때문에, 값 변경에 주의해야 한다. 참조형태로 가져온다는 것은 외부 변수 a를 캡쳐할 때 a의 주솟값을 포인터 형태로 가져와 나중에 메모리 주솟값을 통해 a에 접근한다는 것을 의미한다. 따라서 함수 리터럴이 여러 고루틴에서 실행될 때 이 특성을 꼭 주의해서 사용해야 한다. 아래 예시를 통해서 v값을 사용하는 내부 함수 리터럴들의 출력 결과를 보면 이해에 도움이 될 것이다. package main import ( "fmt" ) func main() { funcList := make([]func(),3) v := 1 for i := 0; i < 3; i++ { fmt.Printf("Inserting %..