Goの学習日記
30895 ワード
1.ダウンロードインストールgo
ダウンロードアドレス
2.通常の印刷
メイン関数のパッケージ名はmainでなければなりません..
3.宣言変数の定義
go宣言された変数が存在しないのに使用されていない変数
つまり、単独でこのような言葉を書くと、彼が間違っていることに気づきます.
この変数を使用して、印刷するだけで、エラーを解決する必要があります.(びっくりしました)
グローバル変数はこのルールを無視するのを忘れるところだった...
変数を定義するいくつかの方法は、ここでは特に説明する必要があります.Goにはcharタイプがありません!!!
4.定数Const,iota
constは言いたくありませんが、主にiotaという特殊な定数で、constキーワードが表示されると0(内部)にリセットされ、新しい行ごとにカウンタが1つ追加されます.
おもしろい書き方
ここでは<
注意:<
5.条件
書き方で注意したいのは、条件判断に括弧がないことです
6.ブランチ
書き方
7.サイクル
forだけは本当にいい書き方で、すべての使い方をカバーしています.
8.関数
書き方
9.配列
宣言と初期化
10.ポインタ
これは何も言うことはありませんが、記録してください.
11.構造体
cに似ていることは何も言うことはありませんが、なぜGoが相手に向いていないのかよく分かりません.
12.反復
range経由
13. make
この方法は単独で話す必要がある.
14.タイプ変換
15.インタフェース
Javaから見ると本当につらいと言わざるを得ませんが、何度も見てみましょう.
16.同時
goスレッドを開くのは本当に簡単です
チャンネルこれは強すぎる
≪インスタンス|Instance|emdw≫
goはchannelにバッファを設定しました
makeの2番目のパラメータでバッファのサイズを設定できます
バッファ付きチャネルは、送信側のデータ送信と受信側のデータ取得を非同期状態にすることを可能にする.すなわち、送信側が送信したデータはバッファ内に置くことができ、受信側がデータを取得するのを待つことができ、すぐに受信側がデータを取得する必要はない.
しかし、バッファのサイズが限られているため、受信側がデータを受信しなければならない.そうしないと、バッファがいっぱいになると、データ送信側はデータを送信できなくなる.
注:チャネルにバッファがない場合、送信者は受信者がチャネルから値を受信するまでブロックします.チャネルバンドがバッファリングされると、送信者は、送信された値がバッファ内にコピーされるまでブロックする.バッファが満たされている場合は、受信者が値を取得するまで待つ必要があることを意味します.受信者は、値が受信できるまでブロックされます.
クッションのない欠点
読み取り側のみで書き込み側がない場合、「読み取り側」はブロックされます.書き込み側のみで読み取り側がない場合、「書き込み側」はブロックされます.
≪インスタンス|Instance|emdw≫
チャンネルを巡回して閉じる
ダウンロードアドレス
2.通常の印刷
メイン関数のパッケージ名はmainでなければなりません..
package main
import "fmt"
fuc main(){//go { ,c++
fmt.print("hello world")//
}
3.宣言変数の定義
go宣言された変数が存在しないのに使用されていない変数
つまり、単独でこのような言葉を書くと、彼が間違っていることに気づきます.
var a int = 1
この変数を使用して、印刷するだけで、エラーを解決する必要があります.(びっくりしました)
グローバル変数はこのルールを無視するのを忘れるところだった...
変数を定義するいくつかの方法は、ここでは特に説明する必要があります.Goにはcharタイプがありません!!!
var a int = 1
var b,c int =2,3
d,e := 4,5//
// ,: ,
e:=4//
e=4//
4.定数Const,iota
constは言いたくありませんが、主にiotaという特殊な定数で、constキーワードが表示されると0(内部)にリセットされ、新しい行ごとにカウンタが1つ追加されます.
おもしろい書き方
const(
a = iota//0
b = iota//1
c = iota//2
)
const(
a = 1<<iota//1
b = 3<<iota//6
)
ここでは<
注意:<
5.条件
書き方で注意したいのは、条件判断に括弧がないことです
if a < 20{
...
} else{
...
}
6.ブランチ
書き方
switch a{
case v1:
...
case v2:
...
default:
...
}
7.サイクル
forだけは本当にいい書き方で、すべての使い方をカバーしています.
// c
for i:=1;i<2;i++{
...
}
// while
for condition{
...
}
//
for{
...
}
8.関数
書き方
func name(v1,v2 ) {
return
}
//Go
fuc name(v1,v2, int) (int,int){
return v1,v2
}
9.配列
宣言と初期化
//
var a [size] type
// ,
var a = [5]int{1,2,3,4,5}
10.ポインタ
これは何も言うことはありませんが、記録してください.
var p *int
a := 1
p = &a
fmt.print(*p,p,&p)
//
1,a ,p
11.構造体
cに似ていることは何も言うことはありませんが、なぜGoが相手に向いていないのかよく分かりません.
type Books struct {
title string
author string
subject string
book_id int
}
func main() {
var Book1 Books /* Book1 Books */
var Book2 Books /* Book2 Books */
/* book 1 */
Book1.title = "Go "
Book1.author = "asd"
Book1.subject = "Go "
Book1.book_id = 6495407
/* book 2 */
Book2.title = "Python "
Book2.author = "asd"
Book2.subject = "Python "
Book2.book_id = 6495700
/* Book1 */
fmt.Printf( "Book 1 title : %s
", Book1.title)
fmt.Printf( "Book 1 author : %s
", Book1.author)
fmt.Printf( "Book 1 subject : %s
", Book1.subject)
fmt.Printf( "Book 1 book_id : %d
", Book1.book_id)
/* Book2 */
fmt.Printf( "Book 2 title : %s
", Book2.title)
fmt.Printf( "Book 2 author : %s
", Book2.author)
fmt.Printf( "Book 2 subject : %s
", Book2.subject)
fmt.Printf( "Book 2 book_id : %d
", Book2.book_id)
}
12.反復
range経由
nums := []int{2, 3, 4}
sum := 0
//
for num := range nums {
sum += num
}
fmt.Println("sum:", sum)
// map
kvs := map[string]string{"a": "apple", "b": "banana"}
for k, v := range kvs {
fmt.Printf("%s -> %s
", k, v)
}
13. make
この方法は単独で話す必要がある.
make( ,size, )
// 1, 1,
a := make([]int,1,1)
// map , make map map, ,
b := make(map[string]string)
// ,
b["abc"]="bca"
// 1, , append ,
a[0]=1
a = append(a, 2)
14.タイプ変換
var sum int = 17
var count int = 5
var mean float32
mean = float32(sum)/float32(count)
fmt.Printf("mean : %f
",mean)
15.インタフェース
Javaから見ると本当につらいと言わざるを得ませんが、何度も見てみましょう.
type Phone interface {
call()
}
type NokiaPhone struct {
}
func (nokiaPhone NokiaPhone) call() {
fmt.Println("I am Nokia, I can call you!")
}
type IPhone struct {
}
func (iPhone IPhone) call() {
fmt.Println("I am iPhone, I can call you!")
}
func main() {
var phone Phone
phone = new(NokiaPhone)
phone.call()
phone = new(IPhone)
phone.call()
}
16.同時
goスレッドを開くのは本当に簡単です
import (
"fmt"
"time"
)
func say(s string) {
for i := 0; i < 5; i++ {
time.Sleep(100 * time.Millisecond)
fmt.Println(s)
}
}
func main() {
go say("world")
say("hello")
}
チャンネルこれは強すぎる
ch v // v ch
v := ch // ch
// v
//
ch := make(chan int)
≪インスタンス|Instance|emdw≫
package main
import "fmt"
func sum(s []int, c chan int) {
sum := 0
for _, v := range s {
sum += v
}
c sum // sum c
}
func main() {
s := []int{7, 2, 8, -9, 4, 0}
c := make(chan int)
go sum(s[:len(s)/2], c)
go sum(s[len(s)/2:], c)
x, y := c, c // c
fmt.Println(x, y, x+y)
}
goはchannelにバッファを設定しました
makeの2番目のパラメータでバッファのサイズを設定できます
ch := make(chan int, 100)
バッファ付きチャネルは、送信側のデータ送信と受信側のデータ取得を非同期状態にすることを可能にする.すなわち、送信側が送信したデータはバッファ内に置くことができ、受信側がデータを取得するのを待つことができ、すぐに受信側がデータを取得する必要はない.
しかし、バッファのサイズが限られているため、受信側がデータを受信しなければならない.そうしないと、バッファがいっぱいになると、データ送信側はデータを送信できなくなる.
注:チャネルにバッファがない場合、送信者は受信者がチャネルから値を受信するまでブロックします.チャネルバンドがバッファリングされると、送信者は、送信された値がバッファ内にコピーされるまでブロックする.バッファが満たされている場合は、受信者が値を取得するまで待つ必要があることを意味します.受信者は、値が受信できるまでブロックされます.
クッションのない欠点
読み取り側のみで書き込み側がない場合、「読み取り側」はブロックされます.書き込み側のみで読み取り側がない場合、「書き込み側」はブロックされます.
≪インスタンス|Instance|emdw≫
func main() {
//
// 2
ch := make(chan int, 2)
// ch ,
//
ch 1
ch 2
//
fmt.Println(ch)
fmt.Println(ch)
}
チャンネルを巡回して閉じる
close(c)//
//
for i := range c{
...
}