Go入門(1)



1.公式ウェブサイトにアクセスしてダウンロードします

  1. 公式ウェブサイトhttps://golang.google.cn/doc/install?download=go1.16.windows-amd64.msi
  2. より多くのコンテンツを含み、煩わしくないgo言語の動作環境を構成します。
  3. vs coreを使用してコンパイルする場合は、対応するプラグインをインストールする必要があります。



2.実行します

次のコードを入力してください

package main

import "fmt"

func main() {
    
    
	fmt.Println("Hello world")
}

を実行するgo buildと、対応するexeファイルが生成され、ファイルを実行すると、生成が成功します。

2.2生成されたファイルの名前を変更する場合

go guild -o yourname.exe

2.3実行は2つのステップから1つのステップになります(つまり、最初にbuidを実行してから、生成されたexeファイルをbinディレクトリに配置します)。

go install

2.4クロスプラットフォームコンパイル

環境が異なればコマンドも異なるので、後で説明しましょう。




3.基本的な使用法

3.1ディレクトリ構造

// 这个包是属于哪个包,是main的话,可以直接执行。
package main


// 导入包,要使用双引号
import "fmt"

// 函数外只能声明变量,不能写语句

func main() {
    
    
	fmt.Println("Hello world")
}

3.2変数宣言

package main

// 声明变量
import "fmt"

// var name string
// var age int
// var isOk bool

// 批量的声明变量
// GO 中提倡使用驼峰式的命名规则
var(
	name string
	age int    //
	isOk bool // false
)

func main() {
    
    
	name="理想"
	age =16
	isOk = true
	// Go 语言中非全局声明必须使用,不使用就编译过去
	fmt.Print(isOk)
	fmt.Println(name)
	fmt.Printf("age:%d",age) // 使用占位符打印
}

3.3さまざまな変数の宣言

	var s1="你好" // 当编译器能推断的时候,可以不需要指定类型。
	s2:="哈哈"    // 简短的变量声明,只能在函数内部使用
    x,_:=foo()   //匿名变量 有一个变量,但是你不想用,要使用——可以使用_

注:パブリック変数が宣言されている場合のみ、宣言できますが使用できません。ローカル変数が宣言されている場合は、コンパイルできません。


3.4定数とイオタ

iotaは定数カウンターの略です

// 常量定义以后,不能修改,在程序运行期间,不能改变。
const s3=3.1415926

// 批量声明常量
const (
	STATUS_OK=200
	NOTEFOUNT=404
)

const(
	n1=100
	n2
	n3   // 不声明的话,默认都和上一行一样。
)

// iota
const(
	a1=iota  // a1=0
	a2       //  1
	a3       //  2
	a4       //  3
)

iota

// iota
const(
c1=iota  // c1=0
c2=100   // c2=100
c3=iota  // c3=2  在同一const里,iota 出现,一行累加一次
c4       // c4=3
)

イオタの基本的な使い方

// 定义数量级
const (
	_=iota 
	KB=1<<(10*iota) // 左移10位
	MB=1<<(10*iota) // 再左移10位
	GB=1<<(10*iota) // 再左移10位
	TB=1<<(10*iota) // 再左移10位
	PB=1<<(10*iota) // 再左移10位
)

3.5浮動小数点

func main() {
    
    
	// 整型
	var a int =5
	fmt.Printf("%d\n",a)
 
	// 浮点数
	var b float64 =4.5
	fmt.Printf("%f\n",b)

	// 查看类型
	f1:=1.23456
	fmt.Printf("%T\n",f1)
}

3.6ブール値

func main() {
    
    
b1:=true
var b2 bool
fmt.Printf("%v\n",b1)
fmt.Printf("%T\n,%v\n",b2,b2)
}

出力結果

true
bool
false

3.7文字列

バックティックの役割:元のコンテンツを変更せずに印刷できます

func main() {
    
    
	// 字符串下,反斜线是原样的输出
	a:=` 
	竹杖芒鞋轻胜马
	一蓑烟雨任平生
	`
	fmt.Println(a)
}

直接文字列は変更できません。スライスに変更して、文字列の特定の部分を変更できます。

func main() {
    
    
	s1 := "白萝卜"
	s2 := []rune(s1) // 强制转换成切片
	s2[0] = '红'      // 应该改成字符型,不应该是双引号
	fmt.Println(string(s2))
}

3.8プロセス制御

判断の声明

func main() {
    
    
	// 单个语句的判断
	age := 15
	if age > 18 {
    
    
		fmt.Println("澳门首家线上赌场开业了")
	} else {
    
    
		fmt.Println("该写暑假作业了")
	}

	// 多个条件判断
	if age > 35 {
    
    
		fmt.Println("人到中年")
	} else if age > 18 {
    
    
		fmt.Println("青年")
	} else {
    
    
		fmt.Println("好好学习!")
	}
}

ループステートメント

func main() {
    
    

	// 基本操作
	for i := 0; i < 10; i++ {
    
    
		fmt.Println(i)
	}

	// 变种1 (省略初试语句)
	var a = 1
	for ; a < 10; a++ {
    
    
		fmt.Println(a)
	}

	// 键值循环
	s := "Hellow 你好"

	for i, v := range s {
    
    
		fmt.Printf("%d,%c\n", i, v)
	}
}

ステートメントの続行と中断

func main() {
    
    
	
	// 变种1 (省略初试语句)
	var a = 1
	for ; a < 10; a++ {
    
    
		if a==3 {
    
    
			continue // 调出
		}
		if a == 5 {
    
    
			fmt.Println("over")
			break // 调出for 循环
		}
		fmt.Println(a)
	}
}

switch
swithchは、elseifのバリアントと同等です。

func main() {
    
    
	// 变种1 (省略初试语句)
	n := 3
	if n == 1 {
    
    
		fmt.Println("大拇指")
	} else if n == 2 {
    
    
		fmt.Println("食指")
	} else if n == 3 {
    
    
		fmt.Println("中指")
	} else if n == 4 {
    
    
		fmt.Println("无名指")
	} else if n == 5 {
    
    
		fmt.Println("小拇指")
	} else {
    
    
		fmt.Println("无效的数字")
	}

	// 如果 switch 简化上面的代码
	switch n {
    
    
	case 1:
		fmt.Println("大拇指")
	case 2:
		fmt.Println("食指")
	default:
		fmt.Println("无效的数字")
	}
}

3.92層ループを呼び出す

フラグを外部に設定することも、使用することもできますがgoto + lable、外部で変数を設定する方法を使用することをお勧めします。

func main() {
    
    
	// 变种1 (省略初试语句)
	var flag = false
	for i := 0; i < 10; i++ {
    
    
		for j := 0; j < 20; j++ {
    
    
			if j == 10 {
    
    
				flag = true // 调出内循环
				break
			}
			fmt.Println(j)
		}
		if flag {
    
    
			break // 调出外循环
		}
	}
}

3.10オペレーター

配列の長さは配列型の一部です。つまり、[2] intと[5] intは同じ型ではありません。

	var a1 [3]int
	var a2 [4]int
	a1=a2 // 这样是错误的


3.11配列の初期化とトラバーサル

func main() {
    
    
	// 如果不初始化,数组就是0
	var a1 [3]int

	// 初始化方法1
	a1 = [3]int{
    
    1, 2, 3}
	fmt.Println(a1)

	// 初始化方法2
	a2 := [...]int{
    
    0, 1, 2, 3, 4} // 使用 ... 可以自动推算出来后边的数
	fmt.Println(a2)

	// 初始化方法3
	a3 := [5]int{
    
    0, 1}
	fmt.Println(a3)

	// 初始化方法4 (根据索引来初始化)
	a4 := [5]int{
    
    0: 4, 4: 2}
	fmt.Println(a4)

	// 数组的遍历 (使用 foreach)
	citys := [...]string{
    
    "北京", "上海", "深圳"}
	for i := 0; i < len(citys); i++ {
    
    
		fmt.Println(citys[i])
	}

	// 数组的遍历 (for range 遍历)
	for i, v := range citys {
    
    
		fmt.Println(i, v)
	}

	// 多维数组 [[1,2][3,4][5,6]]
	var a5 [3][2]int
	a5 = [3][2]int{
    
    
		[2]int{
    
    1, 2},
		[2]int{
    
    3, 4},
		[2]int{
    
    5, 6},
	}
	fmt.Println(a5)

	// 数组是值类型的
	b1 := [...]int{
    
    1, 2, 3}
	b2 := b1
	b2[0] = 100
	fmt.Println(b1)
	fmt.Println(b2)
}

おすすめ

転載: blog.csdn.net/zhaozhao236/article/details/114637001