こちらの続き
変数
関数はfuncで定義
func add(hoge int, fuga int) int {
return hoge + fuga
}
{
前の型で戻り値の型を宣言
return
で戻り値を設定
戻り値が複数の場合は型名は (,)
で設定する必要がある
func addMinus(x int, y int) (int, int) {
return x + y, x - y
}
ブランク変数を使って必要な値のみ取得する
package main
import "fmt"
func main() {
var a string
_ , a = hoge("sss","sssssss")
fmt.Println(a)
}
func hoge(x string, y string) (string, string) {
return x + y, x + y + y
}
構造体
Goではクラス(class)の代わりに 構造体(struct) を使用する
type Person struct {
name string
age int
}
クラスに紐付けられたメソッドは
関数名の前に (thisに相当する変数 *構造体名) をつけて定義
package main
import "fmt"
func main() {
var p1 Person
p1.SetPerson("hoge", 10)
var name = p1.GetName()
fmt.Println(name)
}
//
type Person struct {
name string
age int
}
// setter
func (p *Person) SetPerson(name string, age int) {
p.name = name
p.age = age
}
// getter
func (p *Person) GetName() string {
return p.name
}
構造体のメンバの内、大文字で始まるものはパッケージ外からアクセス可能、小文字で始まるものはパッケージ外からアクセス不可
ゴルーチン
ゴルーチンはGo言語における並行処理を行うもの
関数の前に go キーワードを追加する
go hoge(x,y,z)
上記でメインの処理を実行しながら、並行して関数 hoge() を実行できる
チャネル
チャネルはゴルーチン間でデータを受け渡すために設計されたGo言語特有のデータ構造
チャネルは定義方法が2つあり
makeを使わずに定義
// 双方向
var ch chan int
// 受信専用
var ch <-chan int
// 送信専用
var ch chan<- int
makeを使って定義
// バッファサイズ指定なし = バッファサイズ0
ch := make(chan int)
// バッファサイズ指定あり
ch := make(chan int, int)
<-
を用いて送信と受信を行うことが可能
package main
import "fmt"
func main() {
ch := make(chan int)
go count(ch)
x := <-ch
fmt.Println(x)
}
func count(ch chan int) {
ch <- 100
}
まとめ
ゴルーチン処理がなかなか複雑でもうちょっと詰めていこうと思います。