golang 入门

dream · · 5374 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

缘起

之前下载视频用的you-get,但是b站一直下不了,优酷也经常出问题,所以接触到lulu https://github.com/iawia002/Lulu 这个也是基于you-get 直接 pip install lulu,但是作者不维护了,新出了个 https://github.com/iawia002/a... 这个不是python 开发的 ,而是 go ,通过 go get github.com/iawia002/annie 来安装 ,比如之前用lulu下载电影优酷的《大话西游》,这里推荐下优酷的2个播主,上传了几百个经典香港电影 :
经典香港电影
东方不败影院

$ lulu -i https://v.youku.com/v_show/id_XMzY4OTMxMTYyMA==.html?
It seems that your ffmpeg is a nightly build.
Please switch to the latest stable if merging failed.
site:                优酷 (Youku)
title:               大话西游之大圣娶亲【周星驰】【1080p】【国语中字】
streams:             # Available quality and codecs
    [ DEFAULT ] _________________________________
    - format:        mp4hd3v2
      container:     mp4
      video-profile: 1080P
      size:          1777.4 MiB (1863787718 bytes)
      m3u8_url:      http://pl-ali.youku.com/playlist/m3u8?vid=XMzY4OTMxMTYyMA&type=mp4hd3v3&ups_client_netip=756495b7&utid=31o%2FFP58k0kCAXVklbeqyp8h&ccode=0502&psid=f9aac3a8a0c035a6baa3a745a49c2487&duration=5983&expire=18000&drm_type=1&drm_device=7&ups_ts=1538813154&onOff=0&encr=0&ups_key=5310a4e7d0e7795209d27a8b117c8a04
    # download-with: lulu --format=mp4hd3v2 [URL]

    - format:        mp4hd2v2
      container:     mp4
      video-profile: 超清
      size:          906.9 MiB (950999892 bytes)
      m3u8_url:      http://pl-ali.youku.com/playlist/m3u8?vid=XMzY4OTMxMTYyMA&type=mp4hd2v3&ups_client_netip=756495b7&utid=31o%2FFP58k0kCAXVklbeqyp8h&ccode=0502&psid=f9aac3a8a0c035a6baa3a745a49c2487&duration=5983&expire=18000&drm_type=1&drm_device=7&ups_ts=1538813154&onOff=0&encr=0&ups_key=5310a4e7d0e7795209d27a8b117c8a04
    # download-with: lulu --format=mp4hd2v2 [URL]

    - format:        mp4hd
      container:     mp4
      video-profile: 高清
      size:          560.3 MiB (587487098 bytes)
      m3u8_url:      http://pl-ali.youku.com/playlist/m3u8?vid=XMzY4OTMxMTYyMA&type=mp4hdv3&ups_client_netip=756495b7&utid=31o%2FFP58k0kCAXVklbeqyp8h&ccode=0502&psid=f9aac3a8a0c035a6baa3a745a49c2487&duration=5983&expire=18000&drm_type=1&drm_device=7&ups_ts=1538813154&onOff=0&encr=0&ups_key=5310a4e7d0e7795209d27a8b117c8a04
    # download-with: lulu --format=mp4hd [URL]

    - format:        3gphd
      container:     mp4
      video-profile: 渣清
      size:          184.1 MiB (193030164 bytes)
      m3u8_url:      http://pl-ali.youku.com/playlist/m3u8?vid=XMzY4OTMxMTYyMA&type=3gphdv3&ups_client_netip=756495b7&utid=31o%2FFP58k0kCAXVklbeqyp8h&ccode=0502&psid=f9aac3a8a0c035a6baa3a745a49c2487&duration=5984&expire=18000&drm_type=1&drm_device=7&ups_ts=1538813154&onOff=0&encr=0&ups_key=e8361d25bb6ea3bb70a8a81a94ed5b50
    # download-with: lulu --format=3gphd [URL]

    - format:        mp4sd
      container:     mp4
      video-profile: 标清
      size:          279.0 MiB (292555710 bytes)
      m3u8_url:      http://pl-ali.youku.com/playlist/m3u8?vid=XMzY4OTMxMTYyMA&type=flvhdv3&ups_client_netip=756495b7&utid=31o%2FFP58k0kCAXVklbeqyp8h&ccode=0502&psid=f9aac3a8a0c035a6baa3a745a49c2487&duration=5984&expire=18000&drm_type=1&drm_device=7&ups_ts=1538813154&onOff=0&encr=0&ups_key=e8361d25bb6ea3bb70a8a81a94ed5b50
    # download-with: lulu --format=mp4sd [URL]

开始下载mp4hd 格式,大小560M

$ lulu --format=mp4hd https://v.youku.com/v_show/id_XMzY4OTMxMTYyMA==.html?
It seems that your ffmpeg is a nightly build.
Please switch to the latest stable if merging failed.
site:                优酷 (Youku)
title:               大话西游之大圣娶亲【周星驰】【1080p】【国语中字】
stream:
    - format:        mp4hd
      container:     mp4
      video-profile: 高清
      size:          560.3 MiB (587487098 bytes)
      m3u8_url:      http://pl-ali.youku.com/playlist/m3u8?vid=XMzY4OTMxMTYyMA&type=mp4hdv3&ups_client_netip=756495b7&utid=OVs%2FFCNJrjgCAXVklbfwfTTy&ccode=0502&psid=d311f534cb94393bef9139f8653f6a20&duration=5983&expire=18000&drm_type=1&drm_device=7&ups_ts=1538813244&onOff=0&encr=0&ups_key=328b76a03e2f827a1465b0428813b011
    # download-with: lulu --format=mp4hd [URL]

Downloading 大话西游之大圣娶亲【周星驰】【1080p】【国语中字】.mp4 ...
 0.2% (  1.4/560.3MB) ├──────────────────────────────────────┤[ 1/16]    0  B/sl 100% (560.3/560.3MB) ├██████████████████████████████████████┤[16/16]  372 kB/s
Merging video parts...

其实就是用ffmpeg下载m3u8文件,但是也经常出问题
$ lulu -i https://v.youku.com/v_show/id_XMzY4OTMxMTYyMA==.html
lulu: ▒ͻ▒▒▒▒▒Ȩ▒▒▒▒,201
It seems that your ffmpeg is a nightly build.
Please switch to the latest stable if merging failed.

然后用annie 看看 ,注意先把bin 加入环境变量

λ  annie  -i  https://v.youku.com/v_show/id_XMzY4OTMxMTYyMA==.html

 Site:      优酷 youku.com
 Title:     大话西游之大圣娶亲【周星驰】【1080p】【国语中字】
 Type:      video
 Streams:   # All available quality
     [mp4hd3]  -------------------
     Quality:         mp4hd3 1920x1080
     Size:            1777.45 MiB (1863787718 Bytes)
     # download with: annie -f mp4hd3 ...

     [mp4hd2]  -------------------
     Quality:         mp4hd2 1280x720
     Size:            906.94 MiB (950999892 Bytes)
     # download with: annie -f mp4hd2 ...

     [mp4hd]  -------------------
     Quality:         mp4hd 960x540
     Size:            560.27 MiB (587487098 Bytes)
     # download with: annie -f mp4hd ...

     [flvhd]  -------------------
     Quality:         flvhd 640x360
     Size:            279.00 MiB (292555710 Bytes)
     # download with: annie -f flvhd ...

     [3gphd]  -------------------
     Quality:         3gphd 480x270
     Size:            184.09 MiB (193030164 Bytes)
     # download with: annie -f 3gphd ...

go生成的可执行文件就一个annie.exe,没有其他依赖,只要把这个文件下载就能用,太方便了,于是开始学习下 golang

然后熟悉语法,说到这个,简直奇葩,跟PHP py完全不是一个套路,一个单引号 双引号混了就失败,先定义package ,如果不是需要执行的编译文件,不能为main ,比如learn/study/test.php package study
run.go import learn/study import导入的是目录 ,导入的包如果不用还不行,定义变量需要指定类型 ,比如var a int =3 const b string = "abc" type long float64
var c byte='a'
这里要说下字符和字符串类型 ,字符是单个字符,用单引号,字符串是多个字符组成,用双引号,不能混用, 这的奇葩语法。

main 函数是main包才定义的,而且不能手动调用,在init后执行,相当PHP的构造函数 ,但是没有参数和返回值,一个简单的demo

package main
import fm "fmt"
var d =1
const ( // 常量组
    a, b = 10, 100
    c bool = false
)
func main() {
  power := getPower()//函数内才能不用var声明变量
  name:="test"//下面没有用到还会失败!!!,但是全局变量a不会
  fm.Printf(" power is over %d\n",power)
}

func getPower() int {
  return 9001
}

go run test.go
程序正常退出的代码为 0 即 Program exited with code 0;如果程序因为异常而被终止,则会返回非零值,如:1。这个数值可以用来测试是否成功执行一个程序。

一些常用的命令

go build 编译并安装自身包和依赖包,比如window生成EXE文件
go install 安装自身包和依赖包,安装到pkg目录
gofmt –w program.go 会格式化该源文件的代码然后将格式化后的代码覆盖原始内容, 有了这个不用担心PHP一样的带风格混乱
go doc package 获取包的文档注释

当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public);标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的 private )。

go居然这样实现面向对象!!!!
break 只是退出当前的循环体,而 return 语句提前对函数进行返回,不会执行后续的代码。
package表示源码所属的代码包 * 要生成GO语言可执行程序,必须要有main的package包,且必须在该包下有main()函数
同一路径下只能存在一个package**,一个package可以拆分成多个源文件组成
操作符 "&" 取变量地址,"*" 透过指针访问目标对象,关键字 defer 用于注册延迟调用。这些调用直到 return 前才被执行,还有数组,slice 没来得及学,真的有点难,下次再说了。

实践

Go语言生成二维码是如此简单
go get github.com/skip2/go-qrcode 下载源码

vi qrcode.go
package main
import "github.com/skip2/go-qrcode"

func main() {
    qrcode.WriteFile("http://www.flysnow.org/",qrcode.Medium,256,"./blog_qrcode.png")
}

go run qrcode.go

推荐教程

文章:
Go语言实战笔记 https://zhuanlan.zhihu.com/go...
命令行 https://github.com/sbinet/igo
golang 面试题 https://zhuanlan.zhihu.com/p/... https://yushuangqi.com/blog/2...
记录学习过程 https://zhuanlan.zhihu.com/c_...
https://github.com/chai2010/a...
https://github.com/avelino/aw...
https://github.com/golang-chi...
https://github.com/Unknwon/go...
Golang 中文学习资料 https://go.wuhaolin.cn/
https://juejin.im/entry/58bfa...
https://www.v2ex.com/t/476425...
https://golangcaff.com/
Golang做了一个命令行贪吃蛇游戏 https://zhuanlan.zhihu.com/p/...
Golang 学习笔记一 https://zhuanlan.zhihu.com/p/...
Golang学习 https://zhuanlan.zhihu.com/p/...
《Go 学习笔记》 https://hacpai.com/article/14...
在线ide https://wide.b3log.org/login https://wide.b3log.org/playgr...
Go 标准库中文文档http://cngolib.com/
Golang 速查表 https://wuyin.io/2018/06/11/g...
https://www.imooc.com/code/8247
https://golangcaff.com/docs/t...
有哪有优秀的golang库? https://www.zhihu.com/questio...
官网:https://awesome-go.com/
官网:https://golanglibs.com/ https://gocn.vip/
用 Golang 来编写 cli 程序吧 https://zhuanlan.zhihu.com/p/...
golang新手容易犯的三个错误 https://zhuanlan.zhihu.com/p/...
为什么用golang作为游戏服务端的开发语言,它的并发性如何?golang有什么优点? https://www.zhihu.com/questio...
我们说Golang牛逼都在说些什么? https://zhuanlan.zhihu.com/p/...
怎么学习 Golang? https://www.zhihu.com/questio...
如何从 PHP 过渡到 Golang? https://www.zhihu.com/questio...
golang 面试题 https://zhuanlan.zhihu.com/p/...
如果你是一个Golang面试官,你会问哪些问题? https://www.zhihu.com/questio...
golang面试笔试题(第二版) https://zhuanlan.zhihu.com/p/...
总结的一些语法和 Go 特点 https://github.com/a8m/go-lan...
Golang 介绍及踩坑系列之三 https://zhuanlan.zhihu.com/p/...
为互联网IT人打造的中文版awesome-go https://github.com/hackstoic/...
转golang开发,需满足哪些技能 https://www.zhihu.com/questio...
你见过哪些令你瞠目结舌的Golang代码技巧? https://www.zhihu.com/questio...
我的golang学习笔记 https://zhuanlan.zhihu.com/p/...
Golang 爬虫上手指南 https://zhuanlan.zhihu.com/p/...
GoLang基础语法 https://zhuanlan.zhihu.com/p/...
Golang 读写 Excel https://zhuanlan.zhihu.com/p/...

视频教程:

https://study.163.com/course/...
https://www.bilibili.com/vide...
http://edu.51cto.com/center/c...
https://www.bilibili.com/vide...
20个小时快速入门go语言 https://www.bilibili.com/vide...
go语言与区块链教程轻松搞定Golanghttps://www.bilibili.com/vide...
Go 语言教程 【Go 编程基础】 https://www.bilibili.com/vide...
Go 语言基础实战 https://www.bilibili.com/vide...
GO实现千万级WebSocket消息推送服务https://www.imooc.com/learn/1025
20小时快速入门Go语言 https://study.163.com/course/...
https://www.imooc.com/video/1...

最后,学习之路,路漫漫其修远兮。


有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:dream

查看原文:golang 入门

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

5374 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传