문제 GoLang은 2차원 slice부터 값을 추가할 때. slice에 len(length)과 cap(capacity)을 지정하지 않으면 인덱스를 통한 접근에서 에러가 발생합니다. 다음이 에러가 발생하는 예제입니다. package main func main() { var slices [][]int for i := 0; i < 3; i++ { for j := 0; j < 5; j++ { slices[i][j] = i + j } } } 에러는 다음과 같습니다. panic: runtime error: index out of range [0] with length 0 panic: runtime error: index out of range [0] with length 0 goroutine 1 [running]:..
분류 전체보기

Go는 구조체에서 필드 순서에 따라 구조체의 메모리 사용량이 달라진다. 뭔가 싶지만 간하게 위 문구를 이해하고 싶다면 메모리 정렬을 알면 됩니다. 아니라도 보세요. 메모리 정렬 PC에서 데이터에 효과적으로 접근하기 위해 사용하는 방법으로 메모리를 일정 크기로 나눠 사용합니다. 일단 아래 예제를 보시면 package main import ( "fmt" "unsafe" ) // OS의 시스템 종류에 따라 기본 레지스터의 크기가 다름 // ex) window x32 => 4바이트 window x64 => 8바이트 type test1 struct { a int8 // 1바이트 b int // 8바이트 c int16 // 2바이트 d int //8바이트 e int32 // 4바이트 } // 같은 필드여도 순서를 ..
문제 Go나 타 언어에서 실수(float)를 비교하면 예상했던 것과 다른 결과를 나타내는 경우를 볼 수 있습니다. 아래 코드로 예를 들 수 있습니다. package main import "fmt" func main() { // Go에서 지역 변수는 간단한 네이밍 권함 var a float64 = 0.1 var b float64 = 0.2 var c float64 = 0.3 if a+b == c { fmt.Println("이 조건문은 실행되지 않습니다.") } // 출력해보면 조건식이 맞을 것 같지만 fmt.Printf("%f + %f = %f (%v)\n", a, b, a+b, a+b == c) // 실제로는 0.1, 0.2, 03는 정확한 0.1, 0.2, 0.3이 아니다. (Go에서 자체 반올림해서 ..

GoLang C++의 복잡함이 싫어, 2009년 11월에 구글에서 처음 발표된 후 2012년 3월에 정식 발표된 프로그래밍 언어 Go는 매년 순위가 오르는 모습을 보여주고 있고 2023년 2분기에 Pull Requests 수로는 C++을 이기는 모습을 보여주고 있습니다. 특징(장점) Go는 고수준 언어이다. Go는 정적 컴파일 언어이지만 컴파일 속도가 매우가 빨라 인터프리터처럼 사용할 수 있다. Go는 타 언어보다 더 까다로운 강타입 언어이다. Go는 가비지 컬렉터을 가지고 있다. Go는 컨텍스트 스위칭 비용이 발생하지 않는다. 고수준 언어 : 이전 프로그래밍 언어보다 사람의 의사소통과 비슷한 언어, 현재 사용되는 언어 대부분이 고수준 언어이다. 정적 컴파일 언어 : 코드를 컴파일하여 실행파일(.exe)..

개요 프로젝트를 만들다 보면 노출하면 안 되는 값이 있습니다. (ex : aws키, db 접속 정보, api 키 등등) 그렇기에 대부분의 프레임워크에서는 .env, wp-config.php, setting.xml 등의 설정파일을 제공해 줍니다. GO에서는 다음 패키지를 사용하면 아주 쉽게 설정 파일을 만들 수 있습니다. https://github.com/joho/godotenv GitHub - joho/godotenv: A Go port of Ruby's dotenv library (Loads environment variables from .env files) A Go port of Ruby's dotenv library (Loads environment variables from .env files)..

개요 go에 특정 라이브러리는 xlsx만을 지원하기도 하더라고요 일일이 바꿔주자니 하루에 변환할 수 있는 파일 개수에 제한이 걸려있는 사이트가 대부분이더군요 그래서 xls을 xlsx로 자동으로 바꿔주는 걸 만들어봅시다 (결과물) 코드 폴더 계층도는 다음과 같습니다. resources/xls 폴더는 xlsx로 바꿀 xls 파일을 넣어주고 resources/xlsx는 폴더만 만들어두면 됩니다. 사용한 라이브러리는 다음과 같습니다. go get github.com/360EntSecGroup-Skylar/excelize go get github.com/extrame/xls main.go package main import ( "xls-to-xlsx-convertor.com/xlstoXlsx" ) const xl..

개요 C, Java 등을 배우다 보면 가장 처음에 배우는 게 자료형입니다 저도 고등학교 입학 전 겨울 방학 때 배웠을 때 이 수를 넘어가는 건 어떻게 쓸까라는 생각을 했었죠 그 궁금증을 해결해봅시다 하지만 해당 포스팅에서는 Go를 사용할 것입니다 오버플로우, 언더플로우 그 전에 오버플로우, 언더플로우를 알아야 합니다. 정리하면 자료형이 가진 값(메모리 할당량)을 넘어선 상태입니다. 오버플로우 (overflow) : 값이 해당 자료형이 가진 수보다 커진 상태로, 이상 값을 도출하는 상태 예시 ) 0 ~ 127까지 담을 수 있는 자료형에 128가 들어와서 값이 0이 되는 상태 언더플로우 (underflow) : 값이 해당 자료형이 가진 수보다 작아진 상태로, 이상 값을 도출하는 상태 예시 ) 0 ~ 127까..

개요 정규식 공부를 겸하기 위해 url 값을 입력하면 프로토콜, 도메인, 상세경로, url 파라미터를 뽑는 사이트를 만들어봅시다. JS만으로도 충분히 만들지만 Go를 사용하는 게 목적이니 Go에서 정규식을 다루는 걸 목표로 잡습니다. URL 구조 URL에 대해서는 다음 사이트를 정리를 잘해둬서 확인하시면 될 것 같습니다. https://www.beusable.net/blog/?p=4507 데이터 분석을 위한 기초, URL 이해하기 | 뷰저블 데이터 분석을 위한 URL www.beusable.net 간단하게 요약하면 Protocol : 데이터 교환 방식이며 미리 정해진 포맷을 지켜 송수신을 편하게 하기 위해 만들어진 것으로 http과 https는 Protocol의 종류 Domain : IP를 사용할 경우 ..

Go Lang으로 느낌 있게 채팅방을 만들어보자! 아래는 결과물입니다. 주된 기능은 여려명에서의 채팅 입장/퇴장 시에 메시지 출력 닉네임 중복 체크 현재 참여인원 닉네임 표시 해당 프로젝트를 만들 때 알아야 할 것은 WebSocket입니다. WebSocket Http와 같은 웹 기술로 Http는 사용자가 서버에 데이터를 요청하면 이에 대해 응답으로 데이터를 반환한다면 WebSocket은 서버와 사용자가 계속 연결되어 데이터를 주고받을 수 있게 해 줍니다. Http는 주고받고 끝이기에 비교적 크고 실시간이 필요하지 않은 데이터(웹 페이지, 이미지 동영상)에 사용하기 좋고 WebSocket은 실시간으로 이루어져야 하는 게임이나 채팅에 사용됩니다. 환경 go version은 다음과 같음 : go version..

클라우드 컴퓨팅 개념 개념은 정말 간단하고 생각해 컴퓨팅와 관련된 모든 자원(PC를 포함한 하드웨어나 애플리케이션 등등)을 돈 주고 빌리는 것 Pay as you go Q : 근데 왜 구름(cloud )이야? 렌탈 컴퓨팅이라고 하면 편하잖아 A : 구름은 같이 언제든지 볼 수 있는 지만 구름의 내부까지 못 보는 것과 같이 사용자가 실제로 어떤 리소스를 사용하는지까지는 알 수 없다는 점이 구름과 비슷하고 크기가 항상 바뀌는 구름처럼 기존에 컴퓨팅에 유연성과 확장성을 추가한걸 설명하기 위함이야 즉 언제든지 크기를 키울 수도 줄일 수도 있고 원하는 기능을 추가할 수 도 있어 거기에 우리는 자그마한 부분의 리소스를 가져다가 쓰게 될 텐데 그게 꼭 전체 구름(전체 리소스)에서 필요한 구름만(필요한 리소스) 떼어내..