Go基本文法

20681 ワード

1. Imports and Exports


Vscodeを使用して、自動的に使用するパッケージをインポートします.
hello worldの例では、fmtパッケージのPrintln関数を作成するときに自動的にインポートされることがわかります.
Goでexportとは、関数名または変数名の最初のアルファベットを大文字にして書き出します.
簡単ですね.
実際には、fmtパッケージで使用可能な関数のリストを表示すると、すべての頭文字が大文字であることがわかります.

2.変数と定数


基本

// 변수
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 타입 할당
}

3.関数


関数はfuncキーワードを使用できます。

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]

naked return

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

defer:関数が終わったら何かを実行します

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

4. for, range, ...args


Goはforのみ。

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)
}

5. if with a Twist

func canIDrink(age int) bool {
    // 조건에 () 가 필요없다.
    if age < 18 {
        return false
    }
    return true
}

variableexperission:ifを書いた瞬間にvariableを生成できます。

func canIDrink(age int) bool {
    if koreanAge := age + 2; koreanAge < 18 {
        return false
    }
    return true
}

6. switch


ブレークポイントは必要ありません。

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

7. Pointers


Cに似ている


&アドレス値


*アクセスアドレス

func main(){
    a := 2
    b := &a
    *b = 6
    fmt.Println(a)
    // 6 출력
}

8. Arrays and Slices


arrayにサイズがある


sliceはサイズを動的に割り当てることができます

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)

9. Maps


map[key]value{...}


mapは反復的に使用することもできます。

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

10. Structs

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}
}