go의 기본적인 이론입니다.
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 안에서만 사용 가능하고 변수에만 적용 가능합니다.
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]
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
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
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
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
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를 살펴보는 포인터 역할입니다.
package main
import (
"fmt"
)
func main() {
// 배열
names := []string{"jisoo", "lee", "js"}
names = append(names, "jslee")
fmt.Println(names)
}
// [jisoo lee js jslee]
append()
는 변수 값을 바꾸지 않고 실행된 결과값을 반환합니다.
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 값을 갖는 해시테이블 입니다.
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를 실행해야 합니다.