golang基础

1.slice

b := make([]int, 0, 5) //创建一个slice,长度为0,容量为5

b := []int{1,2,3,4,5}

 

b = b[:cap(b)] //b的长度为5,容量为5

b = b[1:] //b的长度为4,容量为4

cap()函数返回的是数组切片分配的空间大小

扩容与不扩容的区别:https://blog.csdn.net/cyk2396/article/details/78893420

2.range

range是一个内置函数。可以遍历数组切片slice字典map

当遍历数组和切片的时候,返回的是索引和元素。

如果你不需要 range 返回的某个值,比如 index,你可以把它写成 _ ,这个就可以忽略这个返回值了。

package main

import (
    "fmt"
)

func main() {
    //range遍历切片的所有元素,并求和
    fibo := []int{2,3,5,8,13,34,55}
    sum := 0
    for _, num := range fibo {
        sum += num
        fmt.Println(num, sum)
    }
    fmt.Println("sum:", sum)

    //range遍历字符串,返回字符索引和Unicode编码。
    for i, c := range "go"{
        fmt.Printf("%d, %c\n", i, c)
    }

    //range遍历字典,返回键值对。
    kvs := map[string]string{"a":"apple", "b":"banana", "c":"cofox"}
    for k, v := range kvs {
        fmt.Printf("%s -> %v\n", k, v)
    }
}

3.map

判断方式为value,ok := map[key], ok为true则存在
package main

import "fmt"

func main() {

	demo := map[string]string{
		"a": "fefef",
	}

	//错误,a存在,但是返回false
	fmt.Println(demo["a"])

	//正确判断方法
	_, ok := demo["b"]
	fmt.Println(ok)
}

  

4.变量

  1)= 与:=的区别

  = 是赋值, := 是声明变量并赋值。

5.指针

在一些多个点共同对一个点享有修改权的场景中,指针类型很有用。

 

6.Error判断

error 为 nil 时表示成功,error 为非 nil 时,表示有错误

package main

import (
    "fmt"
    "time"
)

type MyError struct {
    When time.Time
    What string
}

func (e *MyError) Error() string {
    return fmt.Sprintf("at %v --> %s", e.When, e.What)
}

func run() error {
    return &MyError{
        time.Now(),
        "it didn't work",
    }
}

func main() {
    if err := run(); err != nil {
        fmt.Println(err)
    }
}

6.IO

  https://www.jianshu.com/p/dad73b68e7eb

7.Reader数据流

package main

import (
	"io"
	"os"
	"strings"
	"errors"
	"fmt"
)

type rot13Reader struct {
	r io.Reader
}

func (rot *rot13Reader) Read(buf []byte) (n int, err error)  {
	rot13 := map[byte]byte{
		'A':'N',
		'B':'O',
		'C':'P',
		'D':'Q',
		'E':'R',
		'F':'S',
		'G':'T',
		'H':'U',
		'I':'V',
		'J':'W',
		'K':'X',
		'L':'Y',
		'M':'Z',
		'N':'A',
		'O':'B',
		'P':'C',
		'Q':'D',
		'R':'E',
		'S':'F',
		'T':'G',
		'U':'H',
		'V':'I',
		'W':'J',
		'X':'K',
		'Y':'L',
		'Z':'M',
		'a':'n',
		'b':'o',
		'c':'p',
		'd':'q',
		'e':'r',
		'f':'s',
		'g':'t',
		'h':'u',
		'i':'v',
		'j':'w',
		'k':'x',
		'l':'y',
		'm':'z',
		'n':'a',
		'o':'b',
		'p':'c',
		'q':'d',
		'r':'e',
		's':'f',
		't':'g',
		'u':'h',
		'v':'i',
		'w':'j',
		'x':'k',
		'y':'l',
		'z':'m',
		'0':'9',
		'1':'8',
		'2':'7',
		'3':'6',
		'4':'5',
		'5':'4',
		'6':'3',
		'7':'2',
		'8':'1',
		'9':'0',
		' ':' ',
		'~':'~',
		'!':'!',
		'@':'@',
		'#':'#',
		'$':'$',
		'%':'%',
		'^':'^',
		'&':'&',
		'*':'*',
		'(':'(',
		')':')',
		'_':'_',
		'+':'+',
		'`':'`',
		'-':'-',
		'=':'=',
		'?':'?',
		',':',',
		'.':'.',
	}
	l, err := rot.r.Read(buf)
	if err != nil{
		return 0, errors.New("Read something wrong")
	}

	for i, v := range buf{
		if v == byte(0){
			return i, nil
		}
		buf[i] = rot13[v]
	}

	return l, nil
}

func main() {
	s := strings.NewReader("Lbh penpxrq gur pbqr? Lrf,Zl rznvy vf whaobwvna@dd.pbz")
	s1 := strings.NewReader("You cracked the code? Yes,My email is junbojian@qq.com")
	r := rot13Reader {s}
	r1 := rot13Reader{s1}
	var c string
	c = "ffee"
	fmt.Println(c)
	io.Copy(c, &r)
	fmt.Println("")
	io.Copy(os.Stdout, &r1)
}

8.web

package main

import (
	"fmt"
	"net/http"
	"log"
)

type dollars float32

func (d dollars) String() string { return fmt.Sprintf("$%.2f", d) }

type MyHandler map[string]dollars

func (self MyHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
	switch req.URL.Path {
	case "/list":
		for item, price := range self {
			fmt.Fprintf(w, "%s: %s\n", item, price)
		}
	case "/price":

		item := req.URL.Query().Get("item")  //传参数

		//item := req.Form.Get("item")
		price, ok := self[item]
		fmt.Println(ok)

		if !ok {
			w.WriteHeader(http.StatusNotFound) // 404
			fmt.Fprintf(w, "no such item: %q\n", item)
			return
		}
		fmt.Fprintf(w, "%s\n", price)
	default:
		w.WriteHeader(http.StatusNotFound) // 404      
		fmt.Fprintf(w, "no such page: %s\n", req.URL)
		fmt.Fprintf(w, "no such page: %s%s", req.Host,req.URL)
	}
}

func main() {
	handler := MyHandler{"shoes": 50, "socks": 5}
	log.Fatal(http.ListenAndServe(":7000", handler))
}

  #  w.WriteHeader(http.StatusNotFound)   // http response code 

9.channel

 close作用:

  

package main

import "fmt"

func fibonacci(n int, ch chan int)  {
	x, y := 0, 1
	for i := 0; i < n; i++{
		ch <- x
		x, y = y, x + y
	}
	close(ch)
}

func main() {
	ch := make(chan int, 10)
	go fibonacci(cap(ch), ch)
	for i := range ch{
		fmt.Println(i)
	}
}

  

 

 

   

posted @ 2018-10-29 19:17  DevOps_QXW  阅读(159)  评论(0)    收藏  举报