go
华龙在飞翔
为了网络更安全,为了生活更美好
展开
-
Golang for循环
Golang for循环for循环是Golang唯一的循环语句。for循环主要是用在挨个挨个取出数据的情况下。比如老师点名,老师点名的时候不可能一口气说出全班同学的名字,所以只能一个一个的点名,那么这个挨个挨个点名的过程就类似我们的for循环。一般for循环第一种for循环有点类似向其他编程语言的while语句。示例:1.package main2.import (3. “log”4.)5.func main() {6. num := 17. for num <原创 2020-07-24 11:59:55 · 16655 阅读 · 0 评论 -
Golang switch语句
Golang switch语句当有多个条件判断的时候,使用switch语句的效率会比else if更高。Switch语句小知识Go语言的Switch语句与其他编程语言不一样的地方是,不需要使用break来退出case语句。示例:1.package main2.import (3. “log”4. “runtime”5.)6.func main() {7. os := runtime.GOOS //获取操作系统.8. switch os {9. case原创 2020-07-23 09:10:29 · 392 阅读 · 0 评论 -
Golang if语句
Golang if语句if语句主要用做条件判断,比如判断是否成年,成绩是否及格或者优秀等一些场景。if 语句这里我们使用if语句来判断小明是否已经成年。1.package main2.import (3. “log”4.)5.func main() {6. age := 207. if age > 17 {8. log.Println(“小明已经成年”)9. }10.}当前条件如果满足age > 17 的话,则会输出小明已经成年。原创 2020-07-23 09:09:25 · 1068 阅读 · 0 评论 -
Golang 定义常量
Golang 定义常量在所有的编程语言当中常量都代表一个固定的值,一旦常量被定义则无法修改。在Golang中使用const关键字进行常量声明。定义常量Golang定义常规类型的常量可以忽略类型。1.const SUCCESS = true2.const FAIL = false定义多个相同类型的常量1.const (2. CONST1 = 03. CONST2 = 14. CONST3 = 25.)定义特定类型的常量定义特定类型的常量需要根据实际情况来决定。假如原创 2020-07-21 14:02:11 · 1982 阅读 · 0 评论 -
Golang 定义变量
Golang 定义变量Golang的变量可以由字母数字和下划线组成,但是首字符不能为数字。Golang是静态类型语言,变量必须声明类型。定义变量使用 var 关键字。变量小知识在Golang当中如果只是声明了变量,但是并没有使用这个变量的话,会提示一个declared and not used的错误。但是如果定义的全局变量并没有使用的话,是不会提示这个错误的。变量的首字母如果为大写则表示这个变量为公有变量,小写为私有变量。定义变量Golang定义变量有三种写法:第一种:使用 var 关键字给原创 2020-07-21 09:27:16 · 1199 阅读 · 0 评论 -
Golang 编辑器
Golang 编辑器随着Golang被越来越多的公司应用到项目中,开发人员自然而然的就需要一款合适的编辑器来实现代码高亮,自动补全和错误提示等特性。这里我收集了目前几种比较好的Golang编辑器推荐给大家:Vscodevscode(全称 Visual Studio Code)是一个轻量且强大的代码编辑器,支持Windows,OS X和Linux。vscode拥有丰富的插件生态系统,可通过安装插件来支持C++、C#、Go、Python、PHP等多种语言。下载地址:1.https://code.vi原创 2020-07-21 09:26:13 · 1423 阅读 · 0 评论 -
Golang 入门体验
Golang 入门体验本章节咱们先来体验一下使用Golang输出hello world。入门体验首先我们创建一个名为test的文件夹,这个文件夹就作为我们本次学习或者以后存放Go代码的文件夹。紧接着在刚才创建的test文件夹中创建一个名为main.go的文件,然后在main.go中编写以下代码:1.package main2.import “log”3.func main() {4. log.Println(“hello world”)5.}如果你现在还看不太懂上面这段代码,没有关原创 2020-07-21 09:25:28 · 168 阅读 · 0 评论 -
Golang 环境搭建
Golang 环境搭建将Golang安装在电脑中以后,我们还需要对Golang的环境进行一下设置。Golang的依赖包管理一直是一个经常被吐槽的地方,经过多个版本的迭代 Go Modules 现在已经成为Golang的官方包管理方案。我们安装完成以后,首先需要开启 Go Modules 。Go Modules 优点Go Modules 解决了在以往的版本中强制要求设置 GOPATH 的约束,以及需要手动 go get 下载依赖的操作。开启 Go Modules首先打开我们电脑的终端,然后在原创 2020-07-21 09:24:31 · 181 阅读 · 0 评论 -
Golang 安装
Golang 安装想要学习Golang,首先必须得将Golang安装到电脑中。下载Golang安装包Golang官网下载地址:1.https://golang.org/dl/谷歌镜像下载地址:1.https://golang.google.cn/dl/Windows 安装Go语言Windows建议直接从官网地址上下载.msi文件进行安装Mac 安装Go语言Mac 电脑推荐使用mac自带的包管理工具brew进行安装首先打开Mac的终端,在终端中输入以下命令:1.brew install原创 2020-07-21 09:23:12 · 573 阅读 · 0 评论 -
Golang 教程
Golang 教程Go语言(简称go或者golang)是谷歌在2009年发布的一门编程语言。Go语言是一门跨平台的静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。Go语言有什么优势•学习成本低,入门容易•丰富的标准库•性能强悍•编译快•自动垃圾回收•并发与协程•部署简单•…Go语言适合做什么Go语言天生具有并发基因,非常适合高并发的场景。 goroutine 作为语言最核心的功能之一,使用起来也非常简单,通过一个 go 关键字便可以启动一个协程(轻量级的线程)适用场景原创 2020-07-21 09:21:53 · 506 阅读 · 0 评论 -
进程,协程,线程的区别
进程:cpu在切换程序的时候,如果不保存上一个程序的状态(也就是我们常说的context–上下文),直接切换下一个程序,就会丢失上一个程序的一系列状态,于是引入了进程这个概念,用以划分好程序运行时所需要的资源。因此进程就是一个程序运行时候的所需要的基本资源单位(也可以说是程序运行的一个实体)。程序运行的一个实体。线程:cpu切换多个进程的时候,会花费不少的时间,因为切换进程需要切换到内核态,而每次调度需要内核态都需要读取用户态的数据,进程一旦多起来,cpu调度会消耗一大堆资源,因此引入了线程的概念,线原创 2021-03-15 11:33:08 · 195 阅读 · 0 评论 -
接口的定义与实现
1.接口的定义与实现接收者是指针*T时,接口实例必须是指针接收者是值 T时,接口实力可以是指针也可以是值接口的定义和类型转换与接收者的定义是关联的2.package mainimport “fmt”type Humaner interface {//方法,只有声明没有实现,有别的类型(自定义类型)实现sayhi()}type Student struct {name stringid int}//student实现此方法func (tmp *Student)原创 2020-07-20 14:49:30 · 262 阅读 · 0 评论 -
带有接收者的函数就叫做方法
1.方法的介绍:带有接收者的函数就叫做方法。普通函数Func xxx(){}匿名函数func (){}方法(method)的函数func (xxx type) xxx(){}2.封装的思想:无需知道如何工作,开动就可以。3.面向过程和面向对象函数的区别package mainimport “log”//实现两数相加//面向过程func Add01(a,b int) int{return a+b}//面向对象,方法:给某个类型绑定一个函数type long int//t原创 2020-07-20 14:48:16 · 322 阅读 · 0 评论 -
tcp服务器和客户端通信
Tcp服务器package mainimport (“fmt”“net”“strings”)func HandConnect(conn net.Conn ) {//延时关闭调用defer conn.Close()//获取客户端的网络地址addr := conn.RemoteAddr().String()fmt.Println(“addr=”, addr)fmt.Println(“地址连接成功(address connect successful)”)//创建一个循环可以使多用户调原创 2020-07-20 14:47:05 · 146 阅读 · 0 评论 -
tcp客户端和服务端互传
Tcp服务器端package mainimport (“fmt”“net”)func main() {//监听Listener,err:=net.Listen(“tcp”,“127.0.0.1:8888”)if err != nil {fmt.Printf(“err:=%+v\n”,err)return}defer Listener.Close()//阻塞等待用户链conn,err1:=Listener.Accept()if err1 != nil {fmt.Printf原创 2020-07-20 14:45:41 · 224 阅读 · 0 评论 -
字符串操作(strings包常用8种方法)
字符串操作(strings包常用8种方法)主要用到的是strings包下的各种函数操作1.Contains:包含的作用,包含则打印true,否则falsefunc main() {s:=strings.Contains(“helloworld”,“wo”)fmt.Println(s)}2.Join:组合:将不同的字符串内容按照需要的方式进行组合拼接s2:=[]string{“ssss”,“rrrr”,“uuuu”}//必须是切片buf:=strings.Join(s2,“1”)fmt.原创 2020-07-20 14:43:39 · 763 阅读 · 0 评论 -
字符串转换三种用法
字符串转换三种用法字符串的转换主要使用Strconv包下的函数方法:append,format,parse1.Append:append系列的函数将数字等转化为字符串后,添加到现有的数组中以切片的形式存在(必须要注意转化切片为字符串输出)func main() {slice:=make([]byte,0,100)println(slice)//appendint(切片,追加的内容,以多少的进制)//slice=strconv.AppendInt(slice,1000,2)slice=str原创 2020-07-20 14:42:32 · 1074 阅读 · 0 评论 -
多任务资源竞争
多任务资源竞争假设一台打印机供两个人使用设置时间戳打印的顺序则是两个人的字符串交替打印注意:必须有for作为一个主协成,否则无法打印package mainimport (“fmt”“time”)func Printer(str string) {for _,data:=range str{fmt.Printf("%c",data)time.Sleep(time.Second)}fmt.Printf("\n")}func person1() {Printer(“hel原创 2020-07-20 14:41:33 · 113 阅读 · 0 评论 -
Runtime包的使用
Runtime包的使用runtime包提供和go运行时环境的互操作,如控制go程的函数。它也包括用于reflect包的低层次类型信息;参见reflect报的文档获取运行时类型系统的可编程接口。Gosched使当前go程放弃处理器,以让其它go程运行。它不会挂起当前go程,因此当前go程未来会恢复执行。使用gosched让出主协程,子协程先执行package mainimport (“log”“runtime”)func main() {go func() {for i:=0;i<原创 2020-07-20 14:40:40 · 209 阅读 · 0 评论 -
channel管道
channel管道1.在goroutine中运行内存必须做到同步,goroutine奉行通过通信来共享内存,而不是共享内存来通信,引用类型channel是csp模式来实现,用于多个协程来通讯,内部实现同步,确保其并发性。和map类似,chan也需要使用make来创建底层数据库。2.模型:Make(chan type)Make(chan type,capacity)3.注意:Capacity=0,无缓冲阻塞读写Capcity>0,有缓冲,无阻塞读写channel默认的接受和发送数据都是阻塞原创 2020-07-20 14:39:54 · 21681 阅读 · 0 评论 -
并发和并行的区别
并发和并行的区别1.并发:就是两个队列同时使用同一个服务器2.并行:两个队列平行的使用不同的服务器Gorountine协程:和线程(Thread)比起来协程的速度3.协程:分为主协程和子协程,在主协程调用中子协程必须通过函数方法使用go来完成实参。package mainimport (“fmt”“time”)func NewTask() {for {fmt.Println(“this is new goroutine”)time.Sleep(time.Second*1)}原创 2020-07-20 14:38:51 · 287 阅读 · 0 评论 -
go语言视频流媒体服务器设计与实现
链接:https://pan.baidu.com/s/1-ZIrf5J8n40doqkcPaZ9Tw提取码:a8yr复制这段内容后打开百度网盘手机App,操作更方便哦原创 2020-07-20 10:26:30 · 819 阅读 · 0 评论 -
go语言后端面试题
Golang后端面试题1、以下两种写法有什么区别func (param CreateOrderParam) Create() {func (param *CreateOrderParam) Create() {给方法绑定了一个指针类型的结构体指针那个可以直接修改结构体的数据,而非指针的那个不行2.定义一个包内全局字符串变量,下面语法正确的是(A)A. var str stringB. str:= “”C.str=""D. varstr= “”3、协程和线程有什么区别线程:cpu切换多原创 2020-07-18 15:50:57 · 1773 阅读 · 0 评论 -
goland的常用快捷键
//golang的快捷键运用://ctrl+alt+l 用来自动整理//CTRL+b打开这个结构体或者方法文件,跳转到定义处//ctrl+E打开最近浏览的文件//ctrl+N可以快速打开struck结构体//CTRl+shift+E 可以快速查找最近更改的文件//CTRL+shift+N 可以快速打开文件//CTRL+alt+T 可以把代码包在一个块内//ctrl+shift+/ 多行注释//ctrl+/单行注释//CTRL+ “+/—”可以将当前方法展开或折叠//CTRL+空格 代码原创 2020-07-18 11:26:01 · 327 阅读 · 0 评论 -
golang数据库单元测试(包含代码和数据库)
package mainimport (“database/sql”_ “github.com/go-sql-driver/mysql”“testing”)func TestDBConnection(t *testing.T) {//尝试连接数据库dbConn, err := sql.Open(“mysql”,“root:root@tcp(localhost:3306)/video_serve?charset=utf8”)if err != nil {panic(err.Error(原创 2020-07-18 11:23:47 · 792 阅读 · 0 评论 -
Json的使用
Json的使用1.JSON 语法是 JavaScript 语法的子集。JSON 语法是 JavaScript 对象表示法语法的子集。2.编码将一个Go语言中类似movies的结构体slice转为JSON的过程叫编组(marshaling)。编组通过调用json.Marshal | josn.marshalindent(编组带缩进)函数完成:(1)编码解析:在编码中必须用到josn包,内部的marshal函数,首先需要定义一个结构体在结构体进行成员变量主函数下进行进行变量的初始化进行编组函原创 2020-07-13 14:34:24 · 264 阅读 · 0 评论 -
Panic的概念和使用
Panic的概念和使用1.panic在go中,当程序出现异常时,会发生panic。当发生panic后,需要使用recover捕获,如果没有捕获,则程序退出。例如数组越界:造成panicpackage mainimport “log”func tast(x int) {var a [10]inta[x]=1222log.Println(a)}func main(){tast(20)}...原创 2020-07-13 14:31:58 · 2157 阅读 · 0 评论 -
recover的用法
Recover的用法:defer可以读取有名返回值理论:如果不进行recover,便会导致整个程序挂掉,Recover()用法是:将Recover()写在defer中,并且在可能发生panic的地方之前,先调用此defer的东西(让系统方法域结束时,有代码要执行。)当程序遇到panic的时候(当然,也可以正常的调用出现的异常情况),系统将跳过后面的代码,进入defer,如果defer函数中recover(),则返回捕获到的panic的值。总结:使用recover()捕捉panic异常的时候,则需要de原创 2020-07-13 14:30:23 · 2914 阅读 · 0 评论 -
go语言ajax回传
一、后端部分要想使用ajax,先要准备一个func (http.ResponseWriter, *http.Request)类型的函数来处理前端发过来的请求。func OnAjax(res http.ResponseWriter, req *http.Request) { io.WriteString(res, “这是从后台发送的数据”)}接下来,要把一个网址和它对应起来,例如主页下的“/aj原创 2020-07-12 16:07:29 · 588 阅读 · 0 评论