第十篇: GO-包、go mod、if-else语句、switch语句

Go mod

语法

module my/thing

go 1.13.4

require (
new/thing v2.3.4
old/thing v1.2.3
)
1.module:指明根目录

2.go 后面跟版本号是指定go的版本

2.require是个动作指令,对依赖包起作用,比如require(依赖),还有exclude(排除),replace(替代),相同动作的可以放在一个动词+括号组成的结构中,如下:

require (
new/thing v2.3.4
old/thing v1.2.3
)

require new/thing v2.3.4
require old/thing v1.2.3

// 排除
exclude old/thing v1.2.3

// 替换,使用箭头后的替换前面的
replace bad/thing v1.4.5 => good/thing v1.4.5


注意:
exclude和replace仅适用于主的go.mod文件中,其他的依赖中会被忽略、
可以使用replace替换无法获取的库,
比如golang.org/x/crypto replace为github.com.com/golang/crypto
3.注释:使用//,没有/* xxx */这种块注释

命令

go mod help 查看帮助

1.开启mod:go env -w GO111MODULE=on,会将包下载到gopath下的pkg下的mod文件夹中
2.关闭mod:go env -w GO111MODULE=off,会将包下载到gopath下的src下
3.go env GO111MODULE=auto,只有当当前目录在GOPATH/src目录之外而且当前目录包含go.mod文件或者其子目录包含go.mod文件才会启用。

go mod download 下载模块到本地缓存,go env中的GOCACHE路径,可以通过go clean -cache清空缓存
多个项目可以共享缓存的包
go mod edit 在工具或脚本中编辑go.mod文件
go mod graph 打印模块需求图
go mod init 在当前目录下初始化新的模块
go mod init 【项目名】 默认使用当前路径的项目名称
go mod tidy 添加缺失的模块以及移除无用的模块,生成go.sum文件
go mod vendor 会自动下载项目中依赖的包到项目根目录下的vendor文件夹下,并写入go.mod文件,同时生成
modules.txt文件
go mod vender -v

go mod verify 检查当前模块的依赖是否全部下载下来,是否下载下来被修改过
go mod why 解释为什么需要包或模块


注意:-v参数可以查看执行的详细信息

//1 在同一个包下(文件夹下),包名必须一致
//2 以后,包名就是文件夹的名字
//3 同一个包下,同名函数只能有一个(init除外)
//4 一个包(当成一个文件),同一包下的函数,直接调用即可
//5 导包的位置,从src路径开始
//6 包只要在src路径下就可以导入
//7 大写表示导出,在外部包可以使用,小写只能在包内部适应
//8 使用第三方包:go get github.com/astaxie/beego  (放到gopath的src路径下)
	-python:pip3 install requests
    package main
    import "github.com/astaxie/beego"

    func main() {
      beego.Run()
    }

mode模式

//1 包导入 import . "github.com/astaxie/beego"  类似于python中form xx import *
//2 包导入 import _ "github.com/go-sql-driver/mysql"  触发init的执行,但是不试用包内的函数
//3 包导入 import f "fmt"   重命名,以后直接用f

//4 对比python中__init__.py  
//在代码中导入模块
import xx   实质上触发__init__.py  的执行(在__init__.py中也可以执行其他代码,对应到go中就是init函数)
一般情况下,在__init__.py写from xx import 会使用到的函数,导过来
以后再用 xx.函数()

//5 go mod没有之前,可以设置多个gopath,开发某个项目,切到不同的gopath,类似于虚拟环境

//6 go env
	-GO111MODULE="off"  表示go mod模式是关闭的,用gopath
	-一旦开启了go mod模式,代码不需要放在src路径下(任意位置都可以)
	-在项目路径下要有 go.mod 文件(文件里记录了,go版本,项目依赖的包,包的版本)
	-写代码,建自己的包即可
	-一般情况下,项目有一个main.go  内部是main包,main函数,整个程序的入口

if-else语句

//if-else
package main

import "fmt"

func main() {
	//a:=9
	//1 基本使用
	if a>10{
		fmt.Println("大于10")
	}else {
		fmt.Println("小于等于10")
	}

	//2 if -else if -else
	if a>10{
		fmt.Println("大于10")
	}else if a==10 {
		fmt.Println("等于10")
	}else {
		fmt.Println("小于10")
	}

	//3 不能换行(go语言每一行结尾,需要加一个;  ,每当换行,会自动加;)
	if a>10{
		fmt.Println("大于10")
	}else if a==10 {
		fmt.Println("等于10")
	}else
	{
		fmt.Println("小于10")
	//}

	//4 条件里可以进行初始化操作(有作用域范围的区别)
	a:=10;
	if a<10{
	if a:=10;a<10{
		fmt.Println("xxx")
	}else {
		fmt.Println("yyyy")
	}
	fmt.Println(a)

	fmt.Println(a)
}

循环

//循环(只有for循环,没有while ,do while)
package main

import "fmt"

func main() {
	//1 基本语法
	//for 初始化;条件判断;自增/自减{ 循环体内容  }    三部分都可以省略
	//打印0--9
	for i:=0;i<10 ;i++  {
		fmt.Println(i)
	}

	//2 省略第一部分(初始化),作用域范围不一样
	i:=0
	for ;i<10 ; i++ {
		fmt.Println(i)
	}

	//3 省略第三部分
	for i:=0;i<10 ;  {
		i++
		fmt.Println(i)
	}

	//4 省略第一和第三部分
	i := 0
	for ; i < 10; {
		i++
		fmt.Println(i)
	}
	
	//5 这不就是while循环吗?
	for 条件 {}
	i := 0
	for i < 10 {
		i++
		fmt.Println(i)
	}
	for true{
		fmt.Println(1)
	}

	//6 死循环(三部分都省略)
	for {
		fmt.Println(1)
	}

	//7 break和continue(和python一样)
	for {
		fmt.Println(1)
		//break
		continue
	}
}

switch语句

//switch
package main

import "fmt"

func main() {
	// 1 switch 基本使用
	a:=10
	switch a {
	case 1:
		fmt.Println("1")
	case 2:
		fmt.Println(2)
	case 9:
		fmt.Println(9)
	case 10:
		fmt.Println("10")
	}

	//2 default
	a:=15
	switch a {
	case 1:
		fmt.Println("1")
	case 2:
		fmt.Println(2)
	case 9:
		fmt.Println(9)
	case 10:
		fmt.Println("10")
	default:
		fmt.Println("不知道")
	}

	//3 多条件
	a:=3
	switch a {
	case 1,2,3:
		fmt.Println("1")
	case 4,5,6:
		fmt.Println(2)
	case 7,9:
		fmt.Println(9)
	case 10,16:
		fmt.Println("10")
	default:
		fmt.Println("不知道")
	}


	//4 无表达式
	a:=3
	switch  {
	case a==1 || a==3:
		fmt.Println("1")
	case a==4||a==5:
		fmt.Println(2)
	default:
		fmt.Println("不知道")
	}

	//5 fallthrough,无条件执行下一个case
	a:=1
	switch  {
	case a==1 || a==3:
		fmt.Println("1")
		//fallthrough  //fallthrough 会无条件执行下一个case
	case a==4||a==5:
		fmt.Println(2)
		fallthrough
	default:
		fmt.Println("不知道")
	}
}
posted @ 2022-10-03 03:47  hai起奈  阅读(17)  评论(0编辑  收藏  举报