golang学习笔记

变量

var a int // 如果没有赋值,默认为0
var a int = 1 // 声明时赋值
var a = 1 // 声明时赋值
a := 1
msg := "Hello World!"

if

age := 18
if age < 18 {
	fmt.Printf("Kid")
} else {
	fmt.Printf("Adult")
}

// 可以简写为:
if age := 18; age < 18 {
	fmt.Printf("Kid")
} else {
	fmt.Printf("Adult")
}

for

sum := 0
for i := 0; i < 10; i++ {
	if sum > 50 {
		break
	}
	sum += i
}

range遍历

nums := []int{10, 20, 30, 40}
for i, num := range nums {
	fmt.Println(i, num)
}
// 0 10
// 1 20
// 2 30
// 3 40
m2 := map[string]string{
	"Sam":   "Male",
	"Alice": "Female",
}

for key, value := range m2 {
	fmt.Println(key, value)
}

处理url

package main

import (
	"fmt"
	"io/ioutil"
	"net/http"
	"os"
)

func main() {
	for _, url := range os.Args[1:] {
		resp, err := http.Get(url)
		if err != nil {
			fmt.Fprintf(os.Stderr, "fetch: %v\n", err)
		}
		b, err := ioutil.ReadAll(resp.Body)
		resp.Body.Close()
		if err != nil {
			fmt.Fprintf(os.Stderr, "fetch: reading %s: %v\n", url, err)
			os.Exit(1)
		}
		fmt.Printf("%s", b)
	}
}

一个简单的web

package main

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

func main() {

	http.HandleFunc("/", handler)
	log.Fatal(http.ListenAndServe("localhost:8080", nil))
}

func handler(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "URL.Path = %q\n", r.URL.Path)
}

go语言http包HandleFunc与Handle的使用

package main

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

func testRouter(w http.ResponseWriter, r *http.Request) {
	fmt.Println(r.Header)
	fmt.Println("URL:", r.URL)
	fmt.Println("正在访问接口...")
}

type MyHttpServer struct {
	content string
}

//实现Handler接口
func (s MyHttpServer) ServeHTTP(w http.ResponseWriter, req *http.Request) {
	fmt.Println("正在访问...", s.content, "Header:", req.Header)
	w.Write([]byte("write..."))
}

func main() {
	//设置访问路由
	http.HandleFunc("/test", testRouter)
	var s = MyHttpServer{content: "content"}
	//设置访问路由
	http.Handle("/t", s)
	//创建监听端口
	err := http.ListenAndServe("127.0.0.1:9090", nil)
	if err != nil {
		log.Fatal("ListenAndServe:	", err)
	}
}

flag包

package main

import (
	"flag"
	"fmt"
	"strings"
)

var n = flag.Bool("n", false, "i dont know")
var sep = flag.String("s", " ", "ssss")

func main() {
	flag.Parse()
	fmt.Print(strings.Join(flag.Args(), *sep))
	if !*n {
		fmt.Println("hey")
		fmt.Println()
	}
}

数组

package main

import (
	"fmt"
)

func main() {
	var a [3]int
	fmt.Println(a)
	fmt.Printf("%T", a)

	type Currency int
	const (
		USD Currency = iota
		EUR
		GBP
		RMB
	)
	symbol := [...]string{USD: "$", EUR: "#", GBP: ")", RMB: "yuan"}
	fmt.Println(RMB, symbol[RMB])
	r := [...]int{99: -1}
	fmt.Println(r)
}

slice
关于slice
区别数组和slice

package main

import "fmt"

func main() {
	//数组
	words := [4]int{1, 2, 3, 4}
	fmt.Println(words)
	//slice
	var s []int
	s = append(s, 1)
	fmt.Println(s)
}

interface 接口

package main

import "fmt"

type USB interface {
	read()
	write()
}

type Computer struct {
}

type Mobile struct {
}

func (c Computer) read() {
	fmt.Println("computer is read......")
}

func (c Computer) write() {
	fmt.Println("computer is write......")
}

func (c Mobile) read() {
	fmt.Println("mobile is read......")
}

func (c Mobile) write() {
	fmt.Println("mobile is write......")
}
func main() {
	c := Computer{}
	m := Mobile{}
	c.read()
	c.write()
	m.read()
	m.write()
}


//https://zhuanlan.zhihu.com/p/441952415

sync.WaitGroup并发

package main

import (
	"fmt"
	"sync"
	"time"
)

var wg sync.WaitGroup

func download(url string) {
	fmt.Println("start to download", url)
	time.Sleep(time.Second) // 模拟耗时操作
	wg.Done()
}

func main() {
	for i := 0; i < 3; i++ {
		wg.Add(1)
		go download("a.com/" + string(i+'0'))
	}
	wg.Wait()
	fmt.Println("Done!")
}

channel并发

package main

import (
	"fmt"
	"time"
)

var ch = make(chan string, 10) // 创建大小为 10 的缓冲信道

func download(url string) {
	fmt.Println("start to download", url)
	time.Sleep(time.Second)
	ch <- url // 将 url 发送给信道
}

func main() {
	start := time.Now()
	for i := 0; i < 3; i++ {
		go download("a.com/" + string(i+'0'))
	}
	for i := 0; i < 3; i++ {
		msg := <-ch // 等待信道返回消息。
		fmt.Println("finish", msg)
	}
	endTime := time.Since(start)
	fmt.Println("Done!", endTime)
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值