새 프로젝트를 시작하기

디렉토리를 만들고 git 초기화를 한다.

mkdir hello
cd hello
git init

모듈 초기화를 한다.

go mod hello

에디터로 편집을 시작한다.

vim main.go

연산자

Arithmetic operators

https://golang.org/ref/spec#Arithmetic_operators

+    sum                    integers, floats, complex values, strings
-    difference             integers, floats, complex values
*    product                integers, floats, complex values
/    quotient               integers, floats, complex values
%    remainder              integers

&    bitwise AND            integers
|    bitwise OR             integers
^    bitwise XOR            integers
&^   bit clear (AND NOT)    integers

<<   left shift             integer << unsigned integer
>>   right shift            integer >> unsigned integer

Operator precedence

https://golang.org/ref/spec#Operator_precedence

연산자 우선순위는 다음과 같다.

Precedence    Operator
    5             *  /  %  <<  >>  &  &^
    4             +  -  |  ^
    3             ==  !=  <  <=  >  >=
    2             &&
    1             ||

getter와 setter

Effective Go - Getters

  • golang은 자동 getter/setter를 지원하지 않는다.
  • getter
    • getter를 만들 때에는 get을 쓰지 않는다.
    • 그냥 해당 변수명을 메소드 이름으로 쓰면 된다.
    • 예) foo에 대한 getter는 Foo().
      • getFoo()가 아니다.
  • setter
    • setter는 SetFoo()와 같이 만들면 된다.

interface

naming

Effective Go - Interface names

  • one-method interface 이름은 메소드 이름에 er을 붙여 만든다.
    • Read 메소드가 하나 있다면 인터페이스 이름은 Reader.

golang에서의 toString은?

fmt 패키지의 print.go를 열어보면 Stringer 인터페이스가 있다.

// Stringer is implemented by any value that has a String method,
// which defines the ``native'' format for that value.
// The String method is used to print values passed as an operand
// to any format that accepts a string or to an unformatted printer
// such as Print.
type Stringer interface {
	String() string
}

Stringer 인터페이스에는 String()이 있고, 이것이 toString 의 역할을 한다.

다음 코드를 실행해보면 확인할 수 있다.

package main

import "fmt"

type binary int

func (b binary) String() string {
	return fmt.Sprintf("%b", b)
}

func main() {
	fmt.Println(binary(8))  // 1000
}