go语言学习笔记

学习目标:

例如:这一周都在学Go语言,写这个博客记录自己平时学到的重要内容。

学习内容:

1、面向对象编程方法
go 中没有类,但是可以使用结构体、指针和闭包特性实现面向对象编程。
例如:

package main

import "fmt"

type Test struct {
	z float32
}

func NewTest(z float32) *Test {
	return &Test{z:z}
}

func (t *Test) SetZ(z float32)  {
	t.z = z
}

func (t *Test) GetZ() float32 {
	return t.z
}

// 定义结构体,结构体变量就相当于类变量
type TestClass struct {
	x int   // 封装,变量首字母小写,只能使用 SetX 或者 GetX 访问;如果首字母大写则可以外部访问
	y string
	*Test	// 继承
}

// 实现构造函数
func NewTestClass(x int, y string, z float32) *TestClass {
	return &TestClass{
		x:    x,
		y:    y,
		Test: NewTest(z),
	}
}

// 闭包实现成员方法
func (t *TestClass) SetX(x int) {
	t.x = x
}

func (t *TestClass) GetX() int  {
	return t.x
}

func (t *TestClass) SetY(y string) {
	t.y = y
}

func (t *TestClass) GetY() string  {
	return t.y
}

func main(){
	testClass := NewTestClass(0, "first", 0.0)

	fmt.Println(testClass.GetX())
	fmt.Println(testClass.GetY())
	fmt.Println(testClass.GetZ())

	testClass.SetX(1)
	testClass.SetY("go")
	testClass.SetZ(1.2)

	fmt.Println(testClass.GetX())
	fmt.Println(testClass.GetY())
	fmt.Println(testClass.GetZ())
}

运行结果:
下载Goland费时,先在命令行cmd里自学。
在这里插入图片描述


2、go爬取豆瓣电影信息
爬取豆瓣电影是练习爬虫很好的入门方法,因为它是一个静态网页,并且没有过多的反爬虫机制。我简单爬取了电影名字和评分。

package main

import (
    "encoding/csv"
    "fmt"
    "github.com/gocolly/colly"
    "os"
    "sort"
    "strconv"
)

type Film struct {
    title string
    score float64
}

// 封装结构体进行排序
type Wrapper struct {
    films []Film
    by    func(a, b *Film) bool
}

func main() {

    //创建收集器
    c := colly.NewCollector()
    films := make([]Film, 0, 50)

    //获取分页的url
    c.OnHTML("a[href]", func(e *colly.HTMLElement) {
        link := e.Attr("href")
        if e.Text == "后页>" {
            c.Visit(e.Request.AbsoluteURL(link))
        }
    })

    //获取每页的电影信息
    c.OnHTML("div[class=info]", func(e *colly.HTMLElement) {
        t := e.ChildText(".title:nth-child(1)")
        s, _ := strconv.ParseFloat(e.ChildText(".rating_num"), 64)
        films = append(films, Film{
            title: t,
            score: s,
        })
    })

    c.OnRequest(func(r *colly.Request) {
        fmt.Println("Visiting", r.URL.String())
    })

    //开始访问豆瓣
    c.Visit("https://movie.douban.com/top250")

    //将获取的数据按评分排序
    sort.Sort(Wrapper{films, func(a, b *Film) bool {
        return a.score > b.score
    }})

    f, _ := os.Create("films.csv")
    defer f.Close()

    //防止中文乱码
    f.WriteString("\xEF\xBB\xBF")

    writer := csv.NewWriter(f)
    defer writer.Flush()

    //将爬取信息写入csv文件
    writer.Write([]string{"Title", "score"})
    for _, v := range films {
        writer.Write([]string{v.title, strconv.FormatFloat(v.score, 'f', -1, 64)})
    }

}

//重写排序所需的方法
func (pw Wrapper) Len() int { // 重写 Len() 方法
    return len(pw.films)
}
func (pw Wrapper) Swap(i, j int) { // 重写 Swap() 方法
    pw.films[i], pw.films[j] = pw.films[j], pw.films[i]
}
func (pw Wrapper) Less(i, j int) bool { // 重写 Less() 方法
    return pw.by(&pw.films[i], &pw.films[j])
}

提取信息到csv文件
在这里插入图片描述


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值