包的概念
- 把相同功能的代码放在一个目录,称之为包
- 包可以被其他包引用
- main包时用来生成可执行文件的,每个程序只能有一个main函数
- 包的主要用提时提高代码的可复用性
基本命令
#快速执行
go run .\src\github.com\studyGithubPro\day01\hello.go
#编译
go build .\src\github.com\studyGithubPro\day01\hello.go
#结果:在当前目录下生成
hello.exe
#指定生成目录
go build .\src\github.com\studyGithubPro\day01\hello.go -o ./bin/hello.exe
#go install命令
#把当前目录下的exe文件拷贝到bin目录下
go install hello
#go test 执行单元测试
#go env 查看环境变量
#go fmt 设置源码格式
go fmt .\src\github.com\studyGithubPro\day01\hello.go
#Go程序结构
#注释
1. 当行注释 //
2. 多行注释 /* */
特性
- 垃圾回收机制
a,内存自动回收
b,goroutine,轻量级线程,可创建成千上万的线程func calc(){ for i := 0;j<10;i++{ time.Sleep(1*time.Second) fmt.Println("run ",i, " times") } } go calc()
- 管道:进程间通信
- 多返回值
func add(a int, b int) int { return a+b } func add2(a int, b int) (int,int) { return a+b,a-b } func main(){ sum,sub := add(5,3) fmt.Pintln(sum,sub) }
- 编译型语言
标识符,关键字
变量与常量
var number int = 100
var str string = "hello"
var b bool
var(
number int = 100
str string = "hello"
b bool = false
f float32 = 32.33
)
//布尔个格式化符号是%t
fmt.Println("%d, %t, %s, %f",number,b,str,f)
//常量
const str string = "hello"
//可不加类型修饰
const Pi = 3.1415
const(
//iota 默认值为0,递增
a1 = iota
a2 = iota
a3= 5
a4 = iota //4
)
const(
//如果不初始化,则与前一个值相同
a1 = 1
a2 //1
a3 = 2
a4 //2
)
//bool类型
var a bool //默认初始化值为false
var b bool //默认初始化值为false
b = !b //取反
if a == true && b == true{
fmt.Println("right")
}else{
fmt.Println("not right")
}
//整数和浮点数
int8
int16
int32
int64
uint8
uint16
uint32
uint64
float32
float64
//万能输出占位符:
//当不知变量类型时使用
%v
//=与:=的区别
var a int32
a = 100
//自动定义
//已定义的变量不可使用:=
b := 200
//引号,原样输出字符,转义字符无效
`\n\t\r`
//函数
var str string = "123456"
lens := len(str)
//拼接
fmt.Sprintf("%s,%s",str,str)
//截取
strings.Split()
//包含
strings.Contains()
//字符串开头
strings.HasPrefix()
//结尾判断
strings.HasSuffix()
//字符出现位置判断,前,后
strings.Index()
strings.LastIndex()
//切片
var str = "123456"
//由于字符串在被赋值后无法别修改
//通过切片的方式修改
var byteSlice []byte
byteSlice = []byte(str)
byteSlice[0] = 2
//将切片转成string类型
str = string(byteSlice)
//utf8字符
var str rune = "中文"
var byteSlice []rune
byteSlice = []rune (str)
lens := len(byteSlice) //2
包引用规则
通过大小写区分私有和共有访问控制
大写开头表示共有,可被外部访问
小写表示私有,不可被外部访问
时间和日期类型
package main
import (
"fmt"
"time"
)
func testTime(){
now := time.Now()
year := now.Year()
month := now.Month()
day := now.Day()
minute:= now.Minute()
sec := now.Second()
day := now.Day()
fmt.Println("当前时间:%v\n", now)
fmt.Println("年月日:%04d\n", year)
//当前时间戳,1970到现在的秒数
//一下两种方式得到的时间戳相同
timestamp := now.Unix()
timeObj := time.Unix(timestamp,0)
}
//定时器
func testTicker(){
//每秒执行定时器,设置10s定时器
ticker := time.Tick(time.Second*10)
for i:= range ticker{
fmt.Println("当前时间:%v\n", time.now())
}
}
//时间常量
func testTimeCosnst(){
//val = 1
fmt.Println("ManoSecond:%d\n", time.ManoSecond)
}
//格式化
func testTimeFrom(){
now := time.now()
//时间必须是这个,不可修改
timStr = now.Format("2006/01/02 15:04:05")
fmt.Println("timStr :%d\n", timStr)
}
func main(){
testTime()
}
条件判断和循环语句
n := 2
if n == 2 {
fmt.Println("n:%d\n", n)
}else{
fmt.Println("n != 2\n")
}
更新时间:2020年4月12日21:10:33