编码/解码Gif

I will be working on a project connected with GIF images and I tried to do some basic operations on them in Go (such as retrieving frames or creating GIF from a bunch of images). But for now let's do a simple example in which I am only trying to decode a GIF and then to encode it again. I tried to use "image/gif" package, but I am unable to get it to do what I want.
Here is the code :

package main

import (
    "os"
    "image/gif"
)


func main() {
    inputFile , err := os.Open("travolta.gif")
    defer inputFile.Close()
    if err != nil {
        panic(err)
    }

    g, err := gif.DecodeAll(inputFile)
    if err != nil {
        panic(err)
    }

    outputFile, err := os.OpenFile("travolta2.gif", os.O_WRONLY|os.O_CREATE, 0777)
    defer outputFile.Close()
    if err != nil {
        panic(err)
    }

    err = gif.EncodeAll(outputFile, g)
    if err != nil {
        panic(err)
    }
} 

When I run the code it does not panic and another gif is indeed created. Unfortunetely it is corrupted. Moreover the gif's size changes from 3,4MB to 4,4MB. Is it not a way to save/read a gif? What mistake do I make?

EDIT: By corrupted I mean that when I try to open it an error occurs- screnshot here : http://www.filedropper.com/obrazekpociety.

GIF: http://vader.joemonster.org/upload/rwu/1539970c1d48acceLw7m.gif

Go version 1.7.4

The problem is you are passing a File* to DecodeAll rather than something that supports the io.Reader interface.

I have adapted your code so that it creates a bufio.Reader from the file and then hands that to DecodeAll as below:

import (
    "bufio"
    "os"
    "image/gif"
)
func main() {
    inputFile , err := os.Open("travolta.gif")
    defer inputFile.Close()
    if err != nil {
        panic(err)
    }

    r := bufio.NewReader(inputFile)

    g, err := gif.DecodeAll(r)
    if err != nil {
        panic(err)
    }

    // ... remaining code
}