包的使用
- 引入时,用.做前缀,使用时可以省略包名,不建议这么使用
- 可以前缀别名
- "_"下划线操作,可以执行包里面对应的init函数
- 首字母大写的字段和实体,才能被外部引用
init函数和main函数
- 这两个函数都是GO语言中的保留函数,init用于初始化,main函数作为程序入口
- 这两个函数不能有参数,返回值。只能由go程序自动调用
- init函数可以定义在任意的包中,可以有多个。main函数只能在main包下,且只有一个
- 执行顺序
- 先执行init函数,在执行main函数
- 对于同一个go文件中,调用顺序是从上到下
- 对于同一个包下,是按文件名称从上到下
- 对于不同包下
如果不存在依赖,则按import的顺序来调用init
如果存在依赖,最后被依赖的最先被初始化 - 存在依赖的包之间,不能循环导入
引用外部包
cmd命令
go get github.com/go-sql-driver/mysql
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
func main() {
open, err := sql.Open("mysql", "用户名:密码@tcp(127.0.0.1:3306)/zzystudy?useUnicode=true&characterEncoding=utf8&useSSL=true")
if err != nil {
fmt.Println(1, err)
} else {
fmt.Println(0, open)
}
}
断点续传
func main() {
fileName := "构建高性能WEB站点.pdf"
fileNamePath1, _ := filepath.Abs(fileName)
copyFilePath := fileNamePath1[:strings.LastIndex(fileNamePath1, "\\")+1] + "copy" + fileName
tempFile := copyFilePath + "temp.txt"
fmt.Println(tempFile)
file1, _ := os.Open(fileNamePath1)
file2, _ := os.OpenFile(copyFilePath, os.O_CREATE|os.O_RDWR, os.ModePerm)
file3, _ := os.OpenFile(tempFile, os.O_CREATE|os.O_RDWR, os.ModePerm)
defer file1.Close()
defer file2.Close()
file3.Seek(0, io.SeekStart)
bs := make([]byte, 100, 100)
n1, _ := file3.Read(bs)
countStr := string(bs[:n1])
count, _ := strconv.ParseInt(countStr, 10, 64)
fmt.Println(count)
file1.Seek(count, io.SeekStart)
file2.Seek(count, io.SeekStart)
data := make([]byte, 1024, 1024)
n3 := -1
total := int(count)
for {
n2, err := file1.Read(data)
if err == io.EOF || n2 == 0 {
fmt.Println("复制完毕")
file3.Close()
os.Remove(tempFile)
break
}
// 模拟断点
if total > 90000000 {
break
}
n3, _ = file2.Write(data)
total += n3
file3.Seek(0, io.SeekStart)
file3.WriteString(strconv.Itoa(total))
}
}
标签:11,file3,01,函数,fmt,init,Go,main,os
From: https://www.cnblogs.com/huacha/p/16881024.html