Go Lang

개요이번 포스팅은 Golang을 할 때 가장 큰 장점으로 꼽히는 부분인 동시성(고루틴)과 크게 관련된 내용입니다.동시성 프로그래밍은 사실 쉽지 않습니다.  동시에 실행된다는 개념 때문에 프로그래머가 생각하는 순서와 실제 프로세스의 순서가 다를 수 있습니다.이 문제를 레이스 컨디션이라 부릅니다.레이스 컨디션 (Race Condition) : 개발자의 의도와 상관없이 프로세스의 순서가 바뀌어 결과가 일정하지 않은 문제 아래는 간단한 레이스 컨디션의 예제입니다.var num intgo func() { num++}()if num == 0 { fmt.Printf("The value is %d.\n", num)} 위 코드의 결과는 대부분 "The value is 0."로 출력될 겁니다.요즘 사용하는 컴퓨터의 수준은..
최근 면접에서 Go의 Context가 뭐냐고 물으셨다. 가장 중요할 때 기억이 나지 않는 게 세상의 규칙인 건가.. 라는 생각이 들었다 그렇게 백수의 기간이 늘었다 Context 정의 context 패키지에서 제공하는 걸로 간단하게 생각하면 작업 명세서라 할 수 있다. "10시부터 12시는 네가 일해, 그리고 중간에 냉장고 정리를 하고 에어컨을 꺼야 돼, 나는 여기서 청소하고 있을게"와 어떻게 하지를 정의해주는 작업 명세서다. 새로운 고루틴을 시작할 때 시간을 지정해주기도 하고 외부의 작업을 취소할 때도 사용할 수 있다. 거기에 작업 설정에 대한 정보도 전달이 가능하다. 이게 가능해진 버전은 Go 1.7 버전(2016-08-15일)부터로 그때부터 기본으로 탑재가 됐다. Context 단어 뜻을 그대로 직..
목표 저번에 만들었던 md2html 프로젝트에 고루틴을 적용하여 여러개의 파일을 변환할 수 있게 수정하겠습니다. https://seung.tistory.com/entry/GoLang-Markdown%EC%9D%84-HTML%EB%A1%9C-%EB%B3%80%ED%99%98%ED%95%98%EA%B8%B0 [GoLang] Markdown을 HTML로 변환하기 목표 Markdown을 HTMl으로 바꿔주는 프로그램을 만들어봅시다 Markdown : 텍스트 기반의 마크업 언어로 쉽게 문서를 만들 수 있다 HTML : 하이퍼 텍스트 마크업 언어로 웹 페이지를 위해 개발된 언어 이 seung.tistory.com resource 폴더의 md파일의 구조를 다음과 같이 바꿔봅시다. 이렇게 바꾼 이유는 아래와 같습니다...
목표 Markdown을 HTMl으로 바꿔주는 프로그램을 만들어봅시다 Markdown : 텍스트 기반의 마크업 언어로 쉽게 문서를 만들 수 있다 HTML : 하이퍼 텍스트 마크업 언어로 웹 페이지를 위해 개발된 언어 이번에 사용할 모듈은 다음과 같습니다. https://github.com/gomarkdown/markdown GitHub - gomarkdown/markdown: markdown parser and HTML renderer for Go markdown parser and HTML renderer for Go. Contribute to gomarkdown/markdown development by creating an account on GitHub. github.com 코드 프로젝트를 만듭시다..
GoLang에서 처음 Interface를 배울 때 가장 헷갈렸던 점은 Interface에 포함되는 구현체 구분에서 따로 정의가 없는데 어떻게 구분할까였습니다. 그랬던 이유는 "덕 타이핑"이라는 특징 덕분입니다. 우선 Java와 같은 타 언어들에서는 아래처럼 Interface를 implements와 같은 키워드로 사용합니다 (아래 코드는 Java가 아닌 Go에서의 예제이고 에러가 발생하는 예제입니다.) package main type Animal interface { SetName(name string) } // impelments를 통해 interface를 지정 type Dog struct impelments Animal { Name string } func (d *Dog) SetName(name str..
개요 주소를 별명으로 저장할 수 있는 웹사이트를 만들어봅시다 프로젝트 구조 scss 같은 경우 제가 편리해서 사용하는 것이므로 무시해도 됩니다. 포스팅에서는 같은 구조에서 scss 폴더는 없어도 됩니다. 프로젝트 생성 프로젝트를 만들어줍시다 go mod init shortUrl.com 저희는 두가지 모듈을 사용합니다 go get github.com/joho/godotenv go get github.com/go-sql-driver/mysql 그러면 go.mod 파일이 생기고 아래와 같을 것 입니다. 버전이 다를 수 있으니 참고하시기 바랍니다. module shortUrl.com go 1.20 require ( github.com/go-sql-driver/mysql v1.7.1 // indirect gith..
문제 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)..
DSeung
'Go Lang' 카테고리의 글 목록 (3 Page)