쉽고 빠른 Go 시작하기 - #1 THEORY

2022. 3. 25. 22:52· 스터디📖/Go
목차
  1. 1.0 Main Package
  2. 1.1 Packages and Imports
  3. 1.2 Variables and Constants
  4. 1.3 Functions part One
  5. 1.4 Functions part Two
  6. 1.5 for, range, ...args
  7. 1.6 If with a Twist
  8. 1.7 Switch
  9. 1.8 Pointers!
  10. 1.9 Arrays and Slices
  11. 1.10 Maps
  12. 1.11 Structs

https://nomadcoders.co/go-for-beginners/lobby

 

쉽고 빠른 Go 시작하기 – 노마드 코더 Nomad Coders

Go for Beginners

nomadcoders.co

해당 강의를 들으면서 GO 스터디를 학기 중에 진행하게되었다.

바빠 죽겠지만.. 시작..

이전 게시글에서 환경설정하는 부분은 끝마쳤고 이제 본격적으로 프로그래밍에 들어간다.


1.0 Main Package

main 이 entry point라서 컴파일러는 패키지 이름이 main인 것부터 찾아내서 컴파일함
GO에서는 package name을 작성해주어야 함.
func main() -> Go 프로그램의 시작점.
main package의 main function에서 시작.
main.go 패키지 작성 -> 컴파일 됨.

실행 하려면 go run main.go

// main.go
package main

import "fmt"

func main() { // things only to compile
    fmt.Println("Hello world!")
}

1.1 Packages and Imports

fmt는 Go 가 가지고 있는 package -> vscode에서는 자동으로 import가 생성되고삭제됨.

대문자로 시작하는 function은 export function.. 소문자로 시작하는 function은 private이라 다른 패키지에서 접근안됨.

package something

import "fmt"

func sayBye() {
    fmt.Println("Bye")
}

func SayHello() {
    fmt.Println("Hello")
}

1.2 Variables and Constants

package main

func main() {
    const name sring = "jiyong" // 상수 -> 거의 사용하지 않음
    var name2 string = "gd"
    name2 := "gd" // Go가 type을 알아서 찾아줌. function안에서만 작동하는 축약형표현
}

1.3 Functions part One

func multiply(a int, b int) int { // (a, b int) 도 가능
    return a * b
}

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

function can return multiple value

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

func main() {
    totalLength, upperName := lenAndUpper("jiyong")
    // totalLength, _ := lenAndUpper("jiyong") // _ 는 ignore value
}

go 에서 variable을 만들고 사용하지 않으면 error 발생

unlimited arguments를 받는 방법

func repeatMe(words ...string) {
}

func main() {
    repeatMe("a", "b", "c")
}

1.4 Functions part Two

naked return

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

defer
function이 끝났을 때 실행되는 코드

func lenAndUpper(name string) (length int, uppercase string) {
    defer fmt.Println("I'm done")
    length = len(name)
    uppercase = strings.ToUpper(name)
    return
}

1.5 for, range, ...args

loop 은 오직 for 를 사용해야함.

func superAdd(numbers ...int) int {
    total := 0
    for index, number := range numbers { // java의 for-Each 같은 기능..
        fmt.Println(index, number)
        total += number
    }

    // for i := 0; i < len(numbers); i++ {
    //     fmt.Println(numbers[i])
    // }
    return total
}

1.6 If with a Twist

func calIDrink(age int) bool {
    if koreanAge := age + 2; koreanAge < 18 { // variable expression
        return false
    } else {
        return true
    }
}

1.7 Switch

func calIDrink(age int) bool {
    switch koreanAge := age + 2; koreanAge {
    case 10:
        return false
    case 18:
        return true
    }
    return false
}

1.8 Pointers!

& : memory a ddress

  • : value of the memory address
    b를 이용해서 a의 값 업데이트
    func main() {
    a := 2
    b := &a
    *b = 20
    fmt.Println(a) // 20
    }

1.9 Arrays and Slices

array 만들 때 길이와 타입을 명시해줘야 함
길이 제한 없이 쓰고 싶을 때는 Slice 사용

func main() {
    names := [5]string {"a", "b", "c"}
    names[3] = "d"
    names[4] = "e"

    names2 = []string{"a", "b", "c"}
    names2 = append(names2, "d") // slice에 원소 추가할 때는 append 함수 사용
    // names2를 modify 하지 않고 새로운 슬라이스를 리턴함
}

1.10 Maps

func main() {
    nico := map[string]string{"name":"nico", "age":"23"} // key-value

    for key, value := range nico {
        fmt.Println(key, value)
    }
}

1.11 Structs

struct

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

func main() {
    favFood := []string{"sushi", "ramen"}
    nico := person{name: "nico", age: 18, favFood: favFood} // nico := person("nico", 18, favFood}
}

Go doesn't have a constructor method

저작자표시 (새창열림)

'스터디📖 > Go' 카테고리의 다른 글

쉽고 빠른 Go 시작하기 - #2 BANK & DICTIONARY PROJECTS  (0) 2022.04.01
WSL2 에서 GO 설치하기  (0) 2022.03.22
  1. 1.0 Main Package
  2. 1.1 Packages and Imports
  3. 1.2 Variables and Constants
  4. 1.3 Functions part One
  5. 1.4 Functions part Two
  6. 1.5 for, range, ...args
  7. 1.6 If with a Twist
  8. 1.7 Switch
  9. 1.8 Pointers!
  10. 1.9 Arrays and Slices
  11. 1.10 Maps
  12. 1.11 Structs
'스터디📖/Go' 카테고리의 다른 글
  • 쉽고 빠른 Go 시작하기 - #2 BANK & DICTIONARY PROJECTS
  • WSL2 에서 GO 설치하기
호프
호프
호프
Untitled
호프
전체
오늘
어제
  • 분류 전체보기 (341)
    • 오류😬 (4)
    • 스터디📖 (96)
      • 웹 개발 기초 (8)
      • Spring (20)
      • ML, DL (30)
      • Node.js (22)
      • React (0)
      • 블록체인 (12)
      • Go (3)
      • Javascript (1)
    • 알고리즘💻 (153)
      • 그리디 (23)
      • Bruteforce&Backtracking (16)
      • DP (17)
      • 이분탐색&정렬&분할정복 (17)
      • 누적합&투포인터 (6)
      • 스택&큐&덱 (19)
      • 그래프(DFS&BFS) (19)
      • 트리 (7)
      • 우선순위큐&다익스트라 (11)
      • 벨만포드&플로이드와샬 (8)
      • map&set&number theory (5)
      • 기타 (5)
    • 프로젝트 (3)
      • 캡스톤 디자인 프로젝트 (3)
    • 블록체인🔗 (3)
      • Solana (2)
      • 개발 (0)
      • Harmony (1)
    • ASC (6)
    • CS (73)
      • 데이터베이스 (12)
      • 클라우드컴퓨팅 (21)
      • 운영체제 (11)
      • 컴퓨터네트워크 (14)
      • 블록체인응용 (15)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 복습

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.1
호프
쉽고 빠른 Go 시작하기 - #1 THEORY
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.