当前位置: 首页 > news >正文

做网站人才广州seo网站推广优化

做网站人才,广州seo网站推广优化,品牌建设的具体措施,代做网站地图Go语言基础 介绍 目录操作 创建 删除 重命名 遍历目录 修改权限 文件操作 创建 打开关闭 删除 重命名 修改权限 读文件 写文件 文件定位 拷贝 测试 单元测试 基准测试 示例 介绍 本文介绍Go语言中目录操作(创建目录、删除目录、重命名、遍历…

Go语言基础

介绍

目录操作

文件操作

测试

介绍

  • 本文介绍Go语言中目录操作(创建目录、删除目录、重命名、遍历目录、修改权限)、文件操作(创建、打开关闭、删除、重命名、修改权限、读文件、写文件、文件定位、拷贝)、测试(单元测试、基准测试、示例)等相关知识。

目录操作

  • 在计算机中,目录是组织和存储文件的一种方式,可以多层嵌套结构。
  • Go语言提供标准包 os 中相关方法对目录进行操作。
创建
package mainimport ("fmt""os"
)func main() {var path string = "./test_dir"// 创建单层目录,若 path 存在一个以上不存在目录,则创建失败// 目录已经存在,创建失败err := os.Mkdir(path, 0755)if err != nil {fmt.Println("create dir failed")} else {fmt.Println("create dir succeed")}path = "./test_dir/a/b"// 创建多层目录,未知目录嵌套数量大于等于零个err = os.MkdirAll(path, 0755)if err != nil {fmt.Println("create dir failed")} else {fmt.Println("create dir succeed")}
}
删除
package mainimport ("fmt""os"
)func main() {var path string = "./test_dir"// 删除单层目录,若删除目录存在子目录,则删除失败// 删除的目录不存在时,删除失败err = os.Remove(path)if err != nil {fmt.Println("remove dir failed")} else {fmt.Println("remove dir succeed")}// 删除多层目录,不必关注目录是否存在path = "./test_dir"err = os.RemoveAll(path)if err != nil {fmt.Println("remove dir failed")} else {fmt.Println("remove dir succeed")}
}
重命名
package mainimport ("fmt""os"
)func main() {var path string = "./test_dir"err := os.Mkdir(path, 0755)if err != nil {fmt.Println("create dir failed")} else {fmt.Println("create dir succeed")}// 重新命名时,新名称已经存在时,命名失败err = os.Rename(path, "./test_dir_new")if err != nil {fmt.Println("rename dir failed")} else {fmt.Println("rename dir succeed")}
}
遍历目录
package mainimport ("fmt""os""path/filepath"
)func main() {var path string = "./../../src"// 读取 path 目录下所有目录,注意只读取单层,若 path 目录不存在读取失败dir, err := os.ReadDir(path)if err != nil {fmt.Println("read dir failed")} else {fmt.Println("read dir succeed")for _, v := range dir {fmt.Println("Name: ", v)}}// 遍历子目录下所有文件和子目录sDir := new([]os.FileInfo)err = filepath.Walk(path, func(path string, info os.FileInfo, err error) error {*sDir = append(*sDir, info)return nil})if err != nil {fmt.Println("read dir failed")} else {fmt.Println("read dir succeed")for _, v := range *sDir {fmt.Println("Name: ", v.Name())}}
}
修改权限
package mainimport ("fmt""os"
)func main() {var path string = "./test_dir"err := os.Mkdir(path, 0755)if err != nil {fmt.Println("create dir failed")} else {fmt.Println("create dir succeed")}// 0777 为八进制权限表示方式// 权限分三组:所有者(user)、组(group)和其他人(others)// 每组权限又分为读(r)、写(w)和执行(x)// 例如:rwxrw-r--(对应数组421|420|400,八进制表示0764)err = os.Chmod(path, 0777)if err != nil {fmt.Println("chmod failed")} else {fmt.Println("chmod succeed")}
}

文件操作

  • 在计算机中,文件是非常重要的IO,可以存储文件或进行数据交换等,Linux系统更是"一切皆文件"。
  • 在Go语言中,主要操作文件的包在 os 中。
创建
package mainimport ("fmt""os"
)func main() {var name string = "./test_dir/test_file.txt"// 创建文件,路径错误会创建失败,若不存在则创建,若存在则清空文件内容file, err := os.Create(name)if err != nil {fmt.Println("create file failed")} else {fmt.Println("create file succeed")defer file.Close()}
}
打开关闭
package mainimport ("fmt""os"
)func main() {var name string = "./test_dir/test_file.txt"// 打开文件,路径错误会打开失败,文件不存在会打开失败,返回文件指针与错误信息file, err := os.Open(name)if err != nil {fmt.Println("open file failed")} else {fmt.Println("open file succeed")// 使用 defer 延迟关闭方法调用defer file.Close()}// 通用的文件打开调用,通过标识可创建、只读、只写、追加、截断等打开文件// 第三个参数为权限,创建时使用,返回文件指针与错误信息name = "./test_dir/test_file2.txt"f, e := os.OpenFile(name, os.O_RDONLY|os.O_CREATE|os.O_APPEND, 0755)if e != nil {fmt.Println("open file failed")} else {fmt.Println("open file succeed")// 使用 defer 延迟关闭方法调用defer f.Close()}
}
删除
package mainimport ("fmt""os"
)func main() {name := "./test_dir/test_file2.txt"// 删除文件,文件不存在或路径错误删除失败err = os.Remove(name)if err != nil {fmt.Println("remove file failed")} else {fmt.Println("remove file succeed")}// 删除文件,不必判断文件是否存在或路径是否正确err = os.RemoveAll(name)if err != nil {fmt.Println("remove file failed")} else {fmt.Println("remove file succeed")}
}
重命名
package mainimport ("fmt""os"
)func main() {var name string = "./test_dir/test_file.txt"// 文件重命名,路径错误或对应目录下新文件名已经存在,重命名失败err := os.Rename(name, "./test_dir/test_file2.txt")if err != nil {fmt.Println("rename file failed")} else {fmt.Println("rename file succeed")}
}
修改权限
package mainimport ("fmt""os"
)func main() {var name string = "./test_dir/test_file2.txt"// 文件访问权限修改err := os.Chmod(name, 0744)if err != nil {fmt.Println("chmod failed")} else {fmt.Println("chmod succeed")}
}
读文件
package mainimport ("fmt""io""os"
)func main() {//读取文件file, err := os.OpenFile("./test_dir/test_file2.txt", os.O_RDONLY, 0755)if err != nil {fmt.Println("open file failed", err)return}defer file.Close() //main 函数结束前执行文件资源释放fmt.Println("open file succeed")// 方式一:打开文件读取//定义参数切片var arr [1024]byte = [1024]byte{0}result := arr[:]n, err := file.Read(result) //以切片的形式读取//读取过程中出现异常if err != nil && err != io.EOF {fmt.Println("read file failed", err)return}fmt.Printf("byte size: %d\n", n)fmt.Printf("file content: %s\n", string(result[0:n]))for {n, err = file.Read(result) //以切片的形式读取//读取过程中出现异常if err == io.EOF || n == 0 {break}if err != nil {fmt.Println("read file failed", err)return}fmt.Printf("byte size: %d\n", n)fmt.Printf("file content: %s\n", string(result[0:n]))}// 文件判断读取是否完成fmt.Println("read file over", err)// 方式二:使用 bufio 读取// 创建 bufio 缓冲区读取reader := bufio.NewReader(file)/*for { //循环读取内存,输出到程序中str, err := reader.ReadString('\n') //按行读取if err == io.EOF {fmt.Print(str)return}if err != nil {fmt.Println("文件读取异常", err)return}fmt.Print(str)}*/
}
写文件
package mainimport ("bufio""fmt""os"
)func main() {// 打开文件,以追加方式写入file, err := os.OpenFile("./test_dir/test_file2.txt", os.O_WRONLY|os.O_APPEND, 0755)if err != nil {fmt.Println("open file failed", err)return}defer file.Close() //main 函数结束前执行文件资源释放fmt.Println("open file succeed")// 方式一:直接追加数据// 字节切片写入file.Write([]byte("write file data, slice\n"))// 字符串写入str := "string write"file.WriteString(str)// 方式一:使用 bufio 追加数据// 文件写入缓冲区w := bufio.NewWriter(file)//内容写入缓冲区w.WriteString("\nbufio write data\n")//缓冲区数据刷新w.Flush()
}
文件定位
package mainimport ("fmt""io""os"
)func main() {// 打开文件,默认文件指针偏移量为0,即在文件起始位置file, err := os.OpenFile("./test_dir/test_file2.txt", os.O_RDONLY, 0755)if err != nil {fmt.Println("open file failed", err)return}defer file.Close() //main 函数结束前执行文件资源释放fmt.Println("open file succeed")// 此时读取文件字节数,文件实际数据不超过1000字节//定义参数切片var arr [1024]byte = [1024]byte{0}result := arr[:]n, err := file.Read(result) //以切片的形式读取//读取过程中出现异常if err != nil && err != io.EOF {fmt.Println("read file failed", err)return}fmt.Printf("byte size: %d\n", n)// 以上操作读完文件后,文件指针已经指向文件末尾,此时不可能继续读取文件内容// 将文件指针移动到文件起始位置// os.SEEK_CUR, os.SEEK_CUR is deprecatedoff, e := file.Seek(0, io.SeekStart) // 相对于起始位置偏移值if e != nil {fmt.Println("seek filed")return}fmt.Println("off: ", off)n, err = file.Read(result) //以切片的形式读取//读取过程中出现异常if err != nil && err != io.EOF {fmt.Println("read file failed", err)return}fmt.Printf("byte size: %d\n", n)
}
拷贝
// 调用 Copy 方法实现文件复制
package mainimport ("io""os"
)// 文件复制函数
func CopyFile(src, dst string) (err error) {in, err := os.OpenFile(src, os.O_RDONLY, 0744)if err != nil {return}defer in.Close()// 文件不存在就创建out, err := os.OpenFile(dst, os.O_CREATE|os.O_WRONLY, 0754)if err != nil {return}defer out.Close()_, err = io.Copy(out, in)return
}func main() {src := "./test_dir/test_file2.txt"dst := "./test_dir/test_file.txt"err := CopyFile(src, dst)if err != nil {panic(err)}
}

单元测试

  • 软件开发重要环节之一就是对所写代码进行测试,编写测试用例能确保一些问题能在此阶段发现并修改。
  • Go语言中的测试依赖 go test 命令在包目录内,格式以 *_test.go 为后缀名的源代码文件都是 go test 测试的一部分。
  • 在 *_test.go 文件中有三种类型的函数,单元测试函数、基准测试函数 和示例函数。
类型格式备注
单元测试前缀为Test测试逻辑
基准测试前缀为Benchmark测试性能
示 例前缀为Example提供示例
  • 用来测试的代码必须以 _test.go 结尾。
  • 单元测试的函数名必须以 Test 开头,只有一个参数,类型是 *testing.T。
  • 单元测试函数名 Test 后,被测函数名首字母必须大写。
  • 更多功能请参照官方文档:包testing。
单元测试
// pkgtest.go 源文件
package pkgtestfunc Add[T int | float32](a, b T) T {return a + b
}func sub[T int | float32](a, b T) T {return a - b
}// pkgtest_test.go 源文件
package pkgtestimport "testing"// Test开头,函数名首字母大写
package pkgtestimport "testing"func TestAdd(t *testing.T) {var a, b int = 10, 20if 31 != Add(a, b) {t.Error("Test failed")return}t.Log("Test succeed")
}func TestSub(t *testing.T) {var a, b int = 10, 20if 31 != sub(a, b) {t.Error("Test failed")return}t.Log("Test succeed")
}// 在终端运行指令 go test -v 输出测试结果
// 在终端运行指令 go test -cover -run -coverprofile='.\c.out' -coverpkg=pkgtest 输出覆盖测试结果
// 在终端运行指令 go tool cover -html='.\c.out' -o coverage.html 将结果转换为网页形式打开
基准测试
  • 基准测试或压力测试必须以 Benchmark 开头,并且只有参数 *testing.B。
func BenchmarkAdd(b *testing.B) {var a, c int = 10, 20for i := 0; i < 100; i++ {Add(a, c)}
}// 在终端运行指令 go test -run "none" -bench . -benchmem 执行基准测试
示例
func ExampleAdd() {var a, c int = 10, 20fmt.Println("a + c = ", a+c)
}

起始


文章转载自:
http://arginase.przc.cn
http://washbasin.przc.cn
http://sustentaculum.przc.cn
http://knitwear.przc.cn
http://phoenix.przc.cn
http://nina.przc.cn
http://detoxicator.przc.cn
http://praiseworthy.przc.cn
http://artful.przc.cn
http://corticosteroid.przc.cn
http://circumfluent.przc.cn
http://weedy.przc.cn
http://haemospasia.przc.cn
http://augmentation.przc.cn
http://tailrace.przc.cn
http://british.przc.cn
http://protoxide.przc.cn
http://stillborn.przc.cn
http://ichthyophagist.przc.cn
http://drench.przc.cn
http://chubb.przc.cn
http://eurasiatic.przc.cn
http://epicene.przc.cn
http://audition.przc.cn
http://duniewassal.przc.cn
http://civics.przc.cn
http://reship.przc.cn
http://idempotency.przc.cn
http://leaves.przc.cn
http://daystart.przc.cn
http://urbanization.przc.cn
http://sudra.przc.cn
http://passementerie.przc.cn
http://blimy.przc.cn
http://eerie.przc.cn
http://cham.przc.cn
http://decrepitate.przc.cn
http://genouillere.przc.cn
http://dame.przc.cn
http://carbonara.przc.cn
http://facetiously.przc.cn
http://reflexible.przc.cn
http://fizz.przc.cn
http://promontoried.przc.cn
http://whoosis.przc.cn
http://loanee.przc.cn
http://dah.przc.cn
http://esterify.przc.cn
http://vibracula.przc.cn
http://kokura.przc.cn
http://groundprox.przc.cn
http://psychoactivity.przc.cn
http://anorexia.przc.cn
http://rebbitzin.przc.cn
http://dragoness.przc.cn
http://fallacious.przc.cn
http://hoof.przc.cn
http://cochleate.przc.cn
http://retrude.przc.cn
http://springwood.przc.cn
http://infralapsarian.przc.cn
http://strain.przc.cn
http://chasmophyte.przc.cn
http://herefordshire.przc.cn
http://patteran.przc.cn
http://gussy.przc.cn
http://funchal.przc.cn
http://lumisterol.przc.cn
http://grandma.przc.cn
http://paster.przc.cn
http://iconometer.przc.cn
http://slipware.przc.cn
http://yorks.przc.cn
http://isotype.przc.cn
http://oary.przc.cn
http://udt.przc.cn
http://erysipelothrix.przc.cn
http://prelection.przc.cn
http://harvester.przc.cn
http://innumeracy.przc.cn
http://caulk.przc.cn
http://chigoe.przc.cn
http://propagate.przc.cn
http://exultance.przc.cn
http://seismograph.przc.cn
http://kodachrome.przc.cn
http://lunarscape.przc.cn
http://armorica.przc.cn
http://crispness.przc.cn
http://walbrzych.przc.cn
http://seriocomic.przc.cn
http://spitefully.przc.cn
http://ruggery.przc.cn
http://scrounge.przc.cn
http://erotologist.przc.cn
http://polyfunctional.przc.cn
http://polysemy.przc.cn
http://pav.przc.cn
http://retrievable.przc.cn
http://cordless.przc.cn
http://www.15wanjia.com/news/59428.html

相关文章:

  • 安全电子商务网站设计广州网络营销运营
  • 淘客网站怎么做 知乎百度论坛发帖
  • 做网站和做游戏哪个难搜索引擎优化包括哪些方面
  • 桂林卖手机网站上海广告公司
  • 建设银行官网的网站首页杭州网站seo推广软件
  • 淘客推广软件南昌seo全网营销
  • 个人做百度云下载网站吗促销方法100种
  • 虚拟机上做钓鱼网站时事新闻
  • 做英文网站费用最新的新闻 最新消息
  • wordpress主题商品展示郑州网站建设推广优化
  • 秦皇岛建设信息网站怎样申请自己的电商平台
  • 青岛个人网站制作上海排名优化seo
  • cms三合一网站源码西安百度关键词排名服务
  • 计算机应用技术网站建设线上推广有哪些渠道
  • 微网站模板源代码自媒体平台注册下载
  • 山西 网站建设营销方案100例
  • 哪些网站做的比较炫重庆专业seo
  • 小购物网站建设市场营销策划书范文5篇精选
  • 没有网站可以做app吗苏州吴中区seo关键词优化排名
  • 肥乡企业做网站推广软文营销怎么写
  • 北京网站建设的服务沈阳seo关键词排名优化软件
  • 南京农业大学新校区建设网站网络怎么推广自己的产品
  • 手机访问pc网站跳转网页设计主要做什么
  • 网站界面可以做版权吗国内做seo最好公司
  • 药企网站怎么做抖音seo推荐算法
  • 北京网站建设q479185700強人民日报官网
  • 武汉市东西湖区建设局官方网站seo排名点击手机
  • 网站主页设计布局博客
  • wordpress后台缺少菜单工具seo
  • 哪里学网站建设与管理营销软文模板