package main import "fmt" func main() { fmt.Printf("Hello World") }
test.go 로 저장
File 실행
"Shift" + "F10" > Run
출력물 확인
Build Output 창에 Hello World 뜨면 성공 (exe 파일도 생성됨)
< Go Lang 문법 >
1. 세미콜론(;)은 옵션 (안 쓰는게 일반적임) 2. 중괄호({})의 시작은 항상 같은 줄에.
1 2 3 4 5 6 7 8
// 가능 func main(){ }
// 에러 func main() { }
3. 들여쓰기는 반드시 탭(Tab) 키를 사용. 4. 주석은 C 스타일 (// 와 /**/) 5. 변수와 상수
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
// 변수 (사용하지 않으면 컴파일 시 에러) var site string="google.com" var site ="google.com"// 자료형 생략 가능 site :="google.com"// :을 이용해서 var 없이 변수 선언 가능 var userCount int=1
// 상수 const userCount int=1
// 한번에 선언 가능 var( site string="google.com" author string="Juseok Yun" userCount int=100 ) print(site +":"+ author +":"+ strconv.Itoa(userCount))// "strconv" Import 필요
6. 연산자(+, -, *, /, …)도 C 스타일 (산술, 비교, 비트) – 대입연산자는 := 하나 더 추가 7. 채널 (Channel) – 고루틴(go 함수명())이 서로 통신하고 변수를 동기화할 수 있는 수단. – Go의 동시성(concurrency) 관련해서 학습 필요.
import( ."fmt"// .을 사용하면 fmt.으로 안 써도 됨 WonHada "os"// 닉네임을 줄 수도 있음 )
func add(a int, b int, c *int){ *c = a + b }
func main(){ var c int add(1,3, &c) Println(c)// Println 바로 사용
d :=new(int) add(1,4, d) Println(*d)
// 일시 정지를 위해 var b []byte=make([]byte,1) WonHada.Stdin.Read(b)// 닉네임 사용 }
9. 조건문은 C 스타일 (if, switch) – 단, switch문이 좀 특이함 – switch문에 break 생략 가능 – case를 연속으로 여러개 사용 불가 (break를 생략할 수 있는 이유) – fallthrough 키워드: 조건에 맞는 case 다음 case 무조건 실행
10. 반복문은 for만 존재, C 스타일 – for i := 0; i < 10; i++ { } - while문 대신 아래 코드처럼 사용
1 2 3 4 5 6
rand.Seed(int64(time.Now().Nanosecond()))// "math/rand"와 "time" Import 필요 i:= rand.Intn(10) fori==5{ println("무한도전") }
11. 배열
1 2 3 4 5
var arr [3]string=[3]string{"Hello","Golang","World"}// 배열 var slice []string=[]string{"Hello","Golang"}// 슬라이스 (크기없는 배열) slice = append(slice,"World")// 마지막 요소 추가 slice = slice[1:]// 첫 번째 요소 제거 fmt.Println(arr[0], strings.Join(slice," "))
12. 맵
1 2 3 4 5 6 7
// _map := map[string]string { // 아래와 같음 var _map map[string]string=map[string]string{ "name":"Kangmin Won", "country":"Korea", "company":"http://theboud.com", } fmt.Println(_map["name"])
//----------------------------------------------// // 인터페이스 (동일한 메소드를 구현한 구조체의 객체를 넘겨서 사용) type Primitive interface{ getWidth()float64 // getHeight() float64 // Rectangle은 이 함수가 없으므로 사용할 수 없음 }
func main(){ var c Circle = Circle{x:1, y:2, r:3} fmt.Println(c.r)
c2 := Circle{2,4,8} fmt.Println(c2.r)
rect := Rectangle{100,200} fmt.Println(rect.getWidth())
p := Primitive(rect) fmt.Println(p.getWidth())
var p2 Primitive = rect
fmt.Println(p2.getWidth())
// 일시 정지를 위해 var b []byte=make([]byte,1) os.Stdin.Read(b)// 닉네임 사용 }