고랭 7

고루틴(goRoutine)

고루틴(goRoutine) 쓰레드 먼저 쓰레드는 실행 흐름을 의미. 프로그램은 사실 기계어 명령의 다발인데, 이게 로드되면 메모리로 올라가게 된다. CPU는 이 명령어를 실행하는 주체이고 그냥 연산해서 결과를 보내주는 녀석이다. 그래서 이제 원래는 하나의 CPU가 이 명령어의 다발(쓰레드)를 실행해 주었다. 멀티 쓰레드 근데 이제 멀티쓰레드 어쩌고를 들어본적이 있을텐데, 그거는 코어가 빠르게 쓰레드를 교체하게 된다. (실행 흐름이 여러개가 돌아감) 이게 어떻게 가능할까? 각 쓰레드는 자신만의 IP포인트가 있다. CPU가 각 IP포인트에 있는 명령을 수행한다. 그러다가 다음 쓰레드의 IP포인트에서부터 증가하면서 수행한다. 그러고 또 다음 쓰레드를 찾아간다. 그니까 사실 동시에라기 보다는 각 쓰레드의 명령을..

Go와 Gin Framework 를 사용한 게시판 만들기 (1) - 시작하기

목표는 간단한 기능을 가진 게시판 API를 제작하는 것이다. 프론트는 안붙일건데, 이유는 귀찮아서이다 하핫 먼저 처음부터 막 진행하기는 좀 곤란하니까, Go에 Gin Framework를 붙이고 이를 확인하는 것까지 해보려고 한다. 프로젝트 만들기 Go를 통해 간단한 Get API를 만들 예정이다. 먼저 개인 폴더(chan_personal_go)를 만들어 준다. 그리고 그 아래에 main.go 폴더를 만들고, controller를 관리해줄 controller 폴더를 생성한다. 이후 해당 폴더 아래에 controller.go 파일을 생성한다. go는 기본적으로 main.go를 동작시킨다. 이제 메인을 작성해줄 것이다. main.go 작성 package main import ( "github.com/gin-g..

Golang의 포인터

포인터 포인터는 C나 C++에서 지원하는 친구인데, Go도 이걸 지원한다. 참고로 java, python, JS등에서도 포인터를 쓰고는 있는데, 이걸 개발자가 직접 쓰는게 아니라 암묵적으로 내부에서 사용하는 것이다. 포인터는, 메모리 주소를 값으로 갖는 타입이다. var a int var p *int p = &a // a의 메모리 주소를 포인터 변수 p에 대입이거는 var p가 int타입의 메모리 주소값을 값으로 가지고 있다는 것이고, a의 메모리 주소를 p가 저장한다. *p = 20 이건 p가 a의 주소를 가지고 있었는데, 그 공간의 값을 20으로 넣어라 라는 것이다. 이렇게 되면 a의 값이 20이 될 것이다. 여러 포인터 변수가 하나의 변수를 가리킬 수 있다. package main import "f..

Golang의 구조체

구조체 여러 필드를 묶어서 사용하는 타입 구조체 선언 type 타입명 struct { 필드명 타입 ... 필드명 타입 }새로운 type을 선언하겠다고 한 뒤에 타입명 선언, 이후 구조체(struct)를 선언하면 된다. ex) type Student struct { Name string Class int No int Score float64 }var a Student 이후 a라는 변수가 구조체 Student타입이라고 선언해서 사용해줄 수 있다. 구조체 변수 초기화 var house House 모든 필드값이 기본값으로 초기화된다. var house House = House{"경기도 군포시", 50, 10, "아파트"} var house House = House{ "경기도 군포시", 30, 10, "아파트",..

Golang의 기초

Go언어에 관하여 Go의 역사 GO언어는 2009년에 Google에서 만들어진 오픈 소스 프로그래밍 언어이다. 그리고 GO는 UTF-8을 기본 문자로 갖는다. Go의 특징 pakage Go는 1개의 main package와 여러 개의 다른 package를 가지고 있다. 원하는 기능을 가진 package를 가져와서 사용하면 된다. main은 시작점이기 때문에 따로 설정해 줄 수 없고 단 한개만을 사용한다. fmt는 function의 약자이다.(un -> m) fmt는 함수를 정의하기 위해 사용한다. 변수 변수란 값을 저장하는 메모리 공간을 가리키는 이름이다. 값을 저장하는 공간은 크게 하드디스크, memory 두개로 나뉜다. 하드디스크는 느리지만 프로그램이 종료되어도 데이터가 유지된다. memory는 빠르..

Golang - 고랭 이란??

프로그래밍 언어 프로그램이란? 원하는 명령을 원하는 순서대로 실행될 수 있도록 적어 놓은 문서를 뜻한다. 프로그래밍은 어떠한 명령을 실행할 때에 결국 컴퓨터 언어로 실행하게 된다. 정적 컴파일 언어, 동적 컴파일 언어 이 컴퓨터 언어로의 변환 시점에 따라 정적 컴파일 언어와 동적 컴파일 언어로 나뉘게 된다. 정적 컴파일 언어 C, C++, Go 정적 컴파일 언어는 Code를 실행하기 전에 미리 기계어로 변환시킨다.(실행 파일 생성) 이 방식의 장점은 미리 기계어로 변환시켜두었기 때문에 한번 변환하게 되면 속도가 빠르게 사용할 수 있다. 동적 컴파일 언어 JS, python 등등.. 추가로 Java가 동적 컴파일 언어라고 나와있어서 이상해서 찾아 보았는데, java는 동적/정적의 특성을 모두 가지고 있는 ..