go语言无法在文件内容之中插入内容因此因此要借助临时文件。
fileObj.Read是不会读取相同的内容的,只会按顺序读取。

代码:
func f3(){
	//打开要操作的文件
	fileObj,err := os.OpenFile("./sb.txt", os.O_RDWR,0644)
	if err != nil {
		fmt.Printf("open file failed,err:%v",err)
		return
	}
	//defer fileObj.Close() //将文件关闭  
	// 因为没有办法在文件中间插入内容,需要创建临时文件
	tmpFile, err := os.OpenFile("./sb.tmp",os.O_CREATE|os.O_APPEND|os.O_WRONLY,0644)
	if err != nil {
		fmt.Println("creat file failed: ", err)
		return
	}
	//读取原文件写入临时文件
	var ret [1]byte
	n,err := fileObj.Read(ret[:])
	if err != nil {
	 	fmt.Printf("read file failed,err:%v",err)
	 	return
	}
	// 写入临时文件
	fmt.Println(n)
	fmt.Println(string(ret[:]))
	fmt.Println("1",string(ret[:n]))
	tmpFile.Write(ret[:n])
	// 再写入要插入的内容
	var s []byte 
	s = []byte{'c'}
	tmpFile.Write(s)
	//紧接着把源文件后续内容写入临时文件
	var x [1024]byte
//	for{
		h,err := fileObj.Read(x[:])
		fmt.Println("22222",string(x[:]))
		fmt.Println("333",h)
		fmt.Println("444",string(x[:h]))
		if err == io.EOF {
			fmt.Println("end pf file",x[:h])
			tmpFile.Write(x[:h])
			return
			//break
		}
		if err != nil {
			fmt.Printf("read from file failed: %v",err)
			return
		}
		fmt.Println("写入文件中:",string(x[:h]))
		tmpFile.Write(x[:h])
//	}
	//源文件后续写入临时文件中
	fileObj.Close()
	tmpFile.Close()
	os.Rename("./sb.tmp","./sb.txt")

}
证实fileObj.Read按顺序不重复读取代码:
func f4(){
	fileObj,err := os.OpenFile("./sb.txt", os.O_RDWR,0644)
	if err != nil {
		fmt.Printf("open file failed,err:%v",err)
		return
	}
	var ret [1]byte
	n,err := fileObj.Read(ret[:])
	if err != nil {
	 	fmt.Printf("read file failed,err:%v",err)
	 	return
	}
	fmt.Println("1",n)
	fmt.Println("2",string(ret[:]))
	var x [8]byte
	h,err := fileObj.Read(x[:])
	if err != nil {
		fmt.Printf("read file failed,err:%v",err)
		return
	}
	fmt.Println("3",h)
	fmt.Println("4",string(x[:]))

	var xz [1]byte
	z,err := fileObj.Read(xz[:])
	if err != nil {
		fmt.Printf("read file failed,err:%v",err)
		return
	}
	fmt.Println("5",z)
	fmt.Println("6",string(xz[:]))

	fileObj.Close()
}