• 예약된 키워드

    • break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var
  • 기본 변수 선언 방법

    • // default var a,b,c int var b = 5 // shortcut // local a := 5 //const const hi = "HI" const ( //multi hi = "HI" hi2 = "HI2" )
  • package

    • Access modifier는 패키지 레벨로만 제어가 가능하다 → 패키지는 항상 최상위 레벨로만 취급된다
    • 패키지명이 main 인 경우 실행가능한 프로그램으로 인식한다 → main 패키지의 main 함수를 시작함
    • 패키지 내의 init() 함수는 패키지가 로드되면 실행된다
  • Access modifier

    • Public: 변수, 상수, 메서드의 첫 글자가 대문자인 경우
    • Private: 변수, 상수, 메서드의 첫 글자가 소문자인 경우
  • Data Type

    • String
      • 불변 문자열
      • "" Double Quote를 이용한 일반 String 선언 => \n 을 NewLine으로 해석
    • bool: true, false의 값을 가진 참, 거짓
    • int / uint
      • 정수형
      • 가장 뒤에 8, 16, 32 ,64를 붙여 bit를 표현가능하다 → 없는 경우 OS 시스템에 따라 달라진다
    • byte: uint8 의 alias
    • rune: int32의 alias
    • float: 실수형. 32, 64 비트의 두 형식이 존재한다
  • Type

    • Interface type의 x와 타입 T에 대하여 x.(T)로 표현했을 때, 이는 x가 nil이 아니며, x는 T 타입에 속한다는 점을 확인(assert)하는 것으로 이러한 표현을 "Type Assertion"이라 부른다
    • Type Conversion
      • 암묵적인 변환 불가
      • Runtime에 에러 발생!!
      • 변환할 타입의 함수처럼 사용한다
      • str := "ABC" bytes := []byte(str)
  • Operator

    • 산술 연산자: +, -, *, /, ++, -- 전부 가능하다
    • 관계 연산자: ==, !=, >=, <=
    • 논리 연산자: &&, || , !
    • 포인터 연산자
      • var a int = 1 var b = &a // b는 a의 주소를 가진다 var c = *b // a 주소의 실제값을 가진다
  • 함수

    • 기본적으로 Pass By Value 형식이다

    • 시그니처 형태

    • 리턴 타입에 parameterName 을 부여하여 코드 내에서 사용이 가능하다

    • func functionName(parameterName type) returnType { } func functionName(parameterName type) (returnType, returnType2 ) { //return이 2개 이상인 경우 }

    • 동일한 패키지 안에서 타입의 확장 함수를 작성 가능하다 = Value receiver

    • 다만 type의 값을 변경해야 하거나 값 복사가 필요하지 않다면 Point receiver 를 사용하라

    • type MyFloat float64 func (f MyFloat) Abs() float64 { if f < 0 { return float64(-f) } return float64(f) } func (f *MyFloat) Scale(f float64) { f = 2 } f := MyFloat(1) fmt.Println(f.Abs()) fmt.Println(f.Scale())

  • struct

    • C++에서 알고 있는 것처럼 필드만 가진 type
    • 덕 타이핑을 통해 struct를 class 처럼 활용가능하다
    • type Dog struct { S string }
  • interface

    • method 선언의 모음

    • 덕 타이핑 스타일을 사용한다

    • type Animal Interface{ Bark() string } type Dog struct { S string } func (dog Dog) Bark() string { fmt.Println(dog.S) } var animal Animal = Dog { "hi" }

    • 파라미터로 모든 인터페이스를 나타내기 위한 방법

    • func name(v interface{}) returnType;

  • 분기문

    • If , else if , else

      • if, else if 문 다음에 반드시 condition이 조건으로 와야한다
      • if a == 1 { } else if a == 2 { }
    • Switch / Case

      • Break문이 필요하지 않다
      • switch 조건에 expression 사용이 가능하다
      • switch val.a() { case 1: ... case 2: ... default: ... }