VSCode를 사용하면 자동으로 사용하려는 패키지가 imports 될 것이다.
hello world 예제에서 fmt 패키지의 Println 함수를 작성 할 때 자동으로 import 되는 것을 확인 할 수 있다.
Go에서 export 는 함수이름이나 변수이름 첫 글자를 대문자로 쓰면 export 하겠다는 소리다.
정말 간단하다.
실제로 fmt 패키지에서 사용 할 수 있는 함수 목록을 보면 모두 첫글자가 대문자인걸 확인 할 수 있다.
// 변수
var [변수명] [타입] = "값"
ex) var name string = "이름"
// 상수
const [변수명] [타입] = "값"
ex const NAME string = "name"
int, string, float, bool 이 기본적으로 있고
나머지는 go types 여기를 참고 바란다.
Go 에는 변수를 선언 할 때 축약형이 존재 한다.
주의해야 할 점은 함수 안에서만 사용 할 수 있다. 전역에서는 사용 못한다.
[변수명] := [값]
으로 사용 하면 컴파일러가 값의 타입을 추론해 자동으로 타입을 할당해 준다.
// 전역 공간
food := "rice" 안됨(X)
var food string = "rice" 이것만 가능
func main(){
food := "rice" // food 변수에 string 타입 할당
num := 1 // num 변수에 int 타입 할당
}
func [함수명](arguments) return type {
...
}
func add(a int, b int) int {
return a + b
}
OR
func add(a, b int) int {
return a + b
}
func add(a int, b int) (int, string) {
return a+b, "Add success"
}
func main(){
// value 에는 3이 result 에는 "Add success" 가 받아진다
value, result := add(1, 2)
// _ 를 사용해서 무시 할 수 있다.
value, _ := add(1,2)
}
func repeatMe(words ...string){
fmt.Println(words)
}
func main(){
repeatMe("a", "b", "c", "d")
}
// [a b c d]
func lenAndUpper(name string) (length int, uppercase string){
length = len(name)
uppercase = strings.ToUpper(name)
return
}
func lenAndUpper(name string) (length int, uppercase string){
defer fmt.Println("done")
length = len(name)
uppercase = strings.ToUpper(name)
return
}
func superAdd(numbers ...int) int {
// range 는 array에 loop를 적용할 수 있도록 해준다.
// 기본적으로 index 를 준다.
total := 0
for index, number := range numbers {
total += number
}
return total
}
func main() {
total := superAdd(1,2,3,4,5,6)
}
func canIDrink(age int) bool {
// 조건에 () 가 필요없다.
if age < 18 {
return false
}
return true
}
func canIDrink(age int) bool {
if koreanAge := age + 2; koreanAge < 18 {
return false
}
return true
}
func canIDrink(age int) bool {
switch age {
case 10:
return false
case 18:
return true
}
return true
}
func main(){
a := 2
b := &a
*b = 6
fmt.Println(a)
// 6 출력
}
numbers := [5]int{1,2,3,4}
numbers[4] = 5
// Slice : length 없이 Array 사용
// append 는 직접 값을 수정 하는 것이 아니라 새로운 값을 return 해준다.
numbers := []int{1,2,3,4}
numbers = append(numbers, 5)
me := map[string]string{"name":"byeongmin", "age":"29"}
// print : map[age:29, name:byeongmin]
for key, value := range me {
fmt.Println(key, value)
}
// print : name byeongmin
// age 29
type person struct {
name string
age int
favFood []string
}
func main(){
// 1. 순서대로 값을 넣어줌
favFood := []string{"a", "b"}
me := person{"obm", 29, favFood}
// 2. key 값을 지정하여 작성
me := person{name: "obm", age: 29, favFood: favFood}
}