(a)は、高速かつ簡単な言語のエントリーを行きます

私は、言語を見に行くとき、私は交換に基づいて、人のために適した、関心のポイントをいくつかまとめ

あなたはすぐに行くのコードを理解したい場合は、あなたが言語を習得するためのシステムをしたい場合は、あなたが見に行くことができますことを示唆している、見下ろすことができますhttps://www.jianshu.com/p/5ee783bbdcacを

まず、変数宣言
VAR変数名変数型の
VAR(
変数名変数タイプ
変数名変数型
変数名変数種別

	指针: var 变量名 new(类型名)
	数组: var 变量名 []类型名
	结构体: 实例名 struct{
		变量名 变量类型
	}

第二に、変数の初期化
するvar AAA =コンパイラがあなたのAAA型推測します// 40 40
VARをdamageRateのfloat32 = 0.17 //通常の代入
AAA:= 40 //シンプルな言葉遣い、どのようなAAAの正式な定義,: =上を割り当ての等価物を定義し、

	1.已定义过的变量不能用 := 进行赋值
	2.:= 可以一次性定义多个变量并赋值 
		eg. 	conn, err := net.Dial("tcp", "127.0.0.1:8080")
				conn2, err := net.Dial("tcp", "127.0.0.1:8080")
		net.Dial 返回了两个值,分别赋值给了 conn和err。
		(conn, err) 和 (conn2, err) , 这两组变量,只要每组有一个是新变量就可以通过,编译器不会报错
	3.多变量赋值 func (p IntSlice) Swap(i, j int)      { p[i], p[j] = p[j], p[i] }
		这个例子就很直观了,多变量赋值从左到右依次赋值,并不care你是谁

	4. 对函数定义有疑问的,看看下面几个例子应该就差不多了
	type IntSlice []int
	func (p IntSlice) Len() int           { return len(p) }
	func (p IntSlice) Less(i, j int) bool { return p[i] < p[j] }
	func (p IntSlice) Swap(i, j int)      { p[i], p[j] = p[j], p[i] }
	作用范围不止在函数里面的放到前面括号里,作用范围只在函数里面的放到后面括号里

	5.匿名变量 _,b := GetData()  不在乎这个变量是谁,用_占个位置就行
	如果只需要前面的变量  a := GetData() 就行

第三に、文字列
STR:=「の行に文字列ノートをエスケープします。」

	1.utf8编码
	2.多行字符串输入
		ch := ` 第一行
		第二行
		第三行
		`
		两边加的这个是反引号,键盘1旁边那个

第四に、文字
のuint8バイトはと等価である
のInt32、UTF-8文字の代表と同等のルーン。あなたは中国語、日本語、または他の複雑な文字を処理する必要がある場合、あなたはルーンの種類を使用する必要があります。

ファイブキャスト
VAR C =のfloat32にMath.PI
fmt.Println(INT(C))

别的转换方式 fmt.Printf("int32: 0x%x %d\n", c, c)

第六に、ポインタ
のvar A = 111
PTR:// A =&定義された
値:= * PTR //参照

	1.有指针的交换函数就要借助中间变量,不能再像 【二、3 】 说明的那样直接赋值
	2.创建指针的另一种方式 var ptr=new(int)

七つの変数はエスケープ
簡単な言葉を、この変数はもはや存在しませんが、あなたはまだ彼を使用し、その変数は、変数のエスケープです

package main

import "fmt"

// 声明空结构体测试结构体逃逸情况
type Data struct {
}

func dummy() *Data {

    // 实例化c为Data类型
    var c Data

    //返回函数局部变量地址
    return &c
}

func main() {

    fmt.Println(dummy())
}

例えば、上記の例のCポインタは、元のCプログラムでは、そこにクロスボーダーの訪問でしたが、変数をエスケープするためにそこに行くしている、我々は、cのポインタを脱出することに成功し
、その後、整数、上記リターンC場合、変数のエスケープだけではなく、ポインタ型Cは、ヒープメモリに変数のエスケープです

八、CONST
非常に単純な
CONSTのAA 1 =
CONST(
AA = 1
BB = 2

例えば、アナログ列挙クラスCONSTを与える以下

type Weapon int

const (
     Arrow Weapon = iota    // 开始生成枚举值, 默认为0
     Shuriken
     SniperRifle
     Rifle
     Blower
)

// 输出所有枚举值
fmt.Println(Arrow, Shuriken, SniperRifle, Rifle, Blower)

// 使用枚举类型并赋初值
var weapon Weapon = Blower
fmt.Println(weapon)
const (
    FlagNone = 1 << iota
    FlagRed
    FlagGreen
    FlagBlue
)
fmt.Printf("%d %d %d\n", FlagRed, FlagGreen, FlagBlue)
fmt.Printf("%b %b %b\n", FlagRed, FlagGreen, FlagBlue)

上記の例は、2,4,8(0b1,0b10,0b100)である結果

	上面例子引申出 type 定义:
	go1.9 之前  type byte uint8
	go1.9 之后  type byte=uint8
	值得注意的是 重定义的类型必须是本地类型,import的包里面的类型不能起别名

IX 配列
VARチーム[3]文字列
チーム[0] = "ハンマー"
...

VARチーム= [...]文字列{ "ハンマー"、 "兵士"、 "お母さん"} //!ここでは...それは、コンパイラは、配列のサイズを把握することができることを意味します

配列トラバーサル機能

var team [3]string
team[0] = "hammer"
team[1] = "soldier"
team[2] = "mum"

for k, v := range team {
    fmt.Println(k, v)
}

Kは、値Vの配列の各要素のトラバーサルキー配列のインデックス値です。
この範囲は、全く接触が本当に高いかすかな頭、詳細な勧告できなくなりますhttps://www.jianshu.com/p/4205659ca419、単に通過する組み込み関数であります

テン、スライス

var highRiseBuilding [30]int

for i := 0; i < 30; i++ {
        highRiseBuilding[i] = i + 1
}

// 区间
fmt.Println(highRiseBuilding[10:15])

// 中间到尾部的所有元素
fmt.Println(highRiseBuilding[20:])

// 开头到中间的所有元素
fmt.Println(highRiseBuilding[:2])

コードの結果

[11 12 13 14 15]
[21 22 23 24 25 26 27 28 29 30]
[1 2]

A = VAR [] {1,2,3}
Aの[:] //元のスライス1,2,3} {
[0:0]} // {

  1. コンストラクタスライスを作ります

    ([] T、サイズ、作成キャップ)// デフォルトの缶サイズ、CAP
    要素タイプスライス:T。
    サイズ:要素数がこのタイプに割り当てられます。
    キャップ:事前に割り当てられた要素の数は、この値が設定された後のサイズに影響を与え、事前にスペースを割り振ることしかでき、複数の流通空間に起因するパフォーマンスの問題を減少させません。

  2. スライスに要素を追加する()を追加

team := []string{"Pig", "Flyingcake", "Chicken"}
car = append(car, team)
  1. コピー():スライスコピー
    refDataを:srcData //参照は=
    コピー(のCopyData、srcdataは変換)//新しいスライス空間にデータをコピーする
    コピー(のCopyData、srcData [4: 6])// 部分をコピー

  2. スライスの削除
    ここに画像を挿入説明
    11を、マップ・マッピング

scene := make(map[string]int)

scene["route"] = 66
scene["brazil"] = 4
scene["china"] = 960

for k, v := range scene {
    fmt.Println(k, v)
}
  • する([キータイプ]値型、キャップをマッピングする)、キータイプは、タイプを示す値ボンドタイプ、値型を表します。
  • マップは、あなたが直接、新規を作ることができ、回復する必要がありません。
  • sync.Map
    同時アクセスマップsync.Mapを提供し、人々は彼自身の内部のメンテナンス、手動でコードロックを記述する必要はありません、次は具体的な実装である、ロックする必要が行きます
package main

import (
      "fmt"
      "sync"
)

func main() {

    var scene sync.Map

    // 将键值对保存到sync.Map
    scene.Store("greece", 97)
    scene.Store("london", 100)
    scene.Store("egypt", 200)

    // 从sync.Map中根据键取值
    fmt.Println(scene.Load("london"))

    // 根据键删除对应的键值对
    scene.Delete("london")

    // 遍历所有sync.Map中的键值对
    scene.Range(func(k, v interface{}) bool {

        fmt.Println("iterate:", k, v)
        return true
    })

}

十二、リスト
囲碁言語で、達成するために、コンテナ/リストパッケージを使用して、リストには、内部の原理は二重リンクされたリストを達成

	l := list.New()
	l.PushBack("fist")
	l.PushFront(67)
	l.InsertAfter("high", element)
    l.InsertBefore("noon", element)
    
    l.Remove(element) for i := l.Front(); i != nil; i = i.Next() {
   	 	fmt.Println(i.Value)
	}

おすすめ

転載: blog.csdn.net/LiuYangQ_Q/article/details/90677961