GO语言如何入坑

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安装是比较便捷的,但我这边连不上,所以只能离线安装:

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

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

  3. **配置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语言出来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值