[ go ] go 문법


main.go

main은 컴파일을 위해서 필요한 것이다. 그래서 main함수가 없으면 컴파일이 되지 않는다



fmt

fomatting을 위한 package이다.

fmt.Println("");

에서 왜 Println은 대문자일까?

자바, 파리썬, 자바스크립트 모두 무언가를 import할 때는 import ‘xxx’ from ‘xxx’ 이런식으로 import를 하고

모듈을 export 해야한다. (일일히 선언을 해주어야 한다)

Go에서는 만약 function을 export하고 싶다면 function 앞글자를 대문자로 써주면 된다.

즉, 대문자로 쓰여진 함수들은 다른 패키지로부터 export된것이라고 보면 된다.



변수와 상수

Go는 type언어이므로 ‘타입이 무엇이다’라는 것을 알려주어야 한다. Java 나 C처럼..

JS와 비슷하게 상수는 go에서도 const로 지정해줄 수 있다. JS와 마찬가지로 새로운 값을 할당하는 것은 할 수 없다.

한번 선언이 되면 변하지 않는다.

변수는 let이라고 생각하면 되는데, go에서는 변수를 var로 사용한다.

func main(){
	var name string = "sora"
	name = "sera"
	fmt.Println(name)
}

이라고 가능하지 아래와 같이 바꿔 쓸 수도 있다

func main(){
	name := "sora"
	name = "sera"	
	fmt.Println(name)
}

첫번째 값의 type에 의존하여 두번째 값의 type도 정해지기 때문에 만약

name := false 라면 에러가 뜰 것이다. name = "sera" 코드는 타입 불일치로 에러가 뜰 것이다.

또한, 이러한 변수 축약문은 func안에서만 작동한다.



type

Go타입에는 크게 3가지가 있다.

https://go101.org/article/type-system-overview.html

string bool 여러가지 숫자형식이 포함된 numeric types 이렇게 3가지이다



functions(return)

return

func multiply(a,b int) int {
	return a * b
}

func main(){
	fmt.Println(multiply(2,2))
}

리턴값은 argument와 { 사이에 선언된다. TypeScript와 매우 비슷



ignore value

func lenAndUpper() (int, string) {
	return len(name), strings.ToUpper(name)
}

fun main(){
	totalLength, _ := lenAndUpper("sora")
	fmt.Println(totalLength);
}

_ 처리 된 부분은 컴파일이 되지 않기때문에 무시됨



Variadic Function

func repeatMe(words ...string){
	fmt.Printls(words)	//[sora sera chandler joey]
}

func main(){
	repeatMe('sora','sera','chandler','joey')	//
}

JS 스프레드처럼 ...을 사용하면 여러variables를 return할 수 있다



naked return : return 할 variable을 굳이 명시하지 않아도 됨

func lenAndUpper(name string) (length int, uppercase string) {
	length = len(name)
	uppercase = strings.ToUpper(name)
	return
}

fun main(){
	totalLength, up := lenAndUpper("sora")
	fmt.Println(totalLength, up);
}

naked return이 성립되려면 return값 위치인 length와 코드 실행부분의 length의 이름이 같아야 한다.

return값이 명시되는게 좋을 수도 있기 때문에 굳이 써야하는 기능은 아니지만 이런 기능이 있다는것을 알아두면 좋음



for

Go에서 반복문은 유일하게 for밖에 없다. for in, for of, forEach, map 등 아무것도 없고 온리 for만 존재함,

func superAdd(numbers ...int) int {
	for index, number := range numbers {
    fmt.Println(numbers[i])
  }
  return 1
}
func superAdd(numbers ...int) int {
	for i := 0; i < len(numbers); i++{
    fmt.Println(numbers[i])
  }
  return 1
}

예시를 하나 더 보자. Ignore value를 이용해서

func superAdd(numbers ...int) int {
	total := 0
	for _, number := range numbers {
    total += number
  }
  return total	//21
}



If

func canIDrink(age int) bool {
	if age < 18 {
		return false
	}
	return true
}

func main(){
	fmt.Println(canIDring(18))
}

go에서는 variable expression을 사용할 수 있는데, ` variable expression` 이 뭐냐면

if문 안에다가 variable을 생성할 수 있는거다..!

그래서 아래와 같이 사용할 수 있다

func canIDrink(age int) bool {
	if koreanAge := age + 2; age < 18 {		
		return false
	}
	return true
}

func main(){
	fmt.Println(canIDring(18))
}
if koreanAge := age + 2; age < 18 {		
  return false
}

이 코드는

koreanAge := age + 2
if koreanAge < 18 {		
  return false
}

이 코드와 같다.




© 2018. by sora

Powered by sora