반응형

golang 22

Golang mysql 사용/연동 하기

Golang에서 mysql과 연동하기 위해 "database/sql"과 "github.com/go-sql-driver/mysql" 패키지를 import 해야한다. "database/sql"은 golang의 데이터베이스 관련 인터페이스를 제공하고, DB연결, 쿼리 실행, 트랜잭션 등을 처리할 수 있다. "github.com/go-sql-driver/mysql"은 mysql DB 드라이버를 구현한 패키지다. 사용 방법 터미널에서 다음의 명령어를 사용하여 패키지를 다운로드 한다. (이미 설치가 되어 있다면 생략) go get github.com/go-sql-driver/mysql 예제 코드) DB가 이미 생성되어 있다는 가정하에 진행 package main import ( "database/sql" "fmt"..

Golang 2023.08.08

Golang http package

http 패키지는 golang에서 HTTP 클라이언트 및 서버를 작성하기 위해 제공되는 표준 패키지다. 이 패키지는 HTTP 요청을 보내고 응답을 받는 클라이언트와, HTTP 요청을 처리하고 응답을 보내는 서버를 구현할 수 있는 기능을 제공한다. http 패키지를 사용하여 간단한 HTTP 클라이언트나 서버를 구현할 수 있으며, 이를 통해 웹 애플리케이션을 만들 수 있다. 그렇다면 http 패키지의 주요 기능을 살펴보자. HTTP 클라이언트(Client): http 패키지는 HTTP 클라이언트를 생성하고, GET, POST, PUT, DELETE 등의 HTTP 요청을 생성하고 보낼 수 있다. 또한, 클라이언트는 응답을 받아서 처리할 수 있다. 클라이언트는 네트워크 요청과 응답을 처리하는데 유용한 기능들을 ..

Golang 2023.08.08

Golang 난수 생성(math/rand)

Go를 사용하여 난수를 발생하기 위해서는 `math/rand` 패키지와 `time` 패키지를 사용한다. `time` 패키지를 사용하는 이유는 `time.Now().UnixNano()` 함수를 사용하여 현재 시간을 기반으로 난수 시드를 생성할 수 있다. 이를 통해서 매번 다른 시드 값으로 난수를 생성할 수 있다. 다음의 예제는 1부터 10까지 숫자 중 난수를 생성하는 예제이다. package main import ( "fmt" "math/rand" "time" ) func main() { rand.Seed(time.Now().UnixNano()) randomNumber := rand.Intn(10) + 1 fmt.Println(randomNumber) } `rand.Seed()` 함수를 사용하여 현재 시간..

Golang 2023.06.30

디스코드가 Go 대신 Rust로 전환하는 이유

요약: Go GC 성능 이슈 출처: https://discord.com/blog/why-discord-is-switching-from-go-to-rust Why Discord is switching from Go to Rust discord.com Go gc가 디스코드에서 많은 부하를 유발하는 요소 중 하나인데, gc가 자동으로 메모리를 관리하지만, 디스코드에서는 큰 메모리 할당과 수백만 개의 작은 객체가 동시에 발생하는 경우에 문제가 발생하였음. 이거 때문에 일시적인 렉이나 성능 저하가 발생함. 약 3년전 글이지만(뒷북) `rust가 go보다 더 좋다`는 것은 아니며(언어는 목적과 장점에 따라 선택하는 것이 좋음), 주의 깊게 살펴볼 필요가 있어서 블로그에 글을 작성함.

Golang 2023.06.14

Golang 웹 크롤링/크롤러

다음의 예제 코드는 https://example.com 웹 페이지를 크롤링 하여 h1 태그를 추출하여 출력하는 예제 코드이다. 사용된 패키지에 대해 간단히 설명하자면 다음과 같다. - fmt: 생략 - io/ioutil: 파일 입출력을 쉽게 처리하기 위한 함수들을 제공. ioutil.ReadAll() 함수는 HTTP 응답의 본문을 읽어온다. - net/http: HTTP 클라이언트와 서버를 구현하는 함수와 타입들을 제공. http.Get() 함수를 사용하여 웹 페이지에 GET 요청. - regexp: 정규 표현식을 사용하여 텍스트를 검색, 추출하고 패턴 매칭을 수행하는 함수를 제공. 받아온 HTML 문서에서 태그의 내용을 추출하기 위해 정규식을 활용. package main import ( "fmt" "..

Golang 2023.06.01

Golang 슬라이스 정렬(오름차순, 내림차순)

sort.Ints() 함수를 사용하여 슬라이스를 오름차순으로 정렬할 수 있다. 예제) package main import ( "fmt" "sort" ) func main() { nums := []int{7, 2, 9, 1, 6, 3, 8, 5, 4} sort.Ints(nums) fmt.Println(nums) } // [1 2 3 4 5 6 7 8 9] sort.Reverse() 함수를 사용하여 내림차순으로 정렬할 수 있다. 예제) package main import ( "fmt" "sort" ) func main() { nums := []int{5, 2, 8, 1, 3, 9, 4, 6, 7} sort.Sort(sort.Reverse(sort.IntSlice(nums))) fmt.Println(nums)..

Golang 2023.04.10

Golang UUID 생성

UUID(Universally Unique Identifier)는 범용 고유 식별자를 의미한다. UUID는 랜덤 값에 시간, MAC 주소 등의 정보를 조합하여 생성된다. UUID는 일반적으로 데이터베이스 레코드 식별자, 세션 ID, 파일명 등에 사용된다. Go에서 UUID를 생성하려면 UUID v4를 사용할 수 있다. UUID v4는 완전한 무작위성에 기반한 128비트 숫자로, 거의 중복될 가능성이 매우 적다. Go에서 UUID v4를 생성하는 방법은 다음과 같다. package main import ( "fmt" "github.com/google/uuid" ) func main() { // Generate a new UUID v4 uuid := uuid.New() // Print the UUID fmt..

Golang 2023.03.27

Golang 임시 파일 생성(os.CreateTemp)

os.CreateTemp() 함수는 임시 파일을 생성하는 함수이다. 함수를 호출하면 임시 파일이 생성되고, 그 파일을 열 수 있는 파일 핸들과 파일 이름을 반환한다. 파일 핸들을 사용하여 파일에 쓰거나 파일에서 읽을 수 있다. 일반적으로 임시 파일은 프로그램이 실행되는 동안 사용되며, 더 이상 필요하지 않을 때 제거된다. 함수 원형은 다음과 같다. func CreateTemp(dir, prefix string) (*os.File, error) 인자로는 다음과 같은 값이 전달된다. dir: 임시 파일이 생성될 디렉토리 경로이다. 이 값이 빈 문자열이면 기본값으로 /tmp가 사용된다. prefix: 임시 파일 이름의 접두어다. 이 값이 빈 문자열이면 기본값으로 "tmp"가 사용된다. 예제 package ma..

Golang 2023.03.27

Golang JSON을 CSV로 변환

Go에서 Json을 CSV로 변경하기 위해서는 encoding/csv와 encodeing/json 패캐지를 사용한다. package main import ( "encoding/csv" "encoding/json" "fmt" "log" "os" ) func main() { // 예제 데이터 jsonData := `[{"name":"Uhm", "age":19, "city":"Soeul"}, {"name":"Jun", "age":23, "city":"Tokyo"}, {"name":"Sik", "age":27, "city":"Los Angeles"}]` // json 데이터를 슬라이스 형태의 맵으로 변환. var data []map[string]interface{} err := json.Unmarshal([]b..

Golang 2023.03.15
반응형