-
go语言sync包的学习(Mutex、WaitGroup、Cond)
所属栏目:[大数据] 日期:2020-12-16 热度:186
package main;import ("fmt""sync""runtime""time")//加锁,注意锁要以指针的形式传进来,不然只是拷贝func total1(num *int,mu *sync.Mutex,ch chan bool) {mu.Lock();for i := 0; i 1000; i++ {*num += i;}ch - true;mu.Unlock();}//不加锁func total2(num[详细]
-
go语言template包中模板语法总结
所属栏目:[大数据] 日期:2020-12-16 热度:142
package main;import ("html/template""os""fmt")type Person struct {Id string;UserName string;Age int;Contact map[string]string;}func (p Person) Say(msg string) string {return msg;}func test1() string {return "test1";}func test2(msg string)[详细]
-
golang 使用 protobuf 的教程
所属栏目:[大数据] 日期:2020-12-16 热度:52
1、下载protobuf的编译器protoc 地址: https://github.com/google/protobuf/releases window: ? ? 下载: protoc-3.3.0-win32.zip ? ? 解压,把bin目录下的protoc.exe复制到GOPATH/bin下,GOPATH/bin加入环境变量。 ? ? 当然也可放在其他目录,需加入环境变[详细]
-
go语言中的函数
所属栏目:[大数据] 日期:2020-12-16 热度:79
package main;import "fmt"func main() {a,b,c := A(1,2,3);fmt.Println(a,c);//调用函数B,虽然传入的是一个slice,但外部变量并未改变,说明是值拷贝B(a,c);fmt.Println(a,c);d := []int{1,3};//这里传入的是一个slice,但外部变量确改变了,说明是地址拷[详细]
-
go语言中操作mysql的方法
所属栏目:[大数据] 日期:2020-12-16 热度:121
需要下载指定的golang的mysql驱动包 go get github.com/go-sql-driver/mysql 下面的例子: package main;import ("database/sql"_ "github.com/go-sql-driver/mysql""fmt")func main() {//打开数据库//DSN数据源字符串:用户名:密码@协议(地址:端口)/数据库?[详细]
-
go语言中net包tcp socket的使用
所属栏目:[大数据] 日期:2020-12-16 热度:87
一、通过socket我们模拟请求网易 package main;import ("net""log""io/ioutil""fmt")func chkError(err error) {if err != nil {log.Fatal(err);}}func main() {//我们模拟请求网易的服务器//ResolveTCPAddr用于获取一个TCPAddr//net参数是"tcp4"、"tcp6"、"[详细]
-
golang 常用的正则查找与替换
所属栏目:[大数据] 日期:2020-12-16 热度:124
package main;import ("regexp""fmt""strings")func main() {//1、过正则来判断字符串是否匹配if ok,_ := regexp.Match("^[0-9a-zA-Z_]+$",[]byte("hello")); ok {fmt.Println("ok");}//上面的例子也可以通过MatchString实现if ok,_ := regexp.MatchString("[详细]
-
go语言中的接口interface
所属栏目:[大数据] 日期:2020-12-16 热度:199
package main;import "fmt"//接口interface//接口是一个或多个方法签名的集合//只要某个类型拥有该接口的所有方法签名,即算实现该接口。//接口只有方法声明,没有实现,没有数据字段//接口可以匿名嵌入其它接口,或嵌入到结构中。//GO语言中的所有类型都实[详细]
-
golang 创建一个简单的连接池,减少频繁的创建与关闭
所属栏目:[大数据] 日期:2020-12-16 热度:146
一、连接池的描述图片如下: 二、连接池代码如下: package main;import ("time""sync""errors""net""fmt")//频繁的创建和关闭连接,对系统会造成很大负担//所以我们需要一个池子,里面事先创建好固定数量的连接资源,需要时就取,不需要就放回池中。//但是[详细]
-
golang 简单的实现内 网 穿 透,用户访问本地服务。
所属栏目:[大数据] 日期:2020-12-16 热度:55
一、功能描述: 客户端通过访问外网服务器上指定端口,间接访问自已本地的内网服务。 二、原理图如下: 三、实现代码如下: server.go代码: package main;import ("net""fmt""flag""os")type MidServer struct {//客户端监听clientLis *net.TCPListener;//[详细]
-
go语言中container容器数据结构heap、list、ring
所属栏目:[大数据] 日期:2020-12-16 热度:187
heap堆的使用: package mainimport ("container/heap""fmt")type IntHeap []int//我们自定义一个堆需要实现5个接口//Len(),Less(),Swap()这是继承自sort.Interface//Push()和Pop()是堆自已的接口//返回长度func (h *IntHeap) Len() int {return len(*h);}//[详细]
-
go语言中的并发
所属栏目:[大数据] 日期:2020-12-16 热度:127
package main;import ("fmt""runtime""sync")//goruntine奉行通过通信来共享内存,而不是共享内存来通信//channel是goruntine沟通的桥梁,大都是阻塞同步的//通过make创建,close关闭//channel是引用类型//使用for range来迭代操作channel//可设置单向或双向[详细]
-
go语言websocket使用与客户端html5调用
所属栏目:[大数据] 日期:2020-12-16 热度:126
我们通过使用如下库创建websocket服务 go get golang.org/x/net/websocket websocket服务端的代码如下: package main;import ("golang.org/x/net/websocket""net/http""log""fmt")//使用golang.org/x/net/websocket//如果无法下载,请到下面的地址去下载//h[详细]
-
golang 创建一个简单的资源池,重用资源,减少GC负担
所属栏目:[大数据] 日期:2020-12-16 热度:185
package main;import ("sync""errors""fmt")//代码参考《Go语言实战》中第7章并发模式Pool//如果哪个类型实现了Resource接口中的两个方法,我们就认为该类型是资源type Resource interface {Close();IsClosed() bool;}//工厂方法,用于创建新资源type Factor[详细]
-
go语言中的方法method
所属栏目:[大数据] 日期:2020-12-16 热度:81
package main;import "fmt"//重新定义一个类型//为该INT类型扩展方法type INT int;type A struct {name string;}type B struct {name string;}func main() {a := A{};a.Print();//指针传递a.Print2();fmt.Println(a);//同上(*A).Print2(a);b := B{};b.Print([详细]
-
go语言中的strings常用函数和格式化输出
所属栏目:[大数据] 日期:2020-12-16 热度:142
package main;import ("fmt""strings")type person struct {name string; age int;}func main() {//判断是否包含某个子字符串fmt.Println(strings.Contains("hello","he"));//统计子符串的次数fmt.Println(strings.Count("hello hello","ll"));//判断前缀字[详细]
-
go流程控制与函数
所属栏目:[大数据] 日期:2020-12-16 热度:121
package main;import ( "fmt");func main() { isRun := true; //条件判断 if isRun { fmt.Printf("runn"); } else { fmt.Printf("not runn"); } //多条件判断 a := 15; if a 0 a 10 { fmt.Printf("0-10n"); } else if a 10 a 20 { fmt.Printf("10-20n");[详细]
-
golang语言中sync/atomic包的学习与使用
所属栏目:[大数据] 日期:2020-12-16 热度:161
package main;import ("sync/atomic""fmt""sync")//atomic包提供了底层的原子级内存操作//类型共有六种:int32,int64,uint32,uint64,uintptr,unsafe.Pinter//操作共五种:增减, 比较并交换, 载入, 存储,交换func main() {//增减操作var a int32;fmt.Prin[详细]
-
golang语言中os包的学习与使用(文件,目录,进程的操作)
所属栏目:[大数据] 日期:2020-12-16 热度:127
os中一些常用函数的使用: package main;import ("os""fmt""time""strings")//os包中的一些常用函数func main() {//获取主机名fmt.Println(os.Hostname());//获取当前目录fmt.Println(os.Getwd());//获取用户IDfmt.Println(os.Getuid());//获取有效用户IDfmt[详细]
-
go语言中的数组
所属栏目:[大数据] 日期:2020-12-16 热度:80
package main;import ("fmt")func main() {//声明一个数组var a [3]int;a = [3]int{1,2,3};//声明并赋值var b [3]int = [3]int{1,3};//声明并赋值(省略类型)var c = [3]int{1,3};//声明并赋值简写d := [3]int{1,3};//GO中将数组长度作为数组类型的一部分//e[详细]
-
golang基础学习
所属栏目:[大数据] 日期:2020-12-16 热度:148
一、输出hello,world程序 package main;import "fmt";func main() { fmt.Printf("hello,world");} 二、定义变量 package main;import "fmt";func main() { //定义一个类型为int的变量a var a int; //定义多个类型为int的变量 var b,c,d int; //定义并初始化[详细]
-
go语言中的坑
所属栏目:[大数据] 日期:2020-12-16 热度:58
package main;import ("fmt""time""sync")//修改slice的坑func add(s []int) {//当s通过append添加元素时,这里会发生内存重新分配//s会指向新的地址s = append(s,3);}//当需要对slice进行修改时,建议通过函数返回值把该slice返回func add2(s []int) []int[详细]
-
go语言net包udp socket的使用
所属栏目:[大数据] 日期:2020-12-16 热度:185
udp与tcp的不同在于客户端请求方式不同,udp缺少Accept函数。 一个简单的udp客户端: package main;import ("net""log""fmt")func chkError(err error) {if err != nil {log.Fatal(err);}}func main() {//获取udpaddrudpaddr,err := net.ResolveUDPAddr("udp[详细]
-
go语言中的map
所属栏目:[大数据] 日期:2020-12-16 热度:168
package main;import ("fmt""sort")func main() {//类似其他语言中的哈希表或者字典,以key-value形式存储//创建key为int值为string的mapvar a map[int]string = map[int]string{};//同上var b map[int]string = make(map[int]string);//通过make创建mapvar[详细]
-
golang xml和json的解析与生成
所属栏目:[大数据] 日期:2020-12-16 热度:172
golang中解析xml时我们通常会创建与之对应的结构体,一层层嵌套,完成复杂的xml解析。 package main;import ("encoding/xml""fmt")//我们通过定义一个结构体,来解析xml//注意,结构体中的字段必须是可导出的type Books struct {//如果有类型为xml.Name的XML[详细]
