일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 포인터
- 커널
- 컴퓨터 강좌
- Windows via c/c++
- 함수포인터
- 구조와 원리
- 포인터변수
- UNIX
- bash
- kernel
- TiDB
- DBMS
- 긴옵션
- newSQL
- DBMS 개발
- Programming
- FreeBSD
- 약어
- TiKV
- getopts
- Golang
- Pointer
- go
- UNIX Internals
- Preprocessor
- Symbol
- SQLite
- 전처리기
- OS 커널
- 한빛미디어
- Today
- Total
목록개발자 이야기/Go (12)
sonumb
개요 결론을 말하자면, '다차원 배열'을 '참조에의한호출'로 다른 함수에서 참조할 수 있다. 그러나, 배열 대신 슬라이스를 이용하는 것을 가장 추천한다. (코드가 간단해지므로) 다차원 배열을 선언할 때, var arr [5][2]int처럼 배열 크기를 명시하거나, var arr [...][2]int와 같이 ...을 기입해주어 해야 배열로 선언되고, var sliece [][2]int와 같이 크기가 없거나, slice := make([][2]int, 0)와 같이 make()를 호출해야 슬라이스로 선언된다. 그렇다면, 다차원 배열을 함수에 인자값으로 넘길 때, call-by-reference를 하고 싶다면? 참고로, C 언어 같은 경우 void foo( int arr[][2] ); // 혹은 void ba..
개요 테스트 목적으로 심플한 php 스크립트를 구동하고 결과를 알고 싶은데, WAS나 웹서버를 설치하고 설정하는 것은 번거롭다. go에서 "net/http"를 이용해 간단한 http 서버를 작성/구동할 수 있다. https://jeonghwan-kim.github.io/dev/2019/02/07/go-net-http.html Go net/http 패키지 웹 어플리케이션을 개발하려고 Go 언어를 살펴보기 시작했다. 앞서 정리한 몇 가지 기본 패키지는 net/http 패키지를 사용하기 위한 준비 과정이라 생각하자. 이번에는 네트웍 프로그래밍을 위한 n jeonghwan-kim.github.io 그렇다면, php와 같은 스크립트 파일의 실행하며, 그 결과를 출력하는 httpd도 만들 수 있을까? 답은 그렇다이..
개요 gRPC 개념은 아래 글들에서 찾아보자. https://corgipan.tistory.com/6 http://m.blog.naver.com/alice_k106/221617347519 https://devjin-blog.com/golang-grpc-server-1/ https://blog.banksalad.com/tech/production-ready-grpc-in-golang/ https://medium.com/naver-cloud-platform/nbp-%EA%B8%B0%EC%88%A0-%EA%B2%BD%ED%97%98-%EC%8B%9C%EB%8C%80%EC%9D%98-%ED%9D%90%EB%A6%84-grpc-%EA%B9%8A%EA%B2%8C-%ED%8C%8C%EA%B3%A0%EB%93%A4%E..
개요 빌드 시, 릴리즈 모드에 따라 호출되는 함수의 기능을 달리하고 싶을 때가 있다. "모드에 따른 다른 빌드"를 구현하는데, 두 가지 방법이 있다. 두 방안에 대해 알아보고, 두 방안의 성능차이도 실제 측정하여 기록하였다. (이 주제의 두번째 게시물 마지막) 방안들 1. 빌드 시, 태그(-tags) 옵션을 이용하는 방법 파일을 두 개 동일하게 생성하되 그중 하나가 디버깅이라면 // +build debug을 맨 윗줄에, 디버깅이 아닌 것은 // +build |debug 을 소스코드 파일 맨 윗줄에 추가한다. 태그 옵션을 이용하여 모드에 따른 빌드는 가능하다. ⛔️ 주의 그러나 시스템 종속족인 기능과 같이, 빌드 시 "내용이 파일에서 분리가 되어야 하는 것"들인 경우 이를 이용하는게 가장 좋다. 왜냐하면,..
개요 https://sonumb.tistory.com/124 Go - release/debug 모드 빌드하기 - 1 개요 빌드 시, 릴리즈 모드에 따라 호출되는 함수의 기능을 달리하고 싶을 때가 있다. "모드에 따른 다른 빌드"를 구현하는데, 두 가지 방법이 있다. 방안들 1. 빌드 시, 태그( -tags ) 옵션을 이용하 sonumb.tistory.com 개요 및 전반적인 이야기는 윗 글을 참조하고, 전편에 이어 방안 2에 대한 소스코드를 보여주려한다. '모드에 따른 빌드하기'의 방안 2에 대해 간단히 설명하자면, 빌드시, 빌드모드를 소스코드에 기록하기 (실제로는 하드디스크의 파일의 내용을 바꾼다는 의미가 아니라, 파일 내용을 메모리로 로딩 후, 메모리 내에 변수를 수정한다는 것이다.) 코드에 기록된 ..
출처: https://stackoverflow.com/questions/25927660/how-to-get-the-current-function-name How to get the current function name For tracing purpose, I'd like to print out current function name, like the __FUNCTION__ macro in gcc. So that when I have a function func foo () { trace() } it will automatically print out En... stackoverflow.com // 반환: 파일이름, 현재라인, 함수이름 func trace() (string, int, string, err..
개요 및 문제 상황. Go언어에서 동기화 툴로 제공하는 것중 하나가 채널이다. 다만, 채널의 특성으로 인해, 사용할 때 문제 혹은 불편한 사실들이 있다. 다른 누군가가 쓰기 전까지, 읽는 것은 반환되지 않는다.(단, 채널 용량에 따라 반환여부가 결정 된다) 다른 누군가가 읽기 전까지, 쓰는 것은 반환되지 않는다. close(ch)을 하면, 위 두가지 문제(반환되지 않음)이 해결되는가 싶어서, 이를 시도한다. 닫힌 채널에 쓰는 행위는 panic이 발생한다 그런데, 닫힌 채널을 읽는 행위는 잘 실행된다(!) 해결방법 3-1번 상황을 해결하기 위해, 채널을 구성할 때는 full-duplex로 구성한다. 즉 쓰기/읽기를 전용 채널을 각각 선언하고, 닫히는 시점을 잘 정의해야 한다.(대개 다수의 생산자 쓰레드가 ..
개요 다수의 클라이언트 접속과 요청을 각각의 고루틴으로 처리하는 서버가 있다고 하자. 이 서버에서 고루틴이 정상적으로 종료하는 경우는 두 가지 정도가 있다. 1. 클라이언트 접속 종료 2. 관리자가 서버 애플리케이션 종료 방안 1 이 두가지를 동시에 처리하기 위해서, 서버 애플리케이션은 클라이언트 접속을 확인하는 동작과 특정 변수를 통해 애플리케이션 종료가 진행되고 있는지 확인하는 동작이 순차적으로 행해져야 한다. 서버 애플리케이션 종료는 chan 혹은 context로 제어될 수 있으며, 클라이언트 접속 여부를 확인하기 위해서 net.Conn 객체의 Read() 함수를 호출해야 한다. 다만, 이 함수는 기본적으로 동기함수로 처리되므로, 데이터가 수신되어 리턴되기 전까지 context.Done()을 읽는 ..
macos 용 go에서는 syscall.Gettid() 가 없음.. 따라서, Gettid() 함수를 만들어야 한다. macos는 SYS_GETTID를 이용해서 syscall()을 호출하면 -1이 리턴되므로 사용불가.. 대체할 수 있는 시스템콜은 thread_selfid()라는 시스템콜이다. (리눅스의 제공여부는 확인하지 않았다) 아래는 소스코드 // +build darwin // 다른 unix 계열은 아래 라인을 집어 넣은 후, syscall.Gettid()호출 및 반환하게 한다. ////// +build aix dragonfly freebsd linux netbsd openbsd solaris // Above OSs will call syscall.Gettid() and return. import ( ..
직접 호출 할 수 있는 함수는 제공되지 않는 듯 하다. 아래 코드를 이용하여 id를 획득하는 것으로 해결함. 간단히 설명하자면 콜스택에 ID가 기입되어 있는데, 이를 획득하여 타입변환후 반환하는 코드다. https://gist.github.com/metafeather/3615b23097836bc36579100dac376906 Get goroutine id for debugging Get goroutine id for debugging. GitHub Gist: instantly share code, notes, and snippets. gist.github.com package main import ( "fmt" "runtime" "strconv" "strings" "sync" ) func goid() i..