包
//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("不知道")
}
}