go杂货铺
json序列化
内存中变成可存储或传输的过程称之为序列化(dict,split,struct转string)
- package main
- import (
- "encoding/json"
- "fmt"
- )
- type Stu struct {
- Name string
- Age int
- }
- func JsonDump() (ret string, err error) {
- stu1 := Stu{
- Name: "somebody",
- Age: 20,
- }
- data, err := json.Marshal(stu1)
- if err != nil {
- err = fmt.Errorf("json dump failed:", err)
- return
- }
- ret = string(data)
- fmt.Println(ret)
- return
- }
- func main() {
- JsonDump()
- }
json反序列化
磁盘读取到内存
需要先定义一个存储的数据类型(map struct),string要转成byte
- package main
- import (
- "encoding/json"
- "fmt"
- )
- type Stu struct {
- Name string
- Age int
- }
- func JsonDump() (ret string, err error) {
- stu1 := Stu{
- Name: "somebody",
- Age: 20,
- }
- data, err := json.Marshal(stu1)
- if err != nil {
- err = fmt.Errorf("json dump failed:", err)
- return
- }
- ret = string(data)
- return
- }
- func JsonLoad(res string) (ret interface{}, err error) {
- var stu Stu
- err = json.Unmarshal([]byte(res), &stu)
- if err != nil {
- err = fmt.Errorf("json loads failed:", err)
- return
- }
- ret = stu
- return
- }
- func main() {
- response, _ := JsonDump()
- res, _ := JsonLoad(response)
- fmt.Println(res)
- }
命令行参数的解析
flag模块
- package main
- import (
- "flag"
- "fmt"
- )
- func main() {
- var confPath string
- var command string
- var port int
- flag.StringVar(&confPath, "c", "conf", "conf file of app")//变量名 -c 默认值 描述
- flag.StringVar(&command, "a", "online", "command to execute")
- flag.IntVar(&port, "p", 10000, "port of service")
- flag.Parse()
- fmt.Println(confPath)
- fmt.Println(command)
- fmt.Println(port)
- }
slice取随机数
- var indexList []int
- for i := 0; i < chooseNum; i++ {
- //避免随机出现重复
- for {
- randIndex := rand.Intn(len(totalList))
- flag := true
- for _, v := range indexList {
- if v == randIndex {
- flag = false
- }
- }
- if flag {
- indexList = append(indexList, randIndex)
- break
- }
- }
- }
远程登录执行ssh命令(支持密码、秘钥)
- package main
- import (
- "fmt"
- "io/ioutil"
- "net"
- "os"
- "time"
- "golang.org/x/crypto/ssh"
- )
- func connect(user, password, host, key string, port int) (*ssh.Session, error) {
- var (
- auth []ssh.AuthMethod
- addr string
- clientConfig *ssh.ClientConfig
- client *ssh.Client
- session *ssh.Session
- err error
- )
- // get auth method
- auth = make([]ssh.AuthMethod, 0)
- if key == "" {
- auth = append(auth, ssh.Password(password))
- } else {
- pemBytes, err := ioutil.ReadFile(key)
- if err != nil {
- return nil, err
- }
- var singer ssh.Signer
- if password == "" {
- singer, err = ssh.ParsePrivateKey(pemBytes)
- } else {
- singer, err = ssh.ParsePrivateKeyWithPassphrase(pemBytes, []byte(password))
- }
- if err != nil {
- return nil, err
- }
- auth = append(auth, ssh.PublicKeys(singer))
- }
- clientConfig = &ssh.ClientConfig{
- User: user,
- Auth: auth,
- Timeout: 3 * time.Second,
- HostKeyCallback: func(hostname string, remote net.Addr, key ssh.PublicKey) error {
- return nil
- },
- }
- // connet to ssh
- addr = fmt.Sprintf("%s:%d", host, port)
- if client, err = ssh.Dial("tcp", addr, clientConfig); err != nil {
- return nil, err
- }
- // create session
- if session, err = client.NewSession(); err != nil {
- return nil, err
- }
- return session, nil
- }
- func main() {
- session, err := connect("admin", "", "172.20.165.161", "/home/admin/id_rsa", 22)
- if err != nil {
- fmt.Println(err)
- }
- defer session.Close()
- session.Stdout = os.Stdout
- session.Stderr = os.Stderr
- session.Run("sh /export/Packages/merger_server_ab/latest/bin/stop.sh")
- }
调用shell命令
阻塞方式(需要执行结果)
- //阻塞式的执行外部shell命令的函数,等待执行完毕并返回标准输出
- func exec_shell(s string) (string, error){
- //函数返回一个*Cmd,用于使用给出的参数执行name指定的程序
- cmd := exec.Command("/bin/bash", "-c", s)
- //读取io.Writer类型的cmd.Stdout,再通过bytes.Buffer(缓冲byte类型的缓冲器)将byte类型转化为string类型(out.String():这是bytes类型提供的接口)
- var out bytes.Buffer
- cmd.Stdout = &out
- //Run执行c包含的命令,并阻塞直到完成。 这里stdout被取出,cmd.Wait()无法正确获取stdin,stdout,stderr,则阻塞在那了
- err := cmd.Run()
- checkErr(err)
- return out.String(), err
- }
shell标准输出逐行实时处理
- func execCommand(commandName string, params []string) bool {
- //函数返回一个*Cmd,用于使用给出的参数执行name指定的程序
- cmd := exec.Command("/bin/bash","-c",command)
- //显示运行的命令
- fmt.Println(cmd.Args)
- //StdoutPipe方法返回一个在命令Start后与命令标准输出关联的管道。Wait方法获知命令结束后会关闭这个管道,一般不需要显式的关闭该管道。
- stdout, err := cmd.StdoutPipe()
- if err != nil {
- fmt.Println(err)
- return false
- }
- cmd.Start()
- //创建一个流来读取管道内内容,这里逻辑是通过一行一行的读取的
- reader := bufio.NewReader(stdout)
- //实时循环读取输出流中的一行内容
- for {
- line, err2 := reader.ReadString('\n')
- if err2 != nil || io.EOF == err2 {
- break
- }
- fmt.Println(line)
- }
- //阻塞直到该命令执行完成,该命令必须是被Start方法开始执行的
- cmd.Wait()
- return true
- }
文件处理
读文件
- package main
- import (
- "errors"
- "fmt"
- "io/ioutil"
- "os"
- )
- func main() {
- inputFile, err := os.Open("ip.txt")
- if err != nil {
- err = errors.New("open file error")
- fmt.Println(err)
- return
- }
- defer inputFile.Close()
- fd, err := ioutil.ReadAll(inputFile)
- fmt.Println(string(fd))
- }
写文件
- package main
- import (
- "bufio"
- "fmt"
- "os"
- )
- func main() {
- outputFile, outputError := os.OpenFile("ip.txt", os.O_WRONLY|os.O_CREATE, 0666)
- if outputError != nil {
- fmt.Println(outputError)
- return
- }
- defer outputFile.Close()
- outputWriter := bufio.NewWriter(outputFile)
- outputString := "3.3.3.3\n"
- for i := 0; i < 10000; i++ {
- outputWriter.WriteString(outputString)
- }
- outputWriter.Flush()
- }
recover
- package main
- import (
- "fmt"
- )
- func tryRecover() {
- defer func() {
- r := recover()
- if err, ok := r.(error); ok {
- fmt.Println("error occurred:", err)
- } else {
- panic(r)
- }
- }()
- a := 5
- b := 0
- c := a / b
- fmt.Println(c)
- }
- func main() {
- tryRecover()
- }
go杂货铺的更多相关文章
- 算法杂货铺——分类算法之朴素贝叶斯分类(Naive Bayesian classification)
算法杂货铺——分类算法之朴素贝叶斯分类(Naive Bayesian classification) 0.写在前面的话 我个人一直很喜欢算法一类的东西,在我看来算法是人类智慧的精华,其中蕴含着无与伦比 ...
- Pyhton开发【第五篇】:Python基础之杂货铺
Python开发[第五篇]:Python基础之杂货铺 字符串格式化 Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进 ...
- python 杂货铺
python 杂货铺之不知道的python操作 1.交互模式下的神奇的_ windos中cmd交互模式中下(python2,python3),最近一个表达式的值赋给变量 _.这样我们就可以把它当作一个 ...
- (ZT)算法杂货铺——分类算法之朴素贝叶斯分类(Naive Bayesian classification)
https://www.cnblogs.com/leoo2sk/archive/2010/09/17/naive-bayesian-classifier.html 0.写在前面的话 我个人一直很喜欢算 ...
- Python特技杂货铺
Python3特技杂货铺 Python3实现汉字简体和繁体相互转换 Python3中通过fake_useragent生成随机UserAgent 修改线上配置文件 PyCharm中项目上传到GitHub ...
- 【python】-- 基于Django的杂货铺
Django的杂货铺 此篇文章保存基于Django而实现的各种小功能示例 1.验证码 + Session 这个是在前端图片验证码的生成,再配合Session进行后端校验的功能示例 import ran ...
- uvm_misc——杂货铺(miscellaneous)
uvm_misc 是个很有意思的文件夹,本质上就是个UVM的杂货铺,包含一些很重要的class, task, function, 但不知道给归类到哪儿,所以,uvm_misc就很好地承担了这个任务,几 ...
- 【转】算法杂货铺——k均值聚类(K-means)
k均值聚类(K-means) 4.1.摘要 在前面的文章中,介绍了三种常见的分类算法.分类作为一种监督学习方法,要求必须事先明确知道各个类别的信息,并且断言所有待分类项都有一个类别与之对应.但是很多时 ...
- Python学习【第十篇】基础之杂货铺
字符串格式化 Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存. 百分号方式: ...
- Python开发【杂货铺】:模块logging
logging模块 很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式 ...
随机推荐
- JS中闭包的介绍
闭包的概念 闭包就是能够读取其他函数内部变量的函数. 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascri ...
- PATA 1036. Boys vs Girls (25)
https://www.patest.cn/contests/pat-a-practise/1036 #include <bits/stdc++.h> using namespace st ...
- ES6_05_三点运算符和形参默认值
三点运算符的用途: # 1. rest(可变)参数 * 用来取代arguments 但比 arguments 灵活,只能是最后部分形参参数 function fun(...values) { cons ...
- 看看大神 Paul Graham 对如何学习编程的回答
前言 我翻阅自己之前写的博客文章,发现在 2015 年我刚开始学习编程的时候,翻译了一段 Paul Graham 关于"How can I learn to program?"的回 ...
- C#8.0: 在 LINQ 中支持异步的 IAsyncEnumerable
C# 8.0中,提供了一种新的IAsyncEnumerable<T>接口,在对集合进行迭代时,支持异步操作.比如在读取文本中的多行字符串时,如果读取每行字符串的时候使用同步方法,那么会导致 ...
- 控制台程序秒变Windows服务(Topshelf)
项目中有些时候需要写服务,一般我们都是先创建控制台程序,测试,运行,成功之后再创建windows服务程序,这样好麻烦啊,有没有简单的控制台程序直接变成Widnows服务,经过查找,找到了Topshel ...
- C++学习书籍推荐《More Effective C++》下载
百度云及其他网盘下载地址:点我 编辑推荐 <More Effective C++:35个改善编程与设计的有效方法(中文版)>:传世经典书丛 媒体推荐 <Effective c++&g ...
- CDQZ集训DAY2 日记
依然很爆炸. T1上来有50分暴力分,打完后注意到了后50分的随机数据,开始想怎么去对付他.然后就开始思考随机数据意味着什么.想了想,想打一个扫描线或者分治.决策了一下还是打了一个扫描线+链表.然而只 ...
- 学习2:总结# 1.while # 2.字符串格式化 # 3.运算符 # 4.编码初始
目录 1.while循环 -- 死循环 2.字符串格式化: 3.运算符 4.编码 1.while循环 -- 死循环 while 条件: 循环体 打断死循环: break -- 终止当前循环 改变条件 ...
- Java编程思想:擦除的补偿(数组泛型处,我有很多细节没有研究)
import sun.net.www.content.text.Generic; import java.lang.reflect.Array; import java.util.ArrayList; ...