Go 8

[Go] slice 크기 조정 - append() 함수의 숨겨진 내부 동작

최근에 golang을 살펴보는 중 slice에서의 재밌는 동작을 하나 보게 되었다.  보통 동적 배열에 새로운 요소를 계속 추가하다가 요소 개수가 다 차면 두 배로 길이를 늘려주고 복사하여 기존 내용을 넣어준다고 알고 있다. Go에서도 slice에 대한 내용 중 비슷하게 두배로 늘려준다는 내용을 발견했다.  하지만 재밌는 점은 실제 1000개의 요소를 slice에 append하면서 append한 결과의 slice capacity를 보니 2의 승수를 따르지 않는 구간이 나타난다는 점이었다.  내 예상대로면 0짜리 capacity에 새롭게 요소를 넣어주는 동작을 1000번 반복한다면 아래와 같이 slice의 capacity를 늘려주는 동작을 할 것이라고 예상했다. 1 2 4 8 16 64 128 256 51..

Go 2024.08.18

[Go] 표준 라이브러리 container/list 코드 분석

최근 golang을 보고 있는데 꽤나 재밌는 내용이 있어서 정리해두고자 한다.  golang에는 표준 라이브러리로 list를 제공한다. 그런데 재밌게도 ring구조를 채택하고 있고, 이를 통해 더미 노드를 하나 만들어서 첫번째 노드의 prev노드로 사용하고, 마지막 노드의 next노드로써 사용한다.이렇게 함으로써 경계값 검사가 쉬워진다는 장점이 있다고 한다.  분석하면서 개인적으로 주석을 달아놓았는데 한번쯤 재밌게 읽을법한 코드라서 아래 첨부한다.   출처:golang에서 기본적으로 제공하는 container/list   // Copyright 2009 The Go Authors. All rights reserved.// Use of this source code is governed by a BSD-s..

Go 2024.08.11

[Go] Go 실행환경 - VScode 에서 Go를 사용해보자.

최근에 블록체인을 공부하던 중 Go 로 작성된 샘플 소스코드가 굉장히 많다는 것을 알게 되었다. 원래 Java 에 익숙해서 예제들도 전부 Java 쪽으로 찾아봤는데 오히려 go 쪽에서 간단하게 구현된 Blockchain 이나 P2P network 예제가 많았다. (Python3로 작성된 자료들도 많아서 신기했다.) Go를 개인적으로 공부한지 오랜 시간이 지났고 제대로 사용해본 적도 없어서 이번에 학교에서 진행하는 프로젝트가 끝나자마자 바로 보관해두었던 오픈소스를 읽어볼 생각이라 그전에 미리 환경을 세팅해두고자 한다. 아래와 같은 과정을 따르면 된다. 아래 링크에서 본인 OS에 맞는 Go를 다운받자. https://go.dev/dl/ Downloads - The Go Programming Language ..

Go 2022.11.05

[Go] Go language 스터디 내용 정리

올해 초 겨울방학에 프로젝트에 지쳐서 숨돌릴겸 Rust와 Go 언어에 대해서 잠시 알아볼 시간을 가졌는데 그중 Go 언어는 노마드 코더님의 무료 강의를 보면서 notion에 내용을 정리했다. 4개월 정도 이전에 했던 스터디 내용이라 강의가 업데이트해서 강의내용이랑은 다른 내용이 있을 수도 있지만 내용 자체는 기본기 다지기에 좋을것 같아서 다시 보면 좋을 듯 싶어 업로드했다. go 언어란 무엇일까? 09년 구글의 로버트 그리즈머, 홉 파이크, 켄 톰슨이 개발했다. 고 루틴이 있다. → 멀티스레드 매커니즘이지만 자체적인 스케줄러에 의해 관리되는 경량 스레드이고 os에서 관리하는 경량 스레드보다 더 경량이다. 일급객체로 정수와 실수와 같은 데이터 타입과 동급으로 취급한다. channel을 통해 동시성을 지원한..

Go 2022.05.08

[Go] Go language 간단후기1 - Rust보다 재밌다!

며칠전에 프로젝트를 하다 지쳐서 하고 싶은거나 공부해볼까 하는 김에 Rust 문서를 읽으면서 맛보기를 해보고 있었다. 이후에 go언어가 눈에 들어왔다.(사실은 Rust를 좀 보다가 잠깐 글도 쓰고 이것저것 정리하고 보고싶었던 영화 정주행 달리다보니 며칠 사이에 새로운게 땡겼다.) 사실 go언어도 이전부터 관심갖고 지켜봐왔던 언어였다. 물론 유독 비판이 많은 언어였다. 열성 rust론자들이 있어도 go를 열성적으로 주장하시는 분들은 rust대비 거의 9:1의 비율인것 같았다. 그럼에도 불구하고 도구로써 go는 굉장히 유용하다는 의견들이 많았다. 그 의견들을 종합해보면 몇 가지로 추려질 수 있었는데 고루틴과 함께 go언어 자체의 심플함이었다. 물론 심플함 자체에 대해서도 제네릭의 부재를 말씀하시면서 비판을 ..

Go 2022.01.28

[Go] goquery import 에러

빠르게 해결하고 싶으신 분은 바로 맨 아래로 가서 도식화해놓은걸 확인하시면 된다. goquery를 쓰려고 하는데 gopath가 각 예제마다 다른 경우가 많다. 어느 블로그에서는 C:/ 바로 밑에 go폴더를 만들고 그안에 src bin pkg 이렇게 생성해서 쓰라는 사람도 있고 어떤 분은 그냥 지금 go lang 사이트에서 install받고 그냥 그대로 다른 설정없이 써도 상관없다는 분들도 계시다. 아마 후자가 좀더 최신인것 같은데 후자대로 하면 go를 처음 딱 설치했을때 go 경로가 c:/ program files쪽으로 잡히는걸로 알고 있다. 이게 가장 최신이다. 왜냐면 오늘해봤기때문에용. 크크 그래서 문제가 뭐냐면 각 블로그마다 설정이 다른데 goquery를 쓰려고 하다가 터미널에서 계속 에러가 나서 ..

Go 2022.01.28

[Go] GO 언어 개발 환경 세팅 GO + VSCODE + GIT

modu-print.tistory.com/279 [1일1GO/0001] Go 프로그래밍 환경구성 오래전부터 프로그래밍에 관심을 가지는 분들에게 강좌 같은 걸 해볼까 하고 고민을 하긴 했습니다만. 유튜브나 블로그등에 좋은 강좌들은 꽤 많은지라 원론적인 부분 빼고 2~3년 전부터 매우 modu-print.tistory.com 다른 사이트에서 알려주는 대로 했다가 비주얼 스튜디오코드를 몇번을 지웠다가 다시깔았다. 위 블로그에 나와있는걸로 하니까 잘된다. 감사합니다.

Go 2021.01.06
반응형