Go语言
sunansheng
好懒啊,不想写!!!
展开
-
GO语言多值返回
多值返回Go一个非常特别的特性(对于编译语言而言)是函数和方法可以返回多个值(Python和Perl同样也可以)。这可以用于改进一大堆在C程序中糟糕的惯例用法:修改参数的方式,返回一个错误(例如遇到EOF则返回-1)。在Go中,Write返回一个计数值和一个错误:“是的,你写入了一些字节,但是由于设备异常,并不是全部都写入了。”。os包中的*File.Write是这样声明的:func (file *原创 2017-06-30 15:54:27 · 8202 阅读 · 0 评论 -
go sync.once用法
作用sync.once可以控制函数只能被调用一次。不能多次重复调用。示例代码:package mainimport ( "fmt" "sync")func main() { o := &sync.Once{} var wa sync.WaitGroup wa.Add(2) go do(o,&wa) go...原创 2019-05-13 15:53:12 · 1689 阅读 · 0 评论 -
GO语言并发编程-原子操作
引言举一个例子, 将变量 n 从 0 开始, 自增 1000 次, 然而对于并发操作而言, 当两个或两个以上的 goroutines 同时读取内存中的 n 值, 然后将 n+1 的值放回内存,可能多次自增的结果,这个 n 只自增了 1 次!这里需要使用原子操作, 以保证多个 goroutines 对同一块内存的操作是原子的, 即保证本例中 n 自增到最后的值为 1000.示例Go语...原创 2019-05-13 14:44:44 · 707 阅读 · 0 评论 -
GO语言实现TCP端口转发【代码】
package mainimport ( "fmt" "log" "net")func main() { //源端口,目的端口 var fromport, toport int = 2222, 88 fromaddr := fmt.Sprintf("127.0.0.1:%d", fromport) toaddr := fmt.Sprintf("127.0.0.1:%d", ...原创 2019-05-13 09:54:43 · 2465 阅读 · 0 评论 -
go语言数据类型转换
数值间转换int和int64之间转换,类似于java的强制类型转换:int转int64int64:=int64(int)int64转intint:=int(int64)float64转intint:=int(3434.64)数值转字符串int到stringstring:=strconv.Itoa(int)注意:string(45) ,这种形式是ASCII编码的转...原创 2019-05-08 21:22:25 · 531 阅读 · 0 评论 -
GO语言局部变量堆、栈分析
C语言的局部变量内存分配在栈空间,因为函数返回后,系统自动回收了函数里定义的局部变量,所以运行时去访问一个被系统回收后的地址空间,一定就会发生段错误,这是C/C++语言的特点。GO语言局部变量逃逸分析先看一段代码:package mainimport ( "fmt")func newInt() *int { var i int =4 fmt.Print...原创 2019-04-25 17:22:51 · 581 阅读 · 0 评论 -
理解GO语言make 和 new 的区别
new 和 make 都可以用来分配空间,初始化类型,但是它们确有不同。函数原型new 是内建函数,函数原型为:func new(Type) *Type make 也是内建函数,它的函数原型 比 new 多了一个(长度)参数,返回值也不同:func make(Type, size IntegerType) Type第一个参数是一个类型,第二个参数是长度 返回值是一个类型new 函数...原创 2019-04-25 17:22:23 · 864 阅读 · 0 评论 -
GO语言ioutil包
ioutil标准库中提供了一些常用、方便的IO操作函数。ReadAll 函数很多时候,我们需要一次性读取io.Reader中的数据,通过上一节的讲解,我们知道有很多种实现方式。考虑到读取所有数据的需求比较多,Go提供了ReadAll这个函数,用来从io.Reader中一次读取所有数据。func ReadAll(r io.Reader) ([]byte, error)package...原创 2019-04-25 17:20:53 · 3117 阅读 · 0 评论 -
GO语言net实现SMTP
直接上代码:package mainimport ( "encoding/base64" "fmt" "net" "time")type Sender struct { UserName string Password string From string To string Subject...原创 2019-04-28 16:56:56 · 704 阅读 · 0 评论 -
GO语言之bytes.buffer
bytes.Bufferbytes.Buffer是一个缓冲byte类型的缓冲器存放着都是byte。Buffer 是 bytes 包中的一个type Buffer struct{…}。A buffer is a variable-sized buffer of bytes with Read and Write methods. The zero value for Buffer is...原创 2019-04-28 14:26:51 · 4029 阅读 · 1 评论 -
GO语言 String() 方法的思考
String()方法对于定于了String()方法的类型,默认输出的时候会调用该方法,实现字符串的打印。例如下面代码:package mainimport "fmt"type Man struct { name string}func (m Man) String() string { return "My name is :" + m.name}fu...原创 2019-04-28 10:12:34 · 8718 阅读 · 10 评论 -
Go语言接口为什么是颠覆性的?
什么是接口(Interface)其实说白了,接口就是一种协议,统一一个标准。你要调用我,那你就必须实现我的这些方法。我不需要知道你是怎么实现的,但是你一定要实现。甚至在Objec-C当中都不叫interface,直接protocol。我相信不少刚接触interface的人会跟我有一样的疑惑,我实现接口跟不实现接口没什么区别啊?反正都要实现这些方法。问题的误区就在于,接口的使用并不是单人开发...原创 2019-04-25 22:33:39 · 2023 阅读 · 4 评论 -
Go语言GUI Demo 之 Walk
Go语言没有自带官方Gui,目前找到的Gui框架中感觉Walk还不错,但该库只支持Windows操作系统(一般也只用到Windows)。本次我把官方的example编译成exe,方便网友参考Walk 的gui功能。Walk地址:https://github.com/lxn/walk以下是各demo的截图,和exe文件下载地址(本次编译保留黑框框方便查询调试信息,实际中可以去掉)下载地址:http:原创 2016-11-10 15:35:34 · 19145 阅读 · 3 评论 -
GO语言Socket编程详解
Socket基础知识通过上面的介绍我们知道Socket有两种:TCP Socket和UDP Socket,TCP和UDP是协议,而要确定一个进程的需要三元组,需要IP地址和端口。IPv4地址目前的全球因特网所采用的协议族是TCP/IP协议。IP是TCP/IP协议中网络层的协议,是TCP/IP协议族的核心协议。目前主要采用的IP协议的版本号是4(简称为IPv4),发展至今已经使用了30多年。IPv4原创 2017-07-12 15:05:45 · 9141 阅读 · 0 评论 -
GO语言flag参数解析
import "flag"flag包实现了命令行参数的解析。要求:使用flag.String(), Bool(), Int()等函数注册flag,下例声明了一个整数flag,解析结果保存在*int指针ip里:import "flag"var ip = flag.Int("flagname", 1234, "help message for flagname")如果你喜欢,也可以将flag绑定到原创 2017-07-11 17:21:23 · 10278 阅读 · 0 评论 -
GO语言defer延迟代码
GO语言defer延迟代码GO语言 defer假设有一个函数,打开文件并且对其进行若干读写。在这样的函数中,经常有提前返 回的地方。如果你这样做,就需要关闭正在工作的文件描述符。这经常导致产生下面 的代码:func ReadWrite() bool { file.Open("file") // 做一些工作 if failureX { file.Close()原创 2017-06-30 16:07:21 · 5722 阅读 · 0 评论 -
golang单例模式
定义单例对象的类必须保证只有一个实例存在,全局有唯一接口访问。实现1-懒汉方式type singleton struct{}var ins *singletonfunc GetIns() *singleton{ if ins == nil { ins = &singleton{} } return ins}缺点:非线程安全。当正在...原创 2019-05-13 16:29:57 · 518 阅读 · 0 评论