Programming Language/go 24

파일 처리하기

파일 처리 os 패키지 func Create(name string)(file *File, err error) : 기존 파일을 여거나 새 파일을 생성 func (f *File) Close() error: 열린 파일을 닫음 func (f *File) Write(b []byte)(n int, err error) : 파일에 값을 사용, 파일에 쓴 데이터의 길이와 에러 값 리턴 func Open(name string)(file *File, err error) : 파일 열기 os.Open 함수로 파일을 열 경우에는, 읽기만 진행 할 수 있다. func (f *File) Stat()(fi FileInfo, err error) : 파일의 정보를 얻어옴 func (f *File) Read(b []byte)(n int, ..

유니코드와 UTF-8

유니코드(unicode) 전 세계 모든 문자를 표현할 수 있는 코드 문자를 종류별로 처리할 수 있도록 범위 지정 범위 테이블(unicode.Latin, unicode.Hangul, unicode.Han, unicode.Hiragana, unicode.Katakana) 이 존재하여 문자를 종류별로 처리 가능 UTF-8 유니코드를 저장하거나 전송할 때 사용하는 인콛깅 방식 중의 하나 영문자는 문자 하나 당 1바이트 한글, 한자, 일본어 문자는 2~3바이트 가변길이 문자 인코딩 방식(Multi Byte Character Set, MBCS) 문자를 저장할때 1~4바이트 사용 한글은 3바이트

Print Hello world, 표준 입출력

go언어 구글이 개발한 프로그래밍 언어 빠른 성능, 안정성, 편의성, 쉬운 프로그래밍을 목표로 개발 C언어 기반의 간결한 객체지향 언어 go언어의 대표 사용처 클라우드 환경을 위한 오픈 소스 프로젝트의 상당수가 go언어로 개발되어있다. (kubernetes, docker,...)특징 탄탄한 기본 라이브러리 메모리 관리 능력 C, C++처럼 네이티브 바이너리를 만들어내는 컴파일 언어 네이티브 바이너리 형식의 이점으로 실행파일 하나로 환경 설정이 필요 없이 배포와 관리 가능 자동으로 메모리를 관리해주는 가비지 컬렉터를 내장 멀티 프로세서, 멀티 스레드 환경에 최적화된 설계 고루틴(go routine)을 사용하여 간단한 문법으로 작동 가능 고루틴을 통해 동기화 과정 없이 채널로 고루틴간 데이터 공유 가능형식 ..

Go 언어 프로그래밍 - SOLID

『Tucker의 Go 언어 프로그래밍』 스터디 요약 노트입니다. SOLID 객체지향 설계 5가지 원칙의 약자이다. Go 의 문법과 연관이 직접적으로 있지는 않지만, 프로그래밍을 하며 알아야하는 원칙이다. 단일 책임의 원칙(Single Responsebility principle, SRP) 모든 객체는 책임을 하나만 져야한다. 코드의 재사용성을 높여준다. 개방-폐쇄 원칙(Open-closed principle, OCP) 확장에는 열려있고 변경에는 닫겨있다. 상호 결합도를 줄여 새 기능을 추가할 때 기존 구현을 변경하지 않아도 된다. 리스코프 치환의 원칙(liskov substitution principle, LSP) q(x)를 타입 T의 객체 x에 대해 증명할 수 있는 속성이라 하자. 그렇다면 S가 T의 ..

Go 언어 프로그래밍 - 채널과 컨텍스트

『Tucker의 Go 언어 프로그래밍』 스터디 요약 노트입니다. 채널 채널은 고루틴간 메시지 큐이다.(FIFO) 고루틴끼리 메시지를 전달할 수 있도록 한다. Thread-safe queue 라고도 한다.multi thread 환경에서 lock 없이 사용할 수 있는 큐이다. 사용방법 //1. make()로 채널 인스턴스 생성 var messages chan string = make(chan string) //chan 은 channel 키워드 //2. 채널에 데이터 넣기 messages

Go 언어 프로그래밍 - Go 루틴

『Tucker의 Go 언어 프로그래밍』 스터디 요약 노트입니다. 쓰레드(Thread) 쓰레드는 실행 흐름을 말한다. 명령어가 로드되면 메모리로 올라간다. 메모리로 올라간 명령어가 CPU를 이용하여 명령어를 실행한다. 명령어 다발의 실행 흐름을 쓰레드라고 한다. 멀티 쓰레드(Multi Thread) 현재는 멀티코어(2개 이상의 CPU)가 흔해졌지만, 과거에는 싱글코어가 대부분이었다. 하나의 코어로 다건의 명령어를 실행 하기 위해 쓰레드를 여러개 사용하하며 코어가 빠르게 쓰레드를 교체시키면서 사용하게 되었다. 컴퓨터에서는 하나의 코어가 쓰레드를 나누어 하나씩 진행하고 있지만 동시에 처리되는 것 처럼 보인다. 이를 멀티 쓰레드라고한다. 이렇게 멀티쓰레드에서 명령어의 교체를 관리하는 것이 OS이다. 이것을 스케..

Go 언어 프로그래밍 - 에러처리

『Tucker의 Go 언어 프로그래밍』 스터디 요약 노트입니다. 에러는 언제 어디서나 발생한다. 오류(Error) 응용 프로그램의 사용자에 의해 발생 프로그래머가 적절한 예외처리를 하지 않은 경우 에러가 발생 버그(Bud) 프로그래머의 실수 디자인/ 기획단의 실수 실수로 인한 오동작 에러 핸들링(Error Handling) 에러는 언제 어디서나 발생한다. 에러는 어디서든 발생할 수 있다. 그러므로 어떻게 에러에 대처하고 관리하는 것이 중요하다. 에러 핸들링은 크게 두가지이다. (사느냐 죽느냐) 빠르게 프로그래밍을 죽이는 방법 빠르게 에러를 처리하여 프로그램을 지속시키는 방법(에러 반환) 에러마다 개발 단계마다 프로그램 성격마다 처리 방법이 다르다. 에러 반환 호출자에게 에러를 반환하여 처리를 위임한다. ..

Go 언어 프로그래밍 - 자료구조 - 2

『Tucker의 Go 언어 프로그래밍』 스터디 요약 노트입니다. 맵(map) 키와 값 현태로 데이터를 저장하는 자료구조이다. 프로그래밍 언어에 따라서 딕셔너리(dictionary), 해쉬 테이블(hash table), 해쉬맵(hash map) 등으로 부른다. 같은 키를 여러번 작성하면 해당 키에 매핑되는 값이 업데이트된다. map[key]value map[키 타입]값 타입 맵은 생성 시, make를 이용하여 초기화가 필요하다. package main import ( "fmt" ) func main() { //맵을 생성하기 위한 초기화 m := make(map[string]string) m["이화랑"] = "서울시 광진구" m["송하나"] = "서울시 강남구" m["백두산"] = "부산시 사하구" m["최..

Go 언어 프로그래밍 - 자료구조 - 1

『Tucker의 Go 언어 프로그래밍』 스터디 요약 노트입니다. 자료구조(Data Structure) 자료들을 어떤 형태로 저장할 것인가를 나타낸다. 크게 배열, 리스트, 트리, 맵 등이 있다. Big-O표기법 알고리즘의 효율성을 나타내는 표기법 중 하나로, 가장 많이 쓰인다. 알고리즘의 효율성 = 시간적, 공간적 효율성을 확인하는 것 효율성의 상한성(최악)을 표시하는 것이 Big-O(빅오) 표기법이다. 리스트(List) 배열과 함께 가장 기본적인 선형 자료구조(Linear Data Structure) 중 하나이다. 선형 자료구조 비선형 자료구조 (비선형 자료구조의 대표주자로는 트리(Tree)가 있다.) Go에서는 container 라는 패키지에서 list를 기본 제공한다. //리스트의 형태 type E..