型の変換

Go

キャスト var i uint8 = 3 var j uint32 = uint32(i) // uint8 -> uint32 fmt.Println(j) // 3 var s string = "abc" var b []byte = []byte(s) // string -> []byte fmt.Println(b) // [97 98 99] // cannot convert "a" (type string) to type int a := in…

ポインタについて

Go

構造体を生成して変数に代入する時に,構造体の前に&を付けると,変数には構造体の値ではなくアドレスが格納される。 var task Task = Task{} // Task型 var task *Task = &Task{} // Taskのポインタ型 参考 第3章 型システム―型を用いた安全なプログラミン…

typeを用いた既存の型を拡張する

Go

func ProcessTask(id, priority int) { } という関数を考える時、2つの引数id, priorityはどちらもint型。 なので、もし間違えてidとpriorityの順序を逆にして使ってしまっても普通に動いてしまう。 これを防ぐために使えるのがtype 以下のように、int型をty…

パッケージをimportする時のオプション

Go

package main import ( f "fmt" // 任意の文字をつけるとプログラム内ではその文字で代用できる(今の場合はf) _ "github.com/wdpress/gosample" // 使わないパッケージには - をつける . "strings" // . をつけるとパッケージ名を省略できる ) func main() {…

はじめてのGo勉強メモ

Go

gihyo.jp 作成したいプログラムをすぐに実行したい場合はターミナルで go run hello.go 単にコンパイルする場合は go build hello.go で、hello という実行形式のバイナリファイルが生成される。 その後 ./hello で実行できる。 コードの整形は go fmt hello…

Go言語のコマンドについて

Go

go run <file> : プログラムをすぐに実行 go build <file> : コンパイル go fmt <file> : コードを自動で整形 godoc : packageのドキュメントを表示</file></file></file>

Go言語基本文法(5) ~Goroutine, Channel~

Go

Goroutine Channel package main import "fmt" func sum(s []int, c chan int) { sum := 0 for _, v := range s { sum += v } c <- sum // send sum to c } func main() { s := []int{7, 2, 8, -9, 4, 0} c := make(chan int) go sum(s[:len(s)/2], c) go su…

Go言語基本文法(4) ~method, interface, error, panic~

Go

メソッド package main import ( "fmt" "math" ) type Vertex struct { X, Y float64 } func (v Vertex) Abs() float64 { return math.Sqrt(v.X*v.X + v.Y*v.Y) } func main() { v := Vertex{3, 4} fmt.Println(v.Abs()) // 5 x := Vertex{5, 12} fmt.Printl…

Go言語基本文法(3) ~ポインタ、構造体、配列、スライス、Maps、関数値、クロージャ~

Go

pointer package main import "fmt" func main() { i, j := 42, 930 p := &i // iを指すポインタpを宣言 fmt.Println(*p) // 42 *p = 21 // iの値を書き換える fmt.Println(i) // 21 p = &j // pの指す変数をjに変更 *p = *p / 30 // pを通してjの値を書き換…

Go言語基本文法(2) ~for, if, switch, defer~

Go

for package main import "fmt" func main() { sum1 := 0 for i := 0; i < 10; i++ { sum1 += i } fmt.Println(sum1) // 45 sum2 := 1 for sum2 < 1000 { sum2 += sum2 } fmt.Println(sum2) // 1024 } 無限ループ package main func main() { for { } } if p…

Go言語基本文法(1) ~関数、変数、型、定数~

Go

標準出力 package main import ( "fmt" "math/rand" "time" ) func main() { fmt.Println("Hello, World") // Hello, World fmt.Println("My favorite number is", rand.Intn(100)) // My favorite number is 81 fmt.Println("The time is", time.Now()) // …