Go 는 객체지향 언어인가? 어떤 사람은 Go 언어는 객체지향 언어가 아니라고 말합니다. 그 이유는 객체지향 언어들의 특징인 상속을 지원하지 않기 때문입니다. 결론부터 말씀드리자면 Go 언어는 객체지향 언어입니다. 객체지향 언어는 상속 지원 여부보다, 말 그대로 객체 간의 상호작용을 중심으로 한 프로그래밍에 있습니다. Go 언어는 상속을 지원하는 다른 언어보다 발전한 형태의 객체지향 언어입니다. 그 이유는 상속이 객체지향 설계를 깰 수 있는 많은 문제점을 갖고 있는데, 이를 지원하지 않아 문제를 미연에 방지했기 때문입니다. 상속 상속(inheritance)이란 기존 객체를 확장하여 새로운 객체를 정의하는 기능을 말합니다. 프로그래밍을 할 때 공통으로 포함되는 기능을 여러 객체가 공유해야 하는 경우가 발생..
배열과 슬라이스 슬라이스는 Go 언어에서 주로 동적 배열 용도로 많이 사용됩니다. 즉, 크기가 계속 늘어날 때 슬라이스를 사용합니다. 하지만 슬라이스 본래 정의는 배열 일부분을 가리키는 타입으로 배열 포인터라고 볼 수 있습니다. 그래서 슬라이스는 항상 다른 배열의 일부분을 가리키고 있다는 점을 명심해야 합니다.type SliceHeader struct { Data uintptr Len int Cap int} 슬라이스의 구조체는 위와 같은 필드를 갖고 있습니다.var array [10]intvar slice []int = array[1:3] // [1, 2, 3]var slice []int = array[1:3:5] // [1, 2, 3] + 1자리 => Cap(4) 슬라이싱의 첫 번째..
테스트와 벤치마크 Go 언어는 테스트 코드 작성과 실행을 언어 자체에서 지원합니다. 빠르고 손쉽게 테스트 코드를 작성할 수 있어 버그를 사전에 막는 데 효과적입니다. 다음의 3가지 표현 규약을 따라 테스트 코드를 작성해야 합니다.파일명이 _test.go 로 끝나야 합니다.testing 패키지를 import해야 합니다.테스트 코드는 func TestXxxx(t *testing.T) 형태여야 합니다.다음은 테스트 코드 예시입니다.// sample.gopackage mainimport "fmt"func squre(x int) int { return x * x}func main() { fmt.Printf(square(9)}// sample_test.gopackage mainimport "testing..
함수 고급 가변 인수 함수 fmt 패키지의 Println() 함수와 같이 인수의 개수가 정해져 있지 않은 함수를 가변 인수 함수라고 합니다.인수 타입 앞에 ...를 붙여서 해당 타입 인수를 여러 개 받는 가변 인수임을 표시하면 됩니다.package mainfunc sum(nums ...int) int { //}func Print(args ...interface{}) string { //}여러 타입의 인수를 가변 인수로 받으려면 모든 타입이 구현하고 있는 빈 인터페이스를 사용하면 됩니다. defer 지연 실행 때론 함수가 종료되기 직전에 실행돼야 하는 코드가 있을 수 있습니다. 대표적으로 파일이나 소켓 핸들처럼 OS 내부 자원을 사용하는 경우입니다. 파일을 생성하거나 읽을 때 OS에 파일 앤들..