Go Language #1 basics - countingmars/countingmars.github.io GitHub Wiki

https://tour.golang.org/basics/1

Package

Go ν”„λ‘œκ·Έλž¨μ€ main νŒ¨ν‚€μ§€κ°€ μ‹€ν–‰μ˜ μ‹œμž‘μ§€μ μ΄λ‹€.
νŒ¨ν‚€μ§€ 선언은 μ΄λ ‡κ²Œ ν•œλ‹€.

package main

λ˜ν•œ main() ν•¨μˆ˜λΆ€ν„° μ‹€ν–‰λœλ‹€.

package main
func main() {
    // entry point of this program
}
Import

λ‹€λ₯Έ νŒ¨ν‚€μ§€λ₯Ό μ‚¬μš©ν•˜λŠ” 방법은 이런 식이닀.

import "math"

이런 방식도 μžˆλ‹€.

import ( 
	"fmt"
	"math"
	"math/rand"
)

factored import 라고 뢈리며, ꢌμž₯λ˜λŠ” 방식이닀.

μž„ν¬νŠΈν•œ νŒ¨ν‚€μ§€μ˜ κΈ°λŠ₯을 μ‚¬μš©ν•˜κ³  μ‹Άλ‹€λ©΄ 이런 식이닀.

fmt.Println(math.Pi)
math.Sqrt(7)
rand.Intn(10)
Exported names

μœ„μ˜ μ½”λ“œλ₯Ό 잘보면 νŒ¨ν‚€μ§€μ˜ ν•¨μˆ˜κ°€ λͺ¨λ‘ λŒ€λ¬Έμžλ‘œ μ‹œμž‘ν•œλ‹€λŠ” 것을 확인할 수 μžˆλ‹€. κ·Έλ ‡λ‹€. 외뢀에 λ…ΈμΆœν•  μš”μ†ŒλŠ” 항상 λŒ€λ¬Έμžλ‘œ μ‹œμž‘ν•΄μ•Ό ν•œλ‹€.

Functions

ν•¨μˆ˜μ˜ νŒŒλΌλ―Έν„°λŠ” μ•„λž˜μ²˜λŸΌ μ„ μ–Έν•  수 μžˆλ‹€.

func add(x int, y int) int { 
	return x + y 
}

λ³€μˆ˜λͺ…이 λ¨Όμ €μ˜€κ³  κ·Έ 뒀에 νƒ€μž…μ΄ μžˆλ‹€λŠ” 점에 μœ μ˜ν•˜μž.

ν•¨μˆ˜ νŒŒλΌλ―Έν„°μ˜ νƒ€μž…μ€ μƒλž΅ 될 수 μžˆλ‹€. λ§ˆμ§€λ§‰ ν•˜λ‚˜λ§Œ μ“°λ©΄ λœλ‹€.

func add(x, y int) int {
	return x + y
}
Multiple results

ν•¨μˆ˜λŠ” μ—¬λŸ¬κ°œμ˜ 값을 λ°˜ν™˜ν•  수 μžˆλ‹€.
swap ν•¨μˆ˜λ₯Ό 예둜 λ“€μ–΄λ³΄μž.

func swap(x, y string) (string, string) {
	return y, x
}
function main() {
	a, b := swap("a", "b")
	frm.Println(a, b)
}
Named return values

λ°˜ν™˜κ°’μ— 이름을 쀄 수 μžˆλ‹€.

func swap(x, y int) (a, b int) {
	a = y
	b = x
	return
}

λ°˜ν™˜κ°’μ„ λͺ…μ‹œν•˜μ§€ μ•ŠλŠ” return ꡬ문은 naked return (λ²Œκ±°λ²—μ€ λ°˜ν™˜)이라고 λΆ€λ₯΄λ©°, μ‹€μ œλ‘œλŠ” named return values λ₯Ό λ°˜ν™˜ν•œλ‹€. μ—¬κΈ°μ„œλŠ” a와 bλ₯Ό λ°˜ν™˜ν•œλ‹€.

λ§Œμ•½ λ„ˆλ¬΄ κΈ΄ ν•¨μˆ˜μ—μ„œ naked return을 μ“°λ©΄ 가독성을 ν•΄μΉ˜κ²Œ λœλ‹€. μœ„μ˜ swap ν•¨μˆ˜λŠ” μ΄λ ‡κ²Œ μ‚¬μš©ν•œλ‹€.

fmt.Println(swap(1, 2)) // κ²°κ³ΌλŠ” 2 1
Variables

λ³€μˆ˜ μ—¬λŸ¬κ°œλ₯Ό μ„ μ–Έν•  λ•Œ varλ₯Ό μ“Έ 수 μžˆλ‹€. νƒ€μž…μ€ 맨 λ§ˆμ§€λ§‰μ— μ“΄λ‹€.

var c, python, java bool
var i int
Variables with initializers

λ³€μˆ˜λŠ” μ„ μ–Έ μ¦‰μ‹œ μ΄ˆκΈ°ν™”(κ°’ ν• λ‹Ή)될 수 μžˆλ‹€.

var a, b int = 1, 2

μ΄ˆκΈ°ν™”λ  λ•Œ νƒ€μž…μ„ μ˜ˆμΈ‘ν•  수 μžˆμœΌλ―€λ‘œ, νƒ€μž… ν‘œκΈ°λ₯Ό μƒλž΅ν•  μˆ˜λ„ μžˆλ‹€.

var a, b, c = 1, 2, "hi"
Short variable declarations

ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œλ§Œ μ“Έ 수 μžˆλŠ” 짧은 λ³€μˆ˜ 선언법도 μžˆλ‹€.

a := 1

ν•¨μˆ˜ μ™ΈλΆ€μ—μ„œλŠ” λͺ¨λ“  λ¬Έμž₯이 var, func와 같은 ν‚€μ›Œλ“œλ‘œ μ‹œμž‘ν•΄μ•Ό ν•œλ‹€. λ”°λΌμ„œ := λ₯Ό ν•¨μˆ˜ μ™ΈλΆ€μ—μ„œλŠ” μ‚¬μš©ν•  수 μ—†λ‹€.

Zero values

μ΄ˆκΈ°ν™” ν•˜μ§€μ•ŠλŠ” λ³€μˆ˜λŠ” zero valueλ₯Ό κ°€μ§€κ²Œ λœλ‹€. 각 νƒ€μž…λ³„ zero valueλŠ” λ‹€μŒκ³Ό κ°™λ‹€.

  • μˆ«μžν˜• : 0
  • λΆˆλ¦°ν˜• : false
  • λ¬Έμžν˜• : ""
Type conversions

νƒ€μž… λ³€ν™˜μ€ λͺ…μ‹œμ μœΌλ‘œ 이루어져야 ν•œλ‹€.

var i int = 42
var f float64 = float64(i)
var u uint = uint(f)

μš”μ•½ν•˜λ©΄ T(v) ν•¨μˆ˜κ°€ v 값을 Tνƒ€μž…μœΌλ‘œ λ³€ν™˜ν•˜λŠ” ν•¨μˆ˜μ΄λ‹€. 말이 μ–΄λ ΅μ§€?

Type inference

νƒ€μž…μ„ λͺ…μ‹œν•˜μ§€ μ•Šκ³  λ³€μˆ˜λ₯Ό μ„ μ–Έν–ˆμ„ λ•Œ, κ·Έ λ³€μˆ˜μ˜ νƒ€μž…μ€ ν• λ‹Ήν•˜λŠ” 값에 μ˜ν•΄ μΆ”λ‘ λœλ‹€.

var a int
i := a // iλŠ” int νƒ€μž…μ΄ μ μš©λœλ‹€. 
f := 3.14 // float64 νƒ€μž…
c := 0.867 + 0.5i // complex128 νƒ€μž…

fmt.Printf("%T %T %T", i, f, c)
Constants

μƒμˆ˜λ₯Ό μ •μ˜ν•˜κ³ μž ν•œλ‹€λ©΄ const ν‚€μ›Œλ“œλ₯Ό μ¨μ•Όν•œλ‹€. const ν‚€μ›Œλ“œμ™€ :=λ₯Ό ν•¨κ»˜ μ“°μ§€λŠ” λͺ»ν•œλ‹€.

package main
import "fmt"
const PI = 3.14

func main() {
    const one = 1
    const text = "string"
    const truth = true
    fmt.Println(PI, one, text, truth)
}