map Go에서 기본으로 제공하는 map은 Hash Map 구조를 가진다. // map[키]값 dict := map[int]string{ 1: "one", 2: "two", } dict[3] = "three" {중괄호} 안에서 초기화하거나 키를 이용해 값을 삽입할 수 있다. dict := map[int]string{ 1: "one", 2: "two", } val, exist := dict[5] if !exist { fmt.Println("dict[5] doesn't exist") } else { fmt.Println(val) } // dict[5] doesn't exist 키로 값을 가져올 때, 값과 존재 여부를 반환한다. for key, value := range dict { fmt.Printf("%d..
defer defer는 함수가 종료될 때 실행한다. func Test() { fmt.Println("--Begin--") defer fmt.Println("111") defer fmt.Println("222") defer fmt.Println("333") fmt.Println("--End--") /* --Begin-- * --End-- * 333 * 222 * 111 */ } defer 문이 '--End--'보다 먼저 선언되었지만 함수 마지막에 실행된다. defer 문이 여러 개일 때는 stack처럼 동작된다. panic panic은 오류가 발생했을 때 프로그램을 중지시키고 defer 문이 실행된다. func WriteTxt(file, sentence string) { f, err := os.Create..
Interface 인터페이스는 OOP에서 다형성을 형성하고 결합도를 낮추기 위해 사용되는 추상화 기법이다. type SampleInterface interface { PrintMember() // Method(s string) // Method(n1, n2 int) int } type ABInterface interface { AInterface BInterface } interface 명령어를 통해 인터페이스를 생성한다. 일반적으로 내부에 구현될 메서드를 선언해야 한다. 그런데 인터페이스 내부에 인터페이스를 담기도 한다. Interface 기본값 interface는 추상화된 개념이기 때문에 그 자체로는 nil 타입을 가진다. func main() { var itf SampleInterface fmt.P..
except* & ExceptionGroup except*와 ExceptionGroup이라는 새로운 문법이 추가되었다. try: raise ExceptionGroup("Group1", [TypeError("a"), ValueError("b")]) except* TypeError as e: print(f"Error: {e!r}") except* ValueError as e: print(f"Error: {e!r}") """ Error: ExceptionGroup('Group1', [TypeError('a')]) Error: ExceptionGroup('Group1', [ValueError('b')]) """ ExceptionGroup을 통해 여러 에러를 동시에 처리할 수 있도록 하는 것이 가능해졌다. exp..
Go는 배열과 슬라이스 2개의 자료형을 제공한다. 슬라이스 배열은 한 번 초기화된 길이를 수정할 수 없다. 슬라이스는 {포인터, len, cap} 3가지 값을 가진다. 포인터: 실제 배열이 저장되어 있는 주소 값을 가리키는 포인터 len: (length) 실제 데이터가 저장된 길이 cap: (capacity) 데이터를 저장할 수 있는 최대 길이 만약 cap이 5이고 len이 3인 슬라이스가 있다면 아래와 같은 형태이다. x x x 슬라이스에 내용을 추가할 때, cap에 빈자리가 있으면 빈자리에 내용을 채우고, 그렇지 않으면 새로운 배열을 생성한 후 가리킨다. 자세한 내용은 아래에 기록하였다. 초기화 // 배열 arr := [...]int{1, 2, 3} arr := [3]int{1, 2, 3} // 슬라..
Private / Public Go는 단순히 대문자로 시작하면 Public, 소문자로 시작하면 private으로 선언된다. private으로 선언되면 같은 패키지 범위에 있는 경우에만 접근할 수 있다. 객체명, 객체 멤버 모두 대소문자를 활용해 범위를 제한한다. func function() {} // private func Function() {} // public 메서드 생성 func (인스턴스명 객체명) 메서드명() 반환값 {} 일반 함수 선언문에서 (인스턴스명 객체)가 추가된다. 예를 들어 Object라는 객체를 정의했다면 아래와 같이 사용한다. func (obj Object) method() { obj.~ // 객체를 활용한 조작 } 예제 Project |--main.go |--objects |-..