반응형

Golang 30

Golang 디렉토리 생성(os.Mkdir, os.MkdirAll)

Go에서 하나의 디렉토리를 생성할 때는 os.Mkdir() 함수를 사용한다. 만약 디렉토리의 계층(하위 디렉토리 생성)을 구분하여 생성하고 싶으면 os.MkdirAll() 함수를 사용한다. 두 함수는 디렉토리의 경로와 파일 시스템 권한을 인수로 넣어주어야 한다. 다음의 예제는 os.ModePerm 함수를 사용한다. os.ModePerm 함수는 파일 또는 디렉토리의 퍼미션 모드를 나타내는 상수이다. 이 함수는 파일 시스템에서 새로운 파일 또는 디렉토리를 만들 때 사용된다. os.ModePerm 함수는 32비트의 부호 없는 정수형 상수값으로, 0777이라는 8진수 값과 동일하다. 이 값은 파일 또는 디렉토리의 퍼미션 모드를 의미한다. 참고로 0777은 사용자, 그룹, 기타 사용자 모두가 읽기, 쓰기, 실행 ..

Golang 2023.03.15

Golang sync.WaitGroup

sync.WaitGroup는 고루틴이 실행되는 동안 다른 고루틴이 모두 종료될 때까지 기다리는 데 사용되는 동기화 기능이다. WaitGroup은 프로그램이 실행되는 동안 작업이 완료될 때마다 감소하는 카운터를 유지한다. sync.WaitGroup Method func (wg *WaitGroup) Add(delta int) : 대기 그룹에 고루틴 개수 추가 func (wg *WaitGroup) Done() : 고루틴이 끝났다는 것을 알려줄 떄 사용 func (wg *WaitGroup) Wait() : 모든 고루틴이 끝날 때까지 기다린다. 기본적으로 WaitGroup은 0으로 초기화되며, Add(n) 메서드를 사용하여 카운터 값을 증가시킨다. 이후에 Done() 메서드를 사용하여 작업이 완료될 때마다 카운터..

Golang 2023.03.06

Golang if문에 세미콜론(;)

Go언어에서 if문 사용 시 세미콜론을 사용할 수 있다. 예를 들면 다음과 같다. 아래의 두 예제는 같은 의미이다. 첫번째 예제) if v, err := Read(); err == nil { // do something with v, because Read() did not // had an error (err) } 두번째 예제) if v, err := Read(); err == nil { // do something with v, because Read() did not // had an error (err) } 두 문법의 결과는 같지만 차이점은 첫 번째 예제에서는 v와 err의 범위는 if {}블록으로 제한된다. 두 번째 예제에서는 v와 err은 선언된 블록에 속해 있다. 즉, if {}에 속해있지 ..

Golang/Basic 2023.03.04

omitempty

Go에서는 객체를 json으로 변환하려면 struct를 선언해야 한다. omitempty는 해당 struct의 필드에 데이터가 없으면 json으로 변환 시 해당 필드는 생략된다. 즉 value가 false, 0, nil, 빈 배열 일 떄를 말한다. 사용 예시는 다음과 같다. type User struct { Name string `json:"name"` Age int `json:"age"` Email string `json:"email,omitempty"` PhNum string `json:"phNum,omitempty"` } func main() { // Json 데이터 예시 var uhm = User{ Name: "Uhm", Age: 20, Email: "uhm@gmail.com", } byte, _..

Golang 2023.01.10

Golang 문자열 다루기 (strconv, strings)

Golang을 사용하여 개발할 때 필요한 문자열을 다루는 함수들을 정리합니다. 가끔 함수명이 기억나지 않을 때, 보려고 작성 자주 사용하는 함수 정리 문자열 변환 strconv 함수 설명 사용 예시 Atoi(s string) (i int, err error) 숫자로 이루어진 string을 int으로 변환 한다. strconv.Atoi("1") // 1 Itoa(i int) string int형 숫자를 string으로 변환한다. strconv.Itoa(1) // "1" FormatFloat(f float, fmt byte, prec, bitSize) string float를 string으로 변환한다. strconv.FormatFloat(1.2, 'f', -1, 64) // "1.2" ParseFloat(s..

Golang 2022.12.10

Golang Time

time 패키지 사용 예시는 다음의 코드와 같다. package main import ( "fmt" "time" ) func main() { fmt.Println(time.Now().Format("2006-01-02 15:04:05")) } // result: 2009-11-10 23:00:00 뿐만 아니라 아래의 코드와 같이 사용이 가능하다. package main import ( "fmt" "time" ) func main() { fmt.Println(time.Now().Format("2006년01월02일 15시04분05초")) } 결과 2009년11월10일 23시00분00초 재밌다. time 패키지를 사용하다 보면 의문점이 있을 것이다. `2006-01-02 15:04:05` 이것은 어떤 의미 또는..

Golang 2022.09.13

import 의존성 오류

문제 발생 예시) Linux에서 go run main.go 명령을 실행하여 main.go 파일을 실행하려고 한다. main.go 파일의 import 에는 다른 디렉토리에 생성한 모듈을 사용하려고 한다. 그러나 터미널창에서 `main.go:OOO OOO is not in GOROOT(/usr/local/go/OOO/OOO)` 라는 오류가 발생함. 해결 방법 방법 1. 기존의 go.mod 파일이 있다면 삭제한 후 다음의 명령어를 실행하여 현재 디렉토리 내에 새 모듈을 생성한다. go mod init [모듈명] 명령어를 사용하여 현재 디렉토리에 새 모듈을 생성한다. 모듈 생성 후 main.go에서 다른 go 파일의 함수를 호출하기 위해서 import를 수정한다. package main import ( [ali..

Golang 2022.06.29

bind: address already in use

Echo를 실행 시 다음과 같은 오류가 발생하였다. 이는 실행하려는 포트가 이미 사용중일 시 다음과 같은 오류가 발생한다. 해결 방법은 다음과 같다. 방법 1. 코드 내에서 echo를 실행할 포트를 변경해준다. 방법 2. 실행중인 프로세스를 종료한다. # fuser -k -n tcp [종료할 포트 번호] 이때 종료하려는 프로세스가 만약 같은 서버에서 다른사람이 사용하고 있는데 프로세스를 종료해버리면 많이 곤란할 것이다... 종료하기 전 잘 확인 하도록 하자.

cannot find package ~ in any of: (from $GOROOT) ~ (from $GOPATH)

리눅스 환경에서 go build를 할 시, 다음과 같은 오류 발생하였다. 원인은 작성한 코드내에서 사용할 패키지를 찾지 못해서 발생한 오류인데, 다음과 같은 해결 방법이 있다. 방법 1. 환경 변수 설정을 잘 못하여서 발생한 오류일 수도 있다. go env 명령어를 사용하여 GOPATH 확인 후 GOPATH를 재 설정한다. 방법 2. go.mod 파일을 삭제 후 go mod init [프로젝트 명] 명령어를 사용하여 .mod 파일을 새로 생성한다.

JSON data 사용하기

encoding/json 패키지를 사용하여 JSON 데이터를 사용할 수 있다. 1. Json 인코딩 Json 포멧으로 변환하기 위해서는 Marshal() 함수를 사용한다. 다음의 예제는 json 데이터를 변환하여 결과를 출력한다. package main import ( "encoding/json" "fmt" ) // json key 값 type User struct { // struct 내에 field 선언 후 뒤에 `json:"[key]"` 를 붙이면 key 값을 따로 지정할 수 있다. Id string `json:"id"` Pw int `json:"password"` } func main() { // json value 값 지정 userInfo := User{"uhm", 1234} // JSON 인코..

Golang 2022.04.23
반응형