每天五分钟go_指针_hitechr-编程思维

什么是指针 一个指向内存地址的变量,称为指针变量,指针是一个特殊的变量,他的值存储的是另一个值的内存地址 指针变量的声明 var var_name *type var_name 是指针变量的名称,type是指针变量的类型,*用于指定变量是作为一个指针 var a *int var b *string 可以使用&获取一个变量的内存地址 a:=10 b:="abc" fmt.Pr

每天五分钟go_map_hitechr-编程思维

map的定义 var m map[type]type fmt.Println(m) 此种方法定义的m为nil //打印的结果为: map[] map的创建 1、使用make创建 var m1 = make(map[string]int) m1["one"]=1 m1["two"]=2 m1["three"]=3 m2:=make(map[int]int) 2、定义时进行创建

每天五分钟go_数组_hitechr-编程思维

//数组的声明,默认为0值 var a1 [2]int fmt.Println(a1) //数组的长度 fmt.Println(len(a1)) //遍历数组 for i, v := range a1 { fmt.Println(i,v) } //数组的声明并赋初始值 var a2 =[2]int{1,2} fmt.Println(a2) //数组的长度 f

每天五分钟go_常量_hitechr-编程思维

常量的声明 常量使用const进行对不会被改变值的修饰符 const 常量名 [常量类型] = 常量值,和变量的声名一样可以省略类型 const a=1 const b="a" const d int =124 可以同时声明多个常量,例如: const a,b,c=1,"a",true 枚举的声明 go里面没有专门定义枚举的关键词,因此使用const可以声明一个枚举 const( Mon=

每天五分钟go_条件语句_hitechr-编程思维

if语句 if 布尔表达式 { /* 在布尔表达式为 true 时执行 */ } else { /* 在布尔表达式为 false 时执行 */ } 如下代码 if a>10{ fmt.Println("大于10") }else if a>5 && a<=10{ fmt.Println("小于等于10 大于5") }else{ fmt.P

每天五分钟go_函数基础_hitechr-编程思维

函数在定义 Go的函数使用func来定义,返回类型支持多个值的返回 func 函数名([参数列]) [返回值类型]{ 方法执行体 } 参数列支持多个参数的声明,同一类型的函数,声明时和变量的声明一样 (a int,b int) (a,b int) 返回值类型也同样支持多个返回类型 int (int,int) 返回的值可以有指定的变量,以便给调用者指定返回的变量名 (a int , b

vscode配置安装golang开发环境_平凡键客-编程思维

1.下载安装Golang https://golang.google.cn/dl/ 一路下一步即可 2.下载安装Vscode https://visualstudio.microsoft.com/zh-hans/ 3.检查Golang是否安装成功 4.设置Golang 环境变量 go env -w GO111MODULE=on Golang1.16默认开启,1.16一下需要执行这条

go实现try-catch-finally机制_北洛-编程思维

前言 许多主流语言诸如:Java、Python都实现了try-catch-finally机制,而Go处理错误的方式却与前两种语言不同。关于Go处理异常的方式是好是坏仁者见仁智者见智,笔者还是更喜欢try-catch-fianlly的写法,这里便和大家分享一个Go实现的try-catch-finally机制。下面先贴部分代码的讲解,完整代码将在文章的末尾中给出。 Try-Catch-Finally

go语言之并发编程(四)_北洛-编程思维

同步 Go 程序可以使用通道进行多个 goroutine 间的数据交换,但这仅仅是数据同步中的一种方法。通道内部的实现依然使用了各种锁,因此优雅代码的代价是性能。在某些轻量级的场合,原子访问(atomic包)、互斥锁(sync.Mutex)以及等待组(sync.WaitGroup)能最大程度满足需求。 当多线程并发运行的程序竞争访问和修改同一块资源时,会发生竞态问题。 下面的代码中有一个 ID

go语言之反射(一)_北洛-编程思维

反射 反射是指在程序运行期对程序本身进行访问和修改的能力。程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分。在运行程序时,程序无法获取自身的信息。支持反射的语言可以在程序编译期将变量的反射信息,如字段名称、类型信息、结构体信息等整合到可执行文件中,并给程序提供接口访问反射信息,这样就可以在程序运行期获取类型的反射信息,并且有能力修改它们。Go程序在运行期使用reflect包

go语言之反射(三)_北洛-编程思维

结构体转JSON JSON格式是一种用途广泛的对象文本格式。在Go语言中,结构体可以通过系统提供的json.Marshal()函数进行序列化。为了演示怎么样通过反射获取结构体成员以及各种值的过程,下面使用反射将结构体序列化为文本数据。 1.数据结构及入口函数 将结构体序列化为JSON的步骤如下: 准备数据结构体。 准备要序列化的结构体数据。 调用序列化函数 参见下面的代码。序列化JSON主流

go语言之反射(二)_北洛-编程思维

反射的值对象 反射不仅可以获取值的类型信息,还可以动态地获取或者设置变量的值。Go语言中使用reflect.Value获取和设置变量的值。 使用反射值对象包装任意值 Go语言中,使用reflect.ValueOf()函数获得值的反射值对象(reflect.Value)。书写格式如下: value := reflect.ValueOf(rawValue)    reflect.ValueOf

go语言之并发编程(一)_北洛-编程思维

轻量级线程(goroutine) 在编写socket网络程序时,需要提前准备一个线程池为每一个socket的收发包分配一个线程。开发人员需要在线程数量和CPU数量间建立一个对应关系,以保证每个任务能及时地被分配到CPU上进行处理,同时避免多个任务频繁地在线程间切换执行而损失效率。 虽然,线程池为逻辑编写者提供了线程分配的抽象机制。但是,如果面对随时随地可能发生的并发和线程处理需求,线程池就不是非

go语言之并发编程(二)_北洛-编程思维

通道(channel) 单纯地将函数并发执行是没有意义的。函数与函数间需要交换数据才能体现并发执行函数的意义。虽然可以使用共享内存进行数据交换,但是共享内存在不同的goroutine中容易发生竞态问题。为了保证数据交换的正确性,必须使用互斥量对内存进行加锁,这种做法势必造成性能问题。 Go语言提倡使用通信的方法代替共享内存,这里通信的方法就是使用通道(channel),如图1-1所示所示。 图

go语言之并发编程(三)_北洛-编程思维

Telnet回音服务器 Telnet协议是TCP/IP协议族中的一种。它允许用户(Telnet客户端)通过一个协商过程与一个远程设备进行通信。本例将使用一部分Telnet协议与服务器进行通信。 服务器的网络库为了完整展示自己的代码实现了完整的收发过程,一般比较倾向于使用发送任意封包返回原数据的逻辑。这个过程类似于对着大山高喊,大山把你的声音原样返回的过程。也就是回音(Echo)。本节使用Go语言

golang get process name by pid_cylon-编程思维

一个很好的问题:How golang to get process name by process id (pid)? 目前看来go api并没有提供通过pid获取进程名称的方法,可以通过 /proc/<pid>/cmdline来获取对应的进程名称,也可以通过 readlink /proc/6530/exe 来获取 /proc/<pid>/cmdline 获取的为运

go convert slice to struct_cylon-编程思维

Question: in golang how to convert slice to struct scene 1:use reflect convert slice to struct func SliceToStruct(array interface{}) (forwardPort *ForwardPort, err error) { forwardPort = &For

golang时间格式化格式_cylon-编程思维

该文可以快速在Go语言中获得时间的计算。 在Go中获取时间 如何获取当前时间 now := time.Now() fmt.Printf("current time is :%s", now) current time is :2009-11-10 23:00:00 +0000 UTC m=+0.000000001 如何获取UNIX Timestamp cur_time := time.Now

常用加密算法学习总结之非对称加密_cylon-编程思维

公开密钥密码学(英语:Public-key cryptography)也称非对称式密码学(英语:Asymmetric cryptography)是密码学的一种演算法。常用的非对称加密算法有 RSA DSA ECC 等。公开密钥加密 非对称加密算法使用公钥、私钥来加解密。 公钥与私钥是成对出现的。 多个用户(终端等)使用的密钥交公钥,只有一个用户(终端等)使用的秘钥叫私钥。 使用公钥加密的数据只

常用加密算法学习总结之数字签名_cylon-编程思维

数字签名(Digital Signature),通俗来讲是基于非对称加密算法,用秘钥对内容进行散列值签名,在对内容与签名一起发送。 更详细的解说 更详细的解说 - 中文 数字签名的生成个验证 签名 ⑴ 对数据进行散列值运算。 ⑵ 签名:使用签名者的私钥对数据的散列值进行加密。 ⑶ 数字签名数据:签名与原始数据。 验证 ⑴ 接收数据:原始数据&数字签名。 ⑵ 使用公钥进行解密得到散