가장 빨리 만나는 Go 언어 핵심 정리

저작권 안내
  • 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
  • 책 또는 웹사이트의 내용을 발췌, 요약하여 강의 자료, 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.

핵심 정리

이재홍 http://www.pyrasis.com 2014.12.17 ~ 2015.02.07

형태함수 및 변수명설명
명령줄 옵션os.Args명령줄에서 설정한 옵션
flag.String명령줄 옵션을 받은 뒤 문자열로 저장
flag.Int명령줄 옵션을 받은 뒤 정수로 저장
flag.Float64명령줄 옵션을 받은 뒤 실수로 저장
flag.Bool명령줄 옵션을 받은 뒤 불로 저장
flag.Parse명령줄 옵션(os.Args)의 내용을 각 자료형별로 분석
flag.NFlag명령줄 옵션의 개수를 리턴
flag.Usage명령줄 옵션의 기본 사용법 출력
에러 처리fmt.Errorf형식을 지정하여 error 값을 만듦
log.Fatal에러 로그를 출력하고 프로그램을 완전히 종료
log.Panic시간과 에러 문자열을 출력한 뒤 패닉을 발생시킴
log.Print시간과 에러 메시지를 출력하며 프로그램을 종료하지 않음
단위테스트

단위 테스트는 소스 파일 이름에 _test.go를 붙이고, 함수 이름이 Test로 시작합니다(벤치마크 테스트는 Benchmark로 시작합니다).

package calc

import "testing" // 테스트 코드는 항상 testing 패키지를 가져옴

func TestSum(t *testing.T) { // 함수 이름은 Test로 시작, Test 다음의 함수 첫 글자는 대문자, 매개변수는 *testing.T
	r := Sum(1, 2) // 덧셈 함수로 1과 2를 더하면 결과는 3이 나와야 함
	if r != 3 {    // 3이 아닐 때는 테스트 실패
		t.Error("결괏값이 3이 아닙니다. r=", r) // 에러 발생
	}
}

func BenchmarkSum(b *testing.B) {
	for i := 0; i < b.N; i++ {
		Sum(1, 2)
	}
}

go test 명령을 실행하여 단위 테스트를 수행합니다.

C 언어 사용

Go 언어에서 C 언어를 사용할 때는 주석 안에 C 언어 코드를 작성하면 됩니다.

package main

/*
#include <stdio.h>

int sum(int a, int b) // 덧셈 함수 작성
{
	return a + b;
}

void hello() // Hello, world! 출력 함수 작성
{
	printf("Hello, world!\n");
}
*/
import "C" // 주석으로 작성한 C 언어 코드 아래에 import "C"를 넣어줌
import "fmt"

func main() {
	var a, b int = 1, 2
	r := C.sum(C.int(a), C.int(b)) // C 언어 함수 sum 호출
	fmt.Println(r)                 // 3

	C.hello() // Hello, world!
}
C 언어와 메모리

C 언어의 메모리는 가비지 컬렉터가 관리하지 않습니다. 따라서 C 언어의 malloc 함수로 메모리를 할당했다면 반드시 free 함수로 해제해야 합니다.

C 언어에서 Go 언어 함수 사용

C 언어에서 Go 언어 함수를 사용할 때는 함수위에 //export를 설정해주고, 주석 안에서 extern으로 선언해줍니다.

package main

/*
#include <stdio.h>

extern int sum(int a, int b); // Go 언어의 함수는 extern으로 선언

static inline void CExample() {
	int r = sum(1, 2); // Go 언어의 sum 함수 호출
	printf("%d\n", r);
}
*/
import "C"

//export sum
func sum(a, b C.int) C.int { // C 언어에서 사용할 수 있도록 매개변수와 리턴값 자료형을
                             // C 언어용으로 맞춰줌
	return a + b
}

func main() {
	C.CExample()
}
C 언어 컴파일 옵션

C 언어의 컴파일 옵션은 #cgo를 사용하여 설정합니다.

#cgo CFLAGS: -DHELLO_DEBUG=1 -I /home/pyrasis/hello/include
#cgo LDFLAGS: -L /home/pyrasis/hello/lib -lhello
#cgo LDFLAGS: -lz

저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.

Published

2015-06-01