GO语言如何入坑

tech2023-12-28  72

JAVA程序员GO语言如何入坑

一、简单说下GO语言

本社畜是一个JAVA出身的开发工程师,因机缘巧合需要对GO语言进行一些开发,记录一下供后人入坑 GO语言: 1、面向过程,类似于C和C++,但是因为自身具备垃圾回收机制,比C和C++还是要方便一些,没有public private这些关键字,暴露外部方法的方式是通过方法首字母大写,同一个package下面是不可以有同名的方法的,即使是两个不同的go file; 2、开发工具比较简陋,我是用eclipse集成GO开发插件来开发,用起来很多难用的地方,比如在调试的时候有一些类型是看不到值的,比如byte,代码提示也很差,基本没有很有用的提示,在eclipse上好像还不能auto build,所以每次都要自己手动build。 3、GO写出来的代码很简练,如果import的包没被使用或者定义的变量没有使用,是不可以编译通过的,所以代码冗余特别小; 4、定义变量比较方便,其他语言往往需要先要声明变量的类型或者使用var声明一个通用类型,GO可以直接用[变量:=]的形式声明一个变量; 5、在windows编译出来是一个exe可执行文件,不具备跨平台性; 6、相对比较小众,出问题比较难找到帮助

以上都是个人在实战过程中积累的经历,不对之处欢迎指正

二、eclispe下搭建GO开发和调试环境

网上还是有不少如何搭建GO开发环境的文章,可以根据自身实际情况参考,可以通过eclipse自带的maketplace安装是比较便捷的,但我这边连不上,所以只能离线安装:

下载插件 ,去GitHub上下载goeclispse插件goclipse.github.io-master.zip,参考地址:https://codeload.github.com/GoClipse/goclipse.github.io/zip/master;

在eclipse里引入插件 ,help->install new software->add->local,找到解压后的goclipse.github.io-master\releases\local-repo目录,然后引入即可。

**配置GO环境,**这一步相当于要配置JAVA里面的jdk,先下载GO安装包,参考地址: http://yiyang.jb51.net:81/201410/tools/go_win64(jb51.net).rar; 安装完成后在eclipse里preferences->GO配置GO安装环境,首先要配置GO安装目录,如图: 然后还需要下载三个工具文件,gocode.exe,godoc.exe,godef.exe,这三个文件可以自行上github下载源文件然后编译,也可以直接使用我上传的资源: https://download.csdn.net/download/chenxiaoshuai/12810329 下载三个工具文件后,继续在eclipse里面配置,gofmt.exe是bin目录下已经有的,无需另外下载,如图:

开发一个简单的GO程序

准备就绪已经我们先写一个简单的GO程序试试,在eclipse里新建一个GO工程,注意目录结构和入口类,具体语法请前往 https://www.runoob.com/go/go-tutorial.html 如图:

右键编译工程编译成功后,即可RUN这个main方法了,需要注意两点: 1、eclispe不能auto build GO工程,所以每次都要手工build; 2、要选择GO开发环境,不然可能无法build工程

GO程序进行调试

eclispe默认情况下无法调试GO程序,需要另外下载一个工具gdb或者gdb64.exe,一个在32位系统使用,一个在64位系统使用,参考地址: gdb64.exe gdb.exe(未验证32位操作系统) 然后需要配置debug的参数,右键工程选择debug configuration,进行配置,如图: 个人感觉GO语言的debug不是特别好用,比如byte数组是看不到具体的值的,如图:

通过go语言实现AES加密

在现在互联网高度发达的情况,大部分语言只要入门以后,通过网络搜索去实现常见的功能都是相对比较简单的,下面介绍下在GO语言如何实现AES128/PKCS5Padding/CBC模式的加密,不多说,直接贴代码。 1、依赖

import ( "bytes" "crypto/aes" "crypto/cipher" "crypto/sha1" "encoding/base64" )

2、PKCSpadding

func PKCS7Padding(ciphertext []byte, blockSize int) []byte { padding := blockSize - len(ciphertext)%blockSize padtext := bytes.Repeat([]byte{byte(padding)}, padding) return append(ciphertext, padtext...) } /** PKCS5包装 */ func PKCS5Padding(cipherText []byte, blockSize int) []byte { padding := blockSize - len(cipherText)%blockSize padText := bytes.Repeat([]byte{byte(padding)}, padding) return append(cipherText, padText...) }

3、进行加密,IV是偏移向量,key是aes的秘钥

func Encrypt(secretKey []byte, plaintext []byte) string { key:=[]byte("1234567890123456") iv:=[]byte("1234567890123456") //deriveKeyAndIv(secretKey) block, err := aes.NewCipher(key) if err != nil { return "error" } encrypt := cipher.NewCBCEncrypter(block, iv) var source []byte = PKCS5Padding(plaintext, 16) var dst []byte = make([]byte, len(source)) encrypt.CryptBlocks(dst, source) base64_result := base64.StdEncoding.EncodeToString(dst) return base64_result }

通过go语言实现HTTPS/HTTP POST XML

1、依赖

"io/ioutil" "net/http" "strings"

2、发送POST请求,可以支持HTTP和绕过证书的HTTPS

//这是post请求 func doPost(url string, s string, appKey string, timestamp string, nonce string, hmac string) string { tr := &http.Transport{TLSClientConfig: &tls.Config{InsecureSkipVerify: true}} //如果需要测试自签名的证书 这里需要设置跳过证书检测 否则编译报错 client := &http.Client{Transport: tr} //增加header选项 reqest, err := http.NewRequest("POST", url, strings.NewReader(s)) reqest.Header.Add("Content-Type", "application/xml") reqest.Header.Add("header1", appKey) reqest.Header.Add("header2", timestamp) reqest.Header.Add("header3", nonce) reqest.Header.Add("header4", hmac) resp, err := client.Do(reqest) if err != nil { fmt.Println("err:", err) } else { defer resp.Body.Close() body, er := ioutil.ReadAll(resp.Body) if er != nil { fmt.Println("err:", er) } else { fmt.Println(string(body)) return string(body) } } return "ERROR" }

总结(废话)

任何一门成熟的语言都有自己特色,GO语言也不例外,多研究下说不定有以后能自己写个XX语言出来。

最新回复(0)