Go入门(一)



一.到官网下载

  1. 官网https://golang.google.cn/doc/install?download=go1.16.windows-amd64.msi
  2. 配置 go 语言的运行环境,内容较多,不再累赘。
  3. 如果使用 vs core 编译,需要安装相应的插件。



二.运行

输入如下代码

package main

import "fmt"

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

运行 go build ,那么就会生成相应的 exe 文件,运行该文件,生成成功。

2.2 如果你想重命名生成的文件

go guild -o yourname.exe

2.3 执行想两步成一步 (即先执行buid,然后再把生成的 exe文件,放到 bin 目录下)

go install

2.4 跨平台编译

不同的环境,命令不同,用到再说吧。




三. 基础用法

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

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
)

Iota的基本使用

// 定义数量级
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)
	}
}

continue 和 break 语句

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 相当于是 else if 的一个变种

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.9 调出两层循环

可以使用外边设置一个 flag ,也可以使用 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
今日推荐