본문 바로가기

Language/Go

(12)
[Go] 이미지 업로드 + naver cloud platform OCR 써보기 간단한 프로젝트 진행을 하면서 Go로 이미지 업로드 서버 + 업로드한 이미지를 통해 OCR 적용 해보았다. 1. 이미지 업로드 서버 만들기 - exif 태그보고 rotate하기 - io을 다뤄서 파일 저장하기 2. OCR 써보기 - JSON parsing - reqeust하기 1. 이미지 업로드 서버 만들기 - client side - index.html 기능 구현을 위해 post전송을 할 form정도만 구현해놓았다.. form은 post, multipart/form-data를 사용했다. {{.}} - server side main.go가 메인 실행파일, utils안에 코드를 분할, images에 이미지저장, json에 ocr결과를 저장하도록 했다. method에 따라 기능을 분리하고.. func ind..
[Go] defer, panic, recover?? Go 코드를 보다보면 다른 언어와 다르게 defer, panic, recover가 자주등장한다. defer는 키워드로, panic, recover는 내장함수로 지원되는데 어떻게 사용되는지 알아보자 1. defer 2. panic 3. recover defer - defer를 사용하면 list에 함수 호출을 넣는다. - 이러한 list는 주변 함수가 리턴된 이후에 실행된다. (after surrounding function returns) Example - 파일을 복사하는 경우 아래와 같이 src,dst 파일의 열고 닫는 과정이 필요하다. - 이 때, dst 파일의 os.Create호출에서 문제가 발생했을 때, 우리는 src파일의 Close하는 논리과정을 한 번 더 작성해야한다. (아래의 코드는 버그 발생..
[Go] Go 사용하기(코드 구조, package) 한 언어를 제대로 사용하려면 역시 구조를 정확히 알아야한다. 공식 문서를 토대로 알아보자 Code Organization - go 프로그램은 package로 구성되어 있으며, 같은 패키지내의 어떤 소스 파일에 정의된 function, type, variable, constant는 어디서든 사용(visible)가능 * package : A package is a collection of source files in the same directory that are compiled together(같은 폴더에 있는 소스파일) - repository는 1개 이상의 모듈로 구성됨. 루트 폴더에 go.mod 파일에 패키지나 모듈의 상세정보를 기술 * module : A module is a collection o..
[Go] - web programming : postgresSQL연결, CRUD사용해보기 PostgresSQL - 파일을 csv, 메모리에 계속올려두어 사용하는 것은 한정적이다. db서버를 이용해서 데이터를 접근하고 crud가능한 서버를 만들어 보자. 1. PostgresSQL 설치 - url - https://www.enterprisedb.com/downloads/postgres-postgresql-downloads - 다운 받고 실행은 굉장히 직관적이고 쉬워서 설치과정은 생략한다. - 글로벌하게 쓸라면 환경변수 설정해 주자. (자동으로 안잡아준다) [내PC] -> [고급시스템설정] -> [환경변수] -> 시스템 변수에서 변수Path [편집] --> PostgresSQL의 bin 폴더 추가 2. Postgres user생성 및 table 생성 - postgres, db를 쓸라면 기본적으로 ..
[Go] - web programming : csv, gob 패키지 다루기 파일 저장 - 메모리에 데이터를 저장하는게 빠르지만 휘발성 데이터임 (임시로 저장) - 메모리에 저장된 데이터를 비 휘발성 저장 장치(하드)에 저장시키자 - csv는 텍스트포맷(콤마로 구분), gob는 바이너리 포맷 으로 serializing, cahing할 때 효과적 이라 함 CSV 읽기 쓰기 1. 데이터 정의 및 csv파일 생성 - 게시판 어플리케이션을 만든다 생각했을 떄, 아래와 같이 struct를 정의한다. type Post struct { Id int Content string Author string } - post파일을 저장할 csv파일을 생성해준다. (defer와 panic은 추후 공부하자) csvFile, err := os.Create("posts.csv") if err != nil { ..
[Go] - web programming : 상황 인지, XSS 공격 막기 상황 인지 - Go 템플릿 엔진에서 콘텐츠가 표시될 때, 상황에 따라 변할 수 있다. - 콘텐츠가 표시될 때, escape 처리를 한다. ( 콘텐츠가 html이면 html을 escape, js이면, js를 escape) - Go 템플릿 엔진은 콘텐츠가 URL인지, CSS인지 등 콘테츠의 타입을 인지할 수 있다. example - 액션 위치에 따른 콘텐츠 생성의 차이 main.go - 템플릿 엔진에 Hello world! 라는 문자가 포함된 문자를 전송 package main import ( "html/template" "net/http" ) func process(w http.ResponseWriter, r *http.Request) { t, _ := template.ParseFiles("index.ht..
[Go] - web programming : 액션 액션 - Go 템플릿 내부의 삽입된 명령어. 이중 중괄호 내에 위치 - 아래와 같은 action의 사항을 공부해보자. 1. 조건부 액션 - conditional actions 2. 반복자 액션 - interator actions 3. 집합 액션 - set actions 4. 액션 포함 - include actions 1. conditional actions - 인자로 들어온 값을 평가해 여러 데이터중 하나를 선택 - 아래와 같은 형태를 html에 쓰자 {{ if args }} content1 {{ else }} content1 {{ end }} - args는 어떤 액션을 취할지에 대한 인자(인자에 대해서는 추후에..) example - 랜덤 난수를 생성하고 5보다 큰지 작은지 확인 main.go - ma..
[Go] - web programming : 템플릿과 템플릿 엔진 템플릿 - 템플릿 엔진이 생성하는 미리 만들어진 HTML 페이지로 프로그램에서 반복적으로 사용된다. 템플릿 엔진 - 데이터와 템플릿을 합쳐 궁극적으로 HTML을 만들어 낸다. - 핸들러는 템플릿 엔진을 호출하여 데이터와 템플릿을 합쳐 클라이언트에 HTML 결과를 반환한다. - 템플릿 엔진은 크게 두가지 유형이 있다. 1. 로직 최소화 템플릿 엔진(Logic-less template engines) - 동적 데이터는 템플릿에 전달 돼 명시화된 placeholders에 실제 데이터가 대체된다. - 어떠한 로직 처리를 진행하지 않고 오로지 문자열만 대체하여 로직은 핸들러에서만 처리한다. 2. 내장 로직 템플릿 엔진(Embedded logic template engines) - 템플릿 내부에 프로그래밍 언어 코..