쉽고 빠른 Go 시작하기(2)

이지수·2022년 10월 18일
0

Backend Loadmap

목록 보기
8/22
post-thumbnail

go의 기본적인 이론입니다.

상수와 변수(const, var)

package main

import (
	"fmt"
)

func main() {
	// 상수
	const name string = "jisoo"
	fmt.Println(name)

	// 변수
	// var mbti string = "infp"
	mbti := "infp" // 축약코드
	mbti = "infj"
	fmt.Println(mbti)
}

// jisoo
// infj

축약코드를 사용할 경우 go가 변수의 타입을 자동으로 지정해줍니다.
축약코드는 func 안에서만 사용 가능하고 변수에만 적용 가능합니다.

함수(func)

package main

import (
	"fmt"
	"strings"
)

func multiply(a, b int) int { // (a, b 모두 int type) return type
	return a * b
}

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

func repeatMe(name ...string) { // 여러개의 argument
	fmt.Println(name)
}

func main() {
	// 함수
	fmt.Println(multiply(2, 2))

	totalLength, upperName := lenAndUpper("jisoo")
	fmt.Println(totalLength, upperName)

	repeatMe("lee", "jisoo")
}

// 4
// 5 JISOO
// [lee jisoo]

naked return

package main

import (
	"fmt"
	"strings"
)

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

func main() {
	totalLength, upperName := lenAndUpper("jisoo")
	fmt.Println(totalLength, upperName)
}

// 5 JISOO

defer

package main

import (
	"fmt"
	"strings"
)

func lenAndUpper(name string) (length int, uppercase string) { // return 값 정의
	defer fmt.Println("I'm done") // function이 끝나고 이 코드를 실행시킨다.
	length = len(name)
	uppercase = strings.ToUpper(name)
	return
}

func main() {
	totalLength, upperName := lenAndUpper("jisoo")
	fmt.Println(totalLength, upperName)
}

// I'm done
// 5 JISOO

루프(for)

range

package main

import (
	"fmt"
	"strings"
)

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

func main() {
	// 루프
	result := superAdd(1, 2, 3, 4, 5, 6)
	fmt.Println(result)
}

// 21

조건

if

package main

import (
	"fmt"
	"strings"
)

func canIDrink(age int) bool {
	// koreanAge := age + 2;
	// if koreanAge < 20 {
	if koreanAge := age + 2; koreanAge < 20 { // if만을 위한 변수 생성
		return false
	}
	return true
}

func main() {
	// 조건
	fmt.Println(canIDrink(18))
}

// true

switch

package main

import (
	"fmt"
	"strings"
)

func canIDrink(age int) bool {
	switch age {
	case 10:
		return false
	case 18:
		return true
	}
	return false
}

func main() {
	// 조건
	fmt.Println(canIDrink(18))
}

// true

포인터

package main

import (
	"fmt"
)

func main() {
	// 포인터
	a := 2
	b := &a // b를 a의 메모리 주소와 연결(a와 b의 메모리 주소가 같다)
	*b = 20
	fmt.Println(a)
}

// 20

위 코드에서 b는 a를 살펴보는 포인터 역할입니다.

배열(slice)

package main

import (
	"fmt"
)

func main() {
	// 배열
	names := []string{"jisoo", "lee", "js"}
	names = append(names, "jslee")
	fmt.Println(names)
}

// [jisoo lee js jslee]

append()는 변수 값을 바꾸지 않고 실행된 결과값을 반환합니다.

Map

package main

import (
	"fmt"
)

func main() {
	// Map
	jisoo := map[string]string{"name": "jisoo", "language": "go"}
	for _, value := range jisoo {
		fmt.Println(value)
	}
}

// jisoo
// go

go에서 map은 key, value 값을 갖는 해시테이블 입니다.

구조체(struct)

package main

import (
	"fmt"
)

type person struct {
	name    string
	age     int
	favFood []string
}

func main() {
	// 구조체
	favFood := []string{"kimchi", "taco"}
	js := person{name: "jisoo", age: 18, favFood: favFood}
	fmt.Println(js.name)
}

// jisoo

go는 class나 object가 없습니다.
python의 __init__이나 javascript의 constructor() 같은 constructor가 없습니다. 직접 constructor를 실행해야 합니다.

참고
쉽고 빠른 Go 시작하기

0개의 댓글