hysryt / wiki

https://hysryt.github.io/wiki/
0 stars 0 forks source link

Go #107

Open hysryt opened 5 years ago

hysryt commented 5 years ago

https://go-tour-jp.appspot.com http://go.shibu.jp/effective_go.html

hysryt commented 5 years ago

Docker でやる場合

docker-compose.yml

version: '3'
services:
  go:
    image: 'golang:latest'
    tty: true
    volumes:
      - './src:/go/src'

コンテナ起動

$ docker-compose up -d
$ docker-compose exec go /bin/bash

フォルダ構成

go/
 `- src/
     `- hello/
         `- hello.go

hello.go

package main

import "fmt"

func main() {
    fmt.Printf("hello, world\n")
}

コンパイル

$ cd /go/src/hello
$ go build
$ ./hello

コンテナ停止

$ docker-compose down

作成したバイナリファイルはコンテナ内でのみ実行できる。

hysryt commented 5 years ago

引数の型が同じ場合は省略できる。

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

func main() { a, b := swap("hello", "world") fmt.Println(a, b) }

- 返り値に名前をつけることもできる。
```go
func split(sum int) (x, y int) {
  x = sum * 4 / 9
  y = sum - x
  return
}

func main() { var i int fmt.Println(i, c, python, java) }

引数と同じように型を省略できるので、上の例では `c`、`python`、`java` の3つが `bool` 型となる。

宣言と同時に初期化も可能。初期化子を与える場合は型はなくても良い。
```go
var i, j int = 1, 2

i には 1j には 2 が代入される。

string

int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr

byte // uint8 の別名

rune // int32 の別名 // Unicode のコードポイントを表す

float32 float64

complex64 complex128


- 変数の宣言はまとめることも可能
```go
var (
  ToBe   bool       = false
  MaxInt uint64     = 1<<64 - 1
  z      complex128 = cmplx.Sqrt(-5 + 12i)
)
hysryt commented 5 years ago

for 文

sum := 0
for i := 0; i < 10; i++ {
  sum += i
}
fmt.Println(sum)

if 文

x := 0
if x > 10 {
  fmt.Println("10よりでかい")
} else {
  fmt.Println("10以下")
}

switch 文

switch os := runtime.GOOS; os {
case "darwin":
  fmt.Println("OS X.")
case "linux":
  fmt.Println("Linux.")
default:
  // freebsd, openbsd,
  // plan9, windows...
  fmt.Printf("%s.", os)
}
hysryt commented 5 years ago

defer 文

hysryt commented 5 years ago

ポインタ

var p *int
var p *int
var i int
fmt.Println(&i)  // 変数 i のポインタを取得する
p = &i           // ポインタ p に 変数 i のポインタを代入
*p = 10          // ポインタ p を介して変数 i に代入
fmt.Println(*p)  // ポインタ p の値を読み出す
hysryt commented 5 years ago

構造体

type Vertex struct {
  X int
  Y int
}
v := Vertex{1, 2}
v.X = 4
fmt.Println(v.Y)