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 |