golang入门笔记—包和文件

在这里插入图片描述

//go语言中,一个包只能访问另一个包中首字母为大写的方法和变量
//import 别名 “包的路径”
//匿名导入包import _"包的路径"
//包导入路径是从”$GOPATH/src“

package calc

func Add(x int, y int) int {
	return x + y
}


ackage main

import (
	"fmt"
	c "test/calc"
)

func main() {
	ret := c.Add(10, 20)
	fmt.Println(ret)
}


//init()初始化函数:在go语言程序执行时导入包语句会自动触发包内部init()函数的调用,需要注意的是:init()函数没有参数也没有返回值。init()函数在程序运行时自动被调用执行,不能在代码中主动调用它
//包初始化执行的顺序:全局声明-->init()-->main()
package calc

func init(){
	fmt.Println("自动执行!")
}

func Add(x int, y int) int {
	return x + y
}

在这里插入图片描述

//文件操作:

package main	

import (
	"fmt"
	"io"
	"os"
)

//文件读取
func readbybyte(filename string) {
	fileObj, err := os.Open(filename)
	//fileObj是*os.File类型,err是error类型
	if err != nil {
		fmt.Printf("open file failed, err:%v", err)
		return
	}
	//记得关闭文件
	defer fileObj.Close()//当err不为nil时,fileObj为nil,不能调用Close方法
	//读文件
	//var tmp =make([]byte,128) 指定读的长度
	var tmp [128]byte
	for {
		n, err := fileObj.Read(tmp[:])
		if err == io.EOF || n <= 0 {
			return
		}
		if err != nil {
			fmt.Printf("read from file failed, err:%v", err)
			return
		}
		fmt.Printf("读了%d个字节\n", n)
		fmt.Println(string(tmp[:n]))
	}
}

//bufio按行读取示例
func readbybufio(filename string) {
	fileObj, err := os.Open(filename)
	if err != nil {
		fmt.Printf("open file failed, err:%v", err)
		return
	}
	defer fileObj.Close()
	reader := bufio.NewReader(fileObj)
	for {
		line, err := reader.ReadString('\n') //注意是字符
		if err == io.EOF {
			return
		}
		if err != nil {
			fmt.Printf("read from file failed, err:%v", err)
			return
		}
		fmt.Println(line)
	}
}

//按ioutil一次读取全部文件
func readbyioutil(filename string) {
	ret, err := ioutil.ReadFile(filename)
	if err != nil {
		fmt.Printf("read file failed,err:%v\n", err)
		return
	}
	fmt.Println(string(ret))
}

//文件写入
func writefile(filename string) {
	fileObj, err := os.OpenFile(filename, os.O_CREATE|os.O_APPEND, 0644) //有则追加,无则创建
	if err != nil {
		fmt.Printf("open file failed,err:%v\n", err)
		return
	}
	fileObj.Write([]byte("zhoulin mengbi le!"))
	fileObj.WriteString("周林解释不了")
	fileObj.Close()
}

func writefile2(filename string) {
	fileObj, err := os.OpenFile(filename, os.O_CREATE|os.O_APPEND, 0644)
	if err != nil {
		fmt.Printf("open file failed,err:%v\n", err)
		return
	}
	defer fileObj.Close()
	wr := bufio.NewWriter(fileObj)
	wr.WriteString("hello沙河\n") //写到缓存中
	wr.Flush()                  //把缓存中的内容写入文件
}

func writefile3(filename string) {
	str := "hello 沙河"
	err := ioutil.WriteFile(filename, []byte(str), 0666)
	if err != nil {
		fmt.Printf("read file failed,err:%v\n", err)
		return
	}
}

func fileinsert(filename string) {
	fileObj, err := os.OpenFile(filename, os.O_RDWR, 0644)
	if err != nil {
		fmt.Println("文件打开失败")
		return
	}
	defer fileObj.Close()
	fileObj.Seek(4, 0) //光标从0号字节开始移动一个字节,注意换行符算两个字节
	var ret [1]byte
	n, err := fileObj.Read(ret[:])
	if err != nil {
		fmt.Println("读取失败")
		return
	}
	fmt.Println(string(ret[:n]))
	fileObj.Seek(1, 0)
	var s []byte
	s = []byte{'c'}
	fileObj.Write(s)//会把原文件相应位置的字符换成c
	//如果在不改变原文件的情况下插入,需要将原文件在插入位置截断,然后将前半部分,插入字符和后半部分到新文件
}

在这里插入图片描述

//bufio获取用户的输入
func useBufio(){
	var s string
	reader:=bufio.NewReader(os.Stdin)
	s,_=reader.ReadString('\n')
	fmt.Printf("你输入的内容是:%s\n",s) //可以在输入中接受空格
}

//输出重定向
func main(){
	fileObj,err:=os.OpenFile("./xx.log",os.O_APPEND|os.O_CREATE|os.O_WRONLY,0644)
	if err!=nil{
	fmt.Printf("open file failed,err:%v",err)
	return
	}
	log.SetOutput(fileObj) //将log输出指定为文件fileObj
	for{
		log.Println("这是一条测试的日志")
		time.Sleep(time.Second*3)
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值