0
0

More than 1 year has passed since last update.

Goを触る②

Posted at

こちらの続き

変数

関数は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
}

まとめ

ゴルーチン処理がなかなか複雑でもうちょっと詰めていこうと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0