字节跳动《实时音视频通讯技术》之Go服务器端开发入门学习笔记

1,642 阅读3分钟

本文已参与掘金创作者训练营第三期「高产更文」赛道,详情查看:掘力计划|创作者训练营第三期正在进行,「写」出个人影响力

本文收录于我的专栏:《让我们一起Golang》

本篇文章主要介绍Git的基础知识和基本操作,还有Go的发展历程以及与其他语言的区别,另外完成Golang综合实战-websocket客户端登陆。

字节跳动《实时音视频通讯技术》学习笔记之服务器端开发入门

Git基础知识

  • Workspace 工作区,本地目录,平时存放代码的地方
  • Index/Stage 暂存区,用于临时存放你的改动,保存即将提交的文件列表信息。
  • Repository: 仓库区(或版本库),就是安全存放数据的位置。
  • Remote: 远程仓库,托管代码的服务器,项目组中的远程服务器。

image.png

Git工具——简单使用

1. 初始化操作

//只需要执行一次

git config --global user.name "myname"

git config --global user.email "myemail@bytedance.com"

git config -l //查看config信息

2. checkout远程代码

git clone https://xxx

// 将远程master分支checkout成本地feat分支

git checkout origin/master -b feat

3. 修改代码,查看diff

git diff 查看diff,也就是修改后的代码与原始的代码的区别。

git status 查看文件状态

4. 提交到本地仓库

git add filename

git commit -m "init the project"

5. push到远程仓库

//将本地mymaster分支push到远端

git push origin mymaster

6. 查看历史提交

git log xxx // 查看文件提交记录

git log ./ // 查看目录下文件的提交记录

7. 查看分支信息

git branch //查看本地分支信息

git branch -r //查看远端(remote)分枝信息

git branch -D xxx //删除本地branch

git branch -m yyy //branch修改名字

8.本地修改全部回退

git reset --hard

9. 同步远端代码到本地

git fetch

git rebase [branch]

Golang发展历程

image.png

Go名字的来源

image-20210814223914789

发展时间线

image.png

Golang对比其他语言

Go希望成为互联网时代的C语言。多数系统级语言的根本哲学来源于C++,将C++的面向对象进一步发扬光大。但是Go语言的设计者却有不同的看法,他们认为值得学习的是C语言。C语言经久不衰的根源是它足够简单。因此,Go语言也是足够简单。

  • 编译部署简单:不依赖其他库,编译出来就是一个可执行文件。

所以编译起来特别快!!!

  • 统一的编码规范,代码简介,方便阅读。
  • 严格的编译检查,不用的import或者变量引起编译错误。
  • interface不需要显式的声明
  • 内置强大的工具,如gofmt,goprof
  • 自动内存回收
  • 强一致类型
  • 没有异常处理(Error is value)
  • 基于首字母的可访问特性,例如变量首字母是大写,就是全局变量。
  • 支持直接调用C代码

image.png

p.s. Go应该是快出泛型了,博主之前翻译过一篇博客《下一步:Go泛型》就是说明的这个信息。

Golang与C语言的区别

image.png

Golang综合实战-websocket客户端登陆

websocket客户端登陆

websocket协议在2008年诞生,2011年成为国际标准.

它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息.

image-20210815130230109

package main
​
import (
    "fmt"
    gosocketio "github.com/graarh/golang-socketio"
    "github.com/graarh/golang-socketio/transport"
    "time"
)
//结构体定义
type User struct {
    ID string `json:"id"`
    RoomID string `json:"room_id"`
    Name string `json:"name"`
    AvatarURL string `json:"avatarUrl"`
    Type string `json:"type"`
    Address string `json:"address"`
    LoginTime string `json:"login_time"`
}
​
func main() {
    //连接服务器
    c,err := gosocketio.Dial(
        gosocketio.GetUrl("127.0.0.1",3001,false),
        transport.GetDefaultWebsocketTransport())
    if err != nil{
        fmt.Printf("websocket connect error:%v\n",err)
        return
    }
​
    fmt.Println("connect success!")
    //注册response回调
    c.On("success", func(c *gosocketio.Channel,v interface{}) {
        fmt.Println("success:",v)
    })
    //emit信息
    go func() {
        c.Emit("login",User{
            ID : "user",
            RoomID : "roomid",
            Name : "rtcname0",
            AvatarURL: "http://q.qlogo.cn/headimg_dl?dst_uin=5684277&spec=100",
            Type : "user",
        })
​
        if err != nil{
            fmt.Println("emit error:",err)
        }
    }()
​
    time.Sleep(5*time.Second)
    fmt.Println("finished...")
}
​