go程序设计语言 第一章

练习1.5,1.6

package main

import (
	"image"
	"image/gif"
	"image/color"
	"io"
	"math"
	"math/rand"
	"os"
)

var palette = []color.Color{color.White,color.Black,color.RGBA{0xff,0,0,0xff},color.RGBA{0,0xff,0,0xff},color.RGBA{0,0,0xff,0xff}}

const(
	whiteIndex = 0
	blackIndex = 1
	redIndex = 2
	greenIndex = 3
	blueIndex = 4
)

func main(){
	//rand.Seed(time.Now().UTC().UnixNano())
	//if len(os.Args) > 1 && os.Args[1] == "web" {
	//	handler := func(w http.ResponseWriter, r *http.Request){
	//		lissajous(w);
	//	}
	//	http.HandleFunc("/",handler)
	//	log.Fatal(http.ListenAndServe("localhost:8000",nil))
	//	return
	//}
	lissajous(os.Stdout)
}
func lissajous(out io.Writer){
	const(
		cycles = 5
		res    = 0.001
		size = 100
		nframes = 64
		delay = 8
	)
	freq := rand.Float64() * 3.0
	anim := gif.GIF{LoopCount: nframes}
	phase := 0.0
	for i := 0; i < nframes; i++{
		rect := image.Rect(0,0,2*size+1,2*size+1)
		img := image.NewPaletted(rect,palette)
		for t:= 0.0 ; t < cycles*2*math.Pi; t+=res{
			x:=math.Sin(t)
			y := math.Sin(t*freq+phase)
			index := uint8(i % 5);
			img.SetColorIndex(size+int(x*size+0.5),size+int(y*size+0.5),index)
		}
		phase += 0.1
		anim.Delay = append(anim.Delay,delay)
		anim.Image = append(anim.Image,img)
	}
	gif.EncodeAll(out,&anim)
}

 

1.7

1.8

1.9

package main

import(
	"fmt"
	"net/http"
	"os"
	"strings"
)

func main(){
	for _, url := range os.Args[1:]{
		err := strings.HasPrefix(url, "http://")
		fmt.Printf("%t \n",err)
		if err == false {
			fmt.Printf("input addr not have http://\n")
			url = "http://" + url
		}
		resp,err_get :=  http.Get(url)
		if err_get != nil {
			fmt.Fprintf(os.Stderr, "fetch: %v \n", err_get)
			os.Exit(1)
		}
		//b, err:= ioutil.ReadAll(resp.Body)
		//resp.Body.Close()
		//_, err_get = io.Copy(os.Stdout,resp.Body)
		//resp.Body.Close()
		fmt.Printf("status %d \n", resp.Status)
		fmt.Printf("proto %d \n", resp.Proto)
		if err_get != nil{
			fmt.Fprintf(os.Stderr, "fetch: read err %v \n",err_get)
			os.Exit(1)
		}
	}
}

 

你可能感兴趣的:(go)