golang
980205
这个作者很懒,什么都没留下…
展开
-
go interface{} 作为函数参数
尽管空接口具有灵活性和通用性,但在使用时需要注意类型断言或类型判断,以确保对参数的安全处理。空接口可以接受任何类型的值,因此可以在运行时动态地确定参数的具体类型。如果要与已有的代码或第三方库集成,但又不清楚需要传递的参数类型,可以使用空接口来接收任意类型的值,以确保函数的通用性和兼容性。这种参数类型称为空接口,因为它不限制参数的具体类型,可以接受任何类型的值。这样一来,函数可以处理各种不同类型的数据,提高了函数的灵活性和复用性。通过将函数参数定义为。,可以接受不同类型的数据,从而实现一定程度上的泛型编程。原创 2024-04-09 10:03:00 · 310 阅读 · 0 评论 -
Golang中的error类型
原文:https://studygolang.com/articles/4389error类型本身就是一个预定义好的接口,里面定义了一个methodtype error interface { Error() string}生成一个新的error并返回一般有以下几种处理方式:package mainimport ("errors""fmt")type Customerror stru转载 2017-11-24 19:42:44 · 2977 阅读 · 0 评论 -
golang中recover和panic用法
原文:http://blog.csdn.net/chenbaoke/article/details/41966827 golang中没有try… catch…,所以当golang中遇到panic时,如果不进行recover,便会导致整个程序挂掉,具体例子如下:package main import ( "fmt" ) func main() { panic("fau转载 2017-11-24 19:54:22 · 716 阅读 · 0 评论 -
Golang号称高并发,但高并发时性能不高
文章来自:https://studygolang.com/articles/114671.管道chan吞吐极限10,000,000,单次Put,Get耗时大约100ns/op,无论是采用单Go程,还是多Go程并发(并发数:100, 10000, 100000),耗时均没有变化,Go内核这对chan进行优化。解决之道:在系统设计时,避免使用管道chan传递主业务数据,避免将业务流程处理流程分割到对个...转载 2018-07-11 14:43:16 · 9651 阅读 · 0 评论 -
Golang---高并发
文章来自:https://blog.csdn.net/hcljava/article/details/78435922golang从语言级别上对并发提供了支持,而且在启动并发的方式上直接添加了语言级的关键字。我并不会很多语言,而且也没有很多的项目经验,可能从我嘴里说出的比较不会非常客观,但是起码和C/C++(不考虑C++11)利用系统API来操作线程的方式相比,golang的并发机制运用起来就非常...转载 2018-07-04 22:45:26 · 243 阅读 · 0 评论 -
go语言的new和make
文章来自:https://studygolang.com/articles/1890golang的new和make主要区别如下:1、make只能用来分配及初始化类型为slice,map,chan的数据;new可以分配任意类型的数据2、new分配返回的是指针,即类型*T;make返回引用,即T;3、new分配的空间被清零,make分配后,会进行初始化。effective go举了一个例子,见:htt...转载 2018-07-12 22:35:00 · 400 阅读 · 0 评论 -
Golang 介绍及踩坑系列之三
文章来自:http://baijiahao.baidu.com/s?id=1587071920793323121&wfr=spider&for=pc聪明的你,用golang写后端服务,各种使用channel和goroutine,把java要用线程池干的事儿用携程都搞定了。服务线下运行一切正常,压测,单元测,联调统统通过。你露出得意的微笑,一键发布到生产环境,欣喜的发现服务崩溃了。为...转载 2018-07-12 22:43:52 · 4016 阅读 · 0 评论 -
golang -- 网络字节编解码(2)
以下是利用标准库binary来进行编解码 解码 ①使用bytes.NewReader/bytes.Buffer来存储要解码的ascii串 ②使用binary.Read来解码 package mainimport ( "bytes" "encoding/binary" "fmt")func main() { var pi float6...转载 2018-08-20 08:33:42 · 1069 阅读 · 0 评论 -
Golang中的信号处理
Golang中的信号处理信号类型个平台的信号定义或许有些不同。下面列出了POSIX中定义的信号。Linux 使用34-64信号用作实时系统中。命令 man signal 提供了官方的信号介绍。在POSIX.1-1990标准中定义的信号列表信号 值 动作 说明 SIGHUP 1 Term 终端控制进程结束(终端连接断开) SIGINT ...转载 2018-08-23 10:01:29 · 1443 阅读 · 0 评论 -
go select用法
例子1:packagemainimport ( "fmt")func main() { ch1 := make(chan int, 1) ch2 := make(chan int, 2) select { case ch1: fmt.Println("ch1") case ch2:原创 2017-08-15 23:35:35 · 375 阅读 · 0 评论 -
go goroutine 简单实现生产者和消费者
原文:http://blog.csdn.net/deus_ex_machina/article/details/57074583packagemainimport ( "fmt" "time")func Product(ch chan int) { for i := 0; i 100; i++ { fmt.Pri原创 2017-08-15 23:21:26 · 2172 阅读 · 0 评论 -
go中的main函数和init函数
Go里面有两个保留的函数:init函数(能够应用于所有的package)和main函数(只能应用于package main)。这两个函数在定义时不能有任何的参数和返回值。虽然一个package里面可以写任意多个init函数,但这无论是对于可读性还是以后的可维护性来说,我们都强烈建议用户在一个package中每个文件只写一个init函数。 go程序会自动调用init()和main(),转载 2017-07-31 21:01:50 · 422 阅读 · 0 评论 -
go rpc 简单用法
先跑一个例子: server端:package mainimport ( "fmt" "net" "net/rpc" "net/rpc/jsonrpc" "os")var S stringtype MyRPC intfunc (r *MyRPC) HelloRPC(S string, reply *string) error { fmt.Print原创 2017-08-01 14:35:08 · 763 阅读 · 0 评论 -
go defer简单理解
今天看collider 代码的时候发现了,如何语句: // room returns the room specified by |id|, or creates the room if it does not exist. func (rt *roomTable) room(id string) *room { rt.lock.Lock() defer rt.lock.Un原创 2017-08-01 14:50:05 · 366 阅读 · 0 评论 -
Golang interface{} 作为函数参数和函数返回值例子
package mainimport ( “errors” “fmt” )type item struct { Name string }func (i item) String() string { return fmt.Sprintf(“item name:%v”, i.Name) }type person struct { Name st原创 2017-08-02 11:25:13 · 8436 阅读 · 0 评论 -
go interface 例子
package mainimport ( "fmt")type Human struct { name string age int phone string}type Student struct { Human school string stuID int}type Employee struct { Human原创 2017-08-16 23:42:18 · 503 阅读 · 0 评论 -
go udp 简单实现
服务器端 udpserver.go// udpServer project main.gopackage mainimport ( "fmt" "net")func main() { fmt.Println("udpserver") socket, err := net.ListenUDP("udp4", &net.UDPAddr{ IP: n原创 2017-08-04 23:01:34 · 1166 阅读 · 0 评论 -
go 使用 goroutine channel 通信
packagemainimport ( "fmt")func Cnt(ch chan int) { ch 1 fmt.Println("counting")}func main() { chs := make([]chan int, 20) for i := 0; i 20; i++ { c原创 2017-08-15 23:03:00 · 530 阅读 · 0 评论 -
go sync的并发同步简单用法
//通过golang中的 goroutine 与sync.Mutex进行并发同步package mainimport ( "fmt" "runtime" "sync")var count int = 0func counter(lock *sync.Mutex) { lock.Lock() count++原创 2017-08-15 22:52:45 · 688 阅读 · 0 评论 -
go import下划线的作用
在Golang里,import的作用是导入其他package,但是今天在看bbllive流媒体服务器有如下写法: import ( “bbllive/rtmp” “flag” “log” “net/http” _ “net/http/pprof” “runtime” ),对import 下划线不解,于是找了网络如下解释: impo原创 2017-07-31 20:51:44 · 547 阅读 · 0 评论