Go 언어 자습서 A Tour of Go의 블러셔 테이블 1-Basics
또 튜토리얼에서는 이전 페이지로 여러 번 돌아가서 확인해야 하기 때문에 다음에 할 사람은 블러셔 용지로 사용할 수 있다.
교정의 대체품으로도 멀리 볼 수 있다.
※ 본 기사는 이식Qita의 글되었습니다.
Packages, variables and functions
패키지 및 가져오기/내보내기
// ファイルの冒頭にpackage名を宣言する
package main
// パッケージのインポートをグループ化できる
// factored import statementと呼ばれる
import (
"fmt"
"math"
)
func main() {
// Printf / Sqrt はそれぞれのパッケージからエクスポートされている
fmt.Printf("Sqrt(9) is %g\n", math.Sqrt(9))
// 小文字で始まる名前は外部に公開されないので、エラーが発生する
fmt.Println(math.pi)
}
함수.
// 2つのintを受け取り、intを返す関数
func add(x int, y int) int {
return x + y
}
// 型が同じ場合は、最後の型以外は省略できる
func addThree(x, y, z int) int {
return x + y + z
}
// 複数の戻り値を返すことができる
func swap(x, y string) (string, string) {
return y, x
}
// 戻り値に名前をつけることができる
func div(x, y int) (result int) {
// result変数はこの時点で定義済み
result = x / y
// この場合、何も書かずにreturnできる(naked return)
return
}
변수 상수
성명 변수는 매크로 패키지나 함수에서 사용할 수 있습니다
// 変数はvarで宣言する
var x, y, z int
var s string
// initializerで初期化可能、型を省略できる
var i, j, b = 1, 2, true
// 定数はconstで宣言する
const K int = 10000
const Truth = true
func main() {
// 関数内限定でvarの代わりに:=を使うことができる
foo := "bar"
c := 2 + 0.5i // 複素数型
}
기본(내장)
제로 값
초기 값 선언이 없으면 0을 입력합니다.
유형 변환
명확한 유형 전환이 필요하다
var i int = 60
var f float64 = float64(i)
var u uint = uint(i)
Flow control statements
for 순환
sum := 0
// カッコは不要
for i := 0; i < 10; i++ {
sum += i
}
// 初期化と後処理は省略可能
for ;sum < 1000; {
sum += sum
}
// セミコロンも省略可能 -> whileループ
for sum < 10000 {
sum += sum
}
// 条件式も省略可能 -> 無限ループ
for {
if sum > 100000 {
break
}
}
if
// カッコ不要
if i > 3 {
return i
}
// xのスコープはif-elseブロック内のみ
if x := i * j + 3; x < 100 {
return x
} else {
return x - 100
}
// compile error
return x + 100
switch
// os変数を初期化
switch os := runtime.GOOS; os {
case "darwin":
fmt.Println("OS X.")
case "linux":
fmt.Println("Linux.")
default:
// freebsd, openbsd, plan9, windows...
fmt.Printf("%s.\n", os)
}
// 条件のないswitchも可能(switch trueと同じ)
t := time.Now()
switch {
case t.Hour() < 12:
fmt.Println("Good morning!")
case t.Hour() < 17:
fmt.Println("Good afternoon.")
default:
fmt.Println("Good evening.")
}
defer
func hello() {
defer fmt.Println("world")
fmt.Println("hello")
}
func countDown() {
for i := 0; i < 10; i++ {
defer fmt.Print(i)
}
// 9876543210と表示される
}
More types: structs, slices, and maps
포인터
nil
// int型のポインタは *int型
var p *int
// &オペレータでポインタを引き出す
var i int = 50
p = &I
// *オペレータでポインタの指す変数を示す
j := *p // pからiの値を読みだす
*p = 40 // pを通してiに値を代入する
struct
type Vertex struct {
X int
Y int
}
func test() {
// Vertexリテラル: field順に値を渡す
v := Vertex{1, 2}
v.X = 5
// ポインタを使う
p := &v
// ポインタを通してフィールドにアクセスする
(*p).X = 6
// 省略してp.Xとも書ける
p.X = 6
}
// 初期化時にフィールドの名前を使うことができる
var (
v1 = Vertex{Y: 2, X: 1} // フィールドの順番は関係なし
v2 = Vertex{Y: 2} // Xはゼロ値(0)をとる
v3 = Vertex{} // X: 0, Y: 0
p = &Vertex{1, 2} // *Vertex型
)
array
// int型の要素を持つ長さ10の配列の宣言
var a [10]int
// リテラル
primes := [6]int{2, 3, 5, 7, 11, 13}
var s [2]string
s[0] = "Hello"
s[1] = "World"
slices
a[1:4]
등기법을 통해 배열에서 조각상을 제작할 수 있다primes := [6]int{2, 3, 5, 7, 11, 13}
// int型の要素を持つスライスの宣言
var s1 []int
// primesの要素のうち、1番目から3番目の要素を含むスライス
s1 = primes[1:4] // {3, 5, 7}
// 下限と上限の値を省略するとデフォルトの値が使用される
// デフォルト値は下限: 0, 上限: スライスの長さ
// 以下は等価
primes[0:6]
primes[:6]
primes[0:]
primes[:]
// 同じ元となる配列を共有している場合、変更が反映される
s2 := primes[1:3] // {3, 5}
s2[0] = 59 // -> primes[1]とs1[0]も59になる
// リテラル
// [3]{true, true, false}の配列を作成して、それを参照する
b := []{true, true, false}
길이(length) 및 용량(capacity)
a := [6]int{0, 1, 2, 3, 4, 5}
s1 := a[0:0] // len(s1) -> 0, cap(s1) -> 6
s2 := a[0:4] // len(s2) -> 4, cap(s2) -> 6
s3 := a[2:6] // len(s3) -> 2, cap(s3) -> 4
// 容量が十分な場合、スライスを再度スライスすると長さが伸びる
s4 := s1[0:4] // len(s4) -> 4, cap(s4) -> 6
// スライスのゼロ値はnil、長さと容量は0になる
var s5 []int // len(s5) -> 0, cap(s5) -> 0
make 함수
삽입된make 함수를 사용하여 슬라이스를 만들 수 있습니다
// 型と長さを引数にとる
a := make([]int, 2) // len(a) -> 2, cap(a) -> 2, a: [0 0]
// 容量も引数に渡すことができる
b := make([]int, 0, 3) // len(b) -> 0, cap(b) -> 3, b: []
다차원 절편
슬라이스는 모든 유형을 포함할 수 있으므로 슬라이스를 포함하는 슬라이스를 생성할 수 있습니다.
board := [][]int{
[]int{1, 2, 3},
[]int{4, 5, 6},
[]int{7, 8, 9},
}
응용 함수
func append(s []T, vs ...T) []T
var s[]int // len(s) -> 0, cap(s) -> 0, s: []
s = append(s, 0) // len(s) -> 1, cap(s) -> 1, s: [0]
s = append(s, 1) // len(s) -> 2, cap(s) -> 2, s: [0 1]
s = append(s, 2, 3, 4) // len(s) -> 5, cap(s) -> 6, s: [0 1 2 3 4]
map
var m map[string]int
m = make(map[string]int)
m["likes"] = 10
m["stocks"] = 5
// リテラル
m = map[string]int{
"likes": 10,
"stocks": 5,
}
// 追加・更新
m["foo"] = 1
// 取得
likes := m["likes]
// 削除
delete(m, "likes")
// 存在確認、二つ目の戻り値は、値が存在すればtrue、存在しなければfalse
stocks, ok := m["stocks"]
range
var pow = []int{1, 2, 4, 8, 16, 32, 64, 128}
// ループごとにindexとvalueを返してくれる
for i, v := range pow {
fmt.Printf("2**%d = %d\n", i, v)
}
// 不要な場合はアンダースコアで捨てることができる
for i, _ := range pow
for _, value := range pow
// indexだけが欲しい場合は2つ目を省略しても良い
for i := range pow
옷장
func adder() func(int) int {
sum := 0
// sumへの参照を保持した無名関数
return func(x int) int {
sum += x
return sum
}
}
다음에 계속!
다음 내용은...
참고 자료
A Tour of Go
Reference
이 문제에 관하여(Go 언어 자습서 A Tour of Go의 블러셔 테이블 1-Basics), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/turara/articles/a-tour-of-go-cheetsheet-basics텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)