golang에 대한 기본적인 내용에 대해서 설명합니다. 간단한 내용이니 빠르게 진행하겠습니다.
GO의 기본 타입
bool
string
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
byte // alias for uint8
rune // alias for int32
// represents a Unicode code point
float32 float64
complex64 complex128
사용자가 go에서 기본으로 사용할 수 있는 타입을 입니다.
문자열
문자열 리터럴은 ` `(Back Quote) 또는 " "를 통해서 표현 할 수 있습니다.
` `(Back Quote)은 여러 줄을 표현할 수 있습니다.
str1 := `나의 살던 고향은
꽃피는 산골`
fmt.Println(str1)
str2 := "학교종이 땡땡땡\n" +
"어서 모이자 \n"
fmt.Println(str2)
변 수
// go에서 변수 사용하기
// <var> <변수명> <타입> 순서대로
var ia int
ia = 10
var i, j, k int = 1, 2, 3
go에서 변수를 선언하는 기본적인 방식은 var <변수명> <타입> 입니다.
예를 들면 var ia int는 "int형 변수 ia"를 뜻합니다.
변수의 초기값을 지정하지 않으면 Zero값로 설정됩니다.
// ia는 정수형으로 추론
var ia = 10
// s는 string으로 추론됩니다.
var s = "string"
fmt.Printf("ia = %d, s = %s\n", ia, s)
var는 c++의 auto와 비슷해서 타입 추론이 가능합니다. var로 선언하고 변수명 초기값을 설정하면 초기값에 의해서
타입이 추론되서 사용할 수 있습니다.
// 함수밖에서 선언하는건 에러!
ss := "outer string"
fun innerfun(){
// ia는 정수형으로 추론
ia := 10
// s는 string으로 추론됩니다.
s := "string"
}
:=를 통해서 함수내에서는 var를 생략할 수 있습니다. 함수내에서는 대부분 이 형식을 통해서 선언하는 것이
가독성면이나 작성 비용면에서 유리합니다.
상 수
go에서 문자열, 문자, boolean, 숫자 값은 상수가 될 수 있습니다.
// const PI float = 3.14 동일
const PI = 3.14
상수는 변수와 비슷하게 선언 할 수 있는데 변수와 다른 점은 const 키워드를 붙여야 합니다.
const (
Visa = "Visa"
Master = "MasterCard"
Amex = "American Express"
)
여러개의 상수를 선언 할때는 ( )로 묶어서 관리할 수 있습니다.
형 변환
i := 42
// i -> float64 변환
f := float64(i)
// f -> uint로 변환
u := uint(f)
위와 같은 형식으로 형변환을 할 수 있습니다.
함수
golang에서 함수의 선언은 c++과는 순서가 다릅니다.
// func 함수라는 선언
// func 함수명(파라미터) 리턴값 {
// }
func add(x int, y int) int {
return x + y
}
// 파라미터 : x int, y int
func add(x, y int) int {
return x + y
}
우선 함수를 선언할 때는 func 키워드를 통해서 함수라고 알린 후 "함수명 (파라미터) 리턴값"의 순서대로 선언합니다.
밑에서 배우겟지만 go는 리턴 값도 파라미터를 가질 수 있으며 여러개의 리턴값을 가질 수 있습니다.
// 값에 의한 전달
func ByValue(msg string) {
println("ByValue =", &msg)
}
// 참조에 의한 전달
// c++과는 호출쪽에서도 명시적으로 값을 넘김
func ByReference(msg *string) {
println("ByReference =", msg)
}
func main() {
str := "hello"
println("origin str :", &str)
ByValue(str)
ByReference(&str)
}
c++과 마찬가지로 함수 파라미터를 통해서 값으로의 전달, 참조로의 전달이 가능합니다.
호출쪽에서도 명시적으로 참조에 의한 호출인지 인지 할 수 있습니다.
가변인자 함수
func main() {
// 하나의 인자를 사용
variadicFunc("one")
// 4개의 인자를 사용
variadicFunc("one", "two", "three", "four")
}
// 가변인자 함수
// ...를 사용해서 가변인자인지 알립니다.
func variadicFunc(args ...string) {
for _, s := range args {
println(s)
}
}
함수 호출시 고정된 갯수의 인자가 아닌 다양한 갯수의 인자를 전달 하려면 가변인자를 알리는 ... 를 사용해서
인수를 선언합니다. 예제에서는 string을 가변인자로 받는 variadicFun 함수를 보여줍니다.
함수의 리턴값
go는 c++과는 다르게 함수의 리턴 값이 여러개 일 수도 있습니다.
func variadicFunc(args ...string) (int, string) {
ret := ""
for _, s := range args {
ret += s
}
return len(args), ret
}
추가적으로 여러개의 리턴 값을 리턴하게 되면 사용자는 코드가 복잡해 지는 것을 방지하기 위해서
Named Return Parameter기능을 지원합니다.
// nums와 ret가 Named return parameter로 지정되었음
func variadicFunc(args ...string) (nums int, ret string) {
nums = len(args)
for _, s := range args {
ret += s
}
// return시 nums, ret 자동으로 리턴!!!
return
}
func main() {
nums, strings := variadicFunc("one ", "two ", "three ")
println(nums, strings)
}
Named Return Parameter기능은 간단하게 리턴 값에 파라미터를 지정해서 함수내에서 해당 파라미터를 사용할 수
있게 합니다.
이미 리턴값에 대해서 상단에서 명시했기 때문에 함수 수행이 끝날 때 사용자는 빈 return을 호출 하게 되면
Named Return Parameter로 지정된 파라미터 값이 자동으로 리턴됩니다.
반복문
go의 반복문은 for를 통해서 모두 구현되어 있습니다.
sum := 0
for i := 1; i <= 100; i++ {
sum += i
}
println(sum)
c++의 기본 for문과 비슷한 스타일의 반복문입니다.
";"를 기준으로 (초기값; 반복조건; 다음행 시작시 수행동작)으로 셋팅됩니다.
// c++ while문과 같은 반복문
n := 1
for n < 100 {
n *= 2
}
println(n)
c++의 while문과 비슷한 스타일의 반복문입니다. for 다음의 조건문이 충족될 때까지 수행합니다.
for {
fmt.Println("무한 루프 동작!!!")
}
무한 루프 조건문입니다. 행을 빠져 나오지 못하기 때문에 추가적인 작업으로 루프를 빠져나오는 구문을
구현 해야 합니다.
stocks := []string{"Apple", "Amajon", "Google"}
for index, name := range stocks {
println(index, name)
}
c++의 foreach와 같이 컬렉션에서 데이터를 추출하여 반복 수행문을 수행하는 로직입니다.
range를 통해서 for을 수행하면 행마다 인덱스와 value를 전달 받습니다.
stocks := []string{"Apple", "Amajon", "Google"}
for _, name := range stocks {
println( name)
}
만약에 인덱스를 사용하지 않는다면 인덱스 위치에 "_"를 통해서 해당 변수를 받지 않도록 설정할 수 있습니다.
추가적으로 for문 내에서는 c++과 동일하게 continue, break문을 사용할 수 있습니다.
c++에 익숙하지 않은 신분들을 위해서 간단하게 키워드 설명을 드립니다.
키워드 | |
continue | 반복문에서 현재 수행을 멈추고 다음 수행문으로 넘어갑니다. |
break | 반복문을 빠져 나옵니다. |
참고 사이트
'golang' 카테고리의 다른 글
[golang] goroutines (0) | 2020.04.05 |
---|---|
[golang] 구조체, 메서드, 인터페이스 (0) | 2020.04.03 |
[golang] 익명함수, 클로져, Array, Slice, Map (0) | 2020.04.01 |
[golang] Package, Import (0) | 2020.03.29 |
[golang] Window golang 개발 환경 구축하기 (0) | 2020.03.29 |