首页 > 其他分享 >11-Go语言进阶-01

11-Go语言进阶-01

时间:2022-11-14 17:37:47浏览次数:61  
标签:11 file3 01 函数 fmt init Go main os

包的使用

  1. 引入时,用.做前缀,使用时可以省略包名,不建议这么使用
  2. 可以前缀别名
  3. "_"下划线操作,可以执行包里面对应的init函数
  4. 首字母大写的字段和实体,才能被外部引用

init函数和main函数

  1. 这两个函数都是GO语言中的保留函数,init用于初始化,main函数作为程序入口
  2. 这两个函数不能有参数,返回值。只能由go程序自动调用
  3. init函数可以定义在任意的包中,可以有多个。main函数只能在main包下,且只有一个
  4. 执行顺序
    1. 先执行init函数,在执行main函数
    2. 对于同一个go文件中,调用顺序是从上到下
    3. 对于同一个包下,是按文件名称从上到下
    4. 对于不同包下
      如果不存在依赖,则按import的顺序来调用init
      如果存在依赖,最后被依赖的最先被初始化
    5. 存在依赖的包之间,不能循环导入

引用外部包

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

相关文章

  • Go的ORM安装使用
    源码开发      安装包管理第三方模块goenv-wGO111MODULE=ongomodinitgowebgomodtidygorunmain.go初始化go项目步骤     goe......
  • 4.go中的变量
    1.变量表示内存中的一个存储区域2.该区域有自己的名称(变量名)和类型(数据类型)3.使用的三种方式 指定变量类型,声明后若不赋值,使用默认值根据值自行判定变量类型(类型推导......
  • Mongodb集群搭建
    mongodb的集群搭建方式主要有三种,主从模式,Replicaset模式,sharding模式,三种模式各有优劣,适用于不同的场合,属Replicaset应用最为广泛,主从模式现在用的较少,sharding模式最......
  • 乘风破浪,遇见新一代工业互联网(Industrial Internet)之工业机器人赛道,自2017年以来,中
    工业机器人工业机器人是先进制造业的关键支撑设备,是一个国家成为制造业强国的基础。而全球工业机器人的市场长期由日本和欧洲公司主导,如瑞士ABB,德国KUKA,日本川崎重工等行......
  • Java学习——11.14
    将近4天没更新啊,为什么呢,主要是面向过程太难太抽象了,不过好在我用四天还是将他理解了。1.封装(关键字:private)保护私有的方法和属性。set直接修改private  ......
  • Go语言的一些资料汇总
    1. ​​8分钟了解你为什么应该学习Go语言 ​​​​https://www.bilibili.com/video/av45561733/​​2.​​手把手教你从零开始搭建Go语言开发环境​​​​https:/......
  • Golang写时复制是否是原子性的?
    建议先阅读下Go汇编语言的入门教程​​​https://go.dev/doc/asm​​先说一下我这边的一个简化场景吧,有一个定时任务定时从数据库获取数据,也就是对应实例代码中的getNewPro......
  • 给 Go 库作者的建议
    视频信息PracticalAdviceforGoLibraryAuthorsbyJackLindamoodatGopherCon2016​​https://www.youtube.com/watch?v=5v2fqm_8jYI​​幻灯地址:​​​http://go-talk......
  • ASEMI肖特基二极管SBT20100VDC特征,SBT20100VDC应用
    编辑-ZASEMI肖特基二极管SBT20100VDC参数:型号:SBT20100VDC最大重复峰值反向电压(VRRM):100V最大平均正向整流输出电流(IF):20A峰值正向浪涌电流(IFSM):180A每个元件的典型热阻(R......
  • SBT10100VDC-ASEMI低压降贴片肖特基二极管SBT10100VDC
    编辑-ZSBT10100VDC在TO-263封装里采用的2个芯片,其尺寸都是62MIL,是一款低压降贴片肖特基二极管。SBT10100VDC的浪涌电流Ifsm为150A,漏电流(Ir)为4uA,其工作时耐温度范围为-65......