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杂货铺的更多相关文章

  1. 算法杂货铺——分类算法之朴素贝叶斯分类(Naive Bayesian classification)

    算法杂货铺——分类算法之朴素贝叶斯分类(Naive Bayesian classification) 0.写在前面的话 我个人一直很喜欢算法一类的东西,在我看来算法是人类智慧的精华,其中蕴含着无与伦比 ...

  2. Pyhton开发【第五篇】:Python基础之杂货铺

    Python开发[第五篇]:Python基础之杂货铺   字符串格式化 Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进 ...

  3. python 杂货铺

    python 杂货铺之不知道的python操作 1.交互模式下的神奇的_ windos中cmd交互模式中下(python2,python3),最近一个表达式的值赋给变量 _.这样我们就可以把它当作一个 ...

  4. (ZT)算法杂货铺——分类算法之朴素贝叶斯分类(Naive Bayesian classification)

    https://www.cnblogs.com/leoo2sk/archive/2010/09/17/naive-bayesian-classifier.html 0.写在前面的话 我个人一直很喜欢算 ...

  5. Python特技杂货铺

    Python3特技杂货铺 Python3实现汉字简体和繁体相互转换 Python3中通过fake_useragent生成随机UserAgent 修改线上配置文件 PyCharm中项目上传到GitHub ...

  6. 【python】-- 基于Django的杂货铺

    Django的杂货铺 此篇文章保存基于Django而实现的各种小功能示例 1.验证码 + Session 这个是在前端图片验证码的生成,再配合Session进行后端校验的功能示例 import ran ...

  7. uvm_misc——杂货铺(miscellaneous)

    uvm_misc 是个很有意思的文件夹,本质上就是个UVM的杂货铺,包含一些很重要的class, task, function, 但不知道给归类到哪儿,所以,uvm_misc就很好地承担了这个任务,几 ...

  8. 【转】算法杂货铺——k均值聚类(K-means)

    k均值聚类(K-means) 4.1.摘要 在前面的文章中,介绍了三种常见的分类算法.分类作为一种监督学习方法,要求必须事先明确知道各个类别的信息,并且断言所有待分类项都有一个类别与之对应.但是很多时 ...

  9. Python学习【第十篇】基础之杂货铺

    字符串格式化 Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存. 百分号方式: ...

  10. Python开发【杂货铺】:模块logging

    logging模块 很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式 ...

随机推荐

  1. maven导入jar包于本地库中

    在使用Maven的过程中,经常碰到有些jar包在中央仓库没有的情况.如果公司有私服,那么就把jar包安装到私服上.如果没有私服,那就把jar包安装到本地Maven仓库. 默认情况下,Maven本地库被 ...

  2. sql语句一些简单的用法

  3. MYSQL事务之Yii2.0商户提现

    我是一个半路出家的PHP程序员,到目前为止,不算在培训班学习的时间,已经写代码整整两年了.可能由于工作业务的原因,在这两年中我没有用到过MySQL事务.就在昨天有个关于支付宝转账的业务不得不使用MyS ...

  4. 2019.6.5 NOIP2014 day2 t2 寻找道路

    我竟然一个人敲了NOIP提高组的t2? 题目描述 在有向图 G 中,每条边的长度均为 1,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 路径上的所有点的出边所指向的点都直 ...

  5. Linux命令学习-history命令

    Linux中,history命令的作用是显示历史记录和执行过的命令. 查看历史所有命令执行记录 history 查看最近的13条历史执行命令 history 13 执行历史记录中,序号为123的命令 ...

  6. mongon库加上权限认证后,java程序连接异常

    现象: linux库中mongo库,用超级管理员添加了一个超级管理员,并加了认证. 通过spring等相关的配置文件获取Mongo数据库连接,抛出异常,如下: Caused by: org.sprin ...

  7. 一台服务器通过nginx配置多个域名(80端口)

    1. 问题描述 多个域名对应一个服务器,为了避免域名后增加端口号,两个域名都需要占用80端口号,使用nginx来进行配置. 2. 解决方案 目前项目中,线上正在使用(100%可用)多域名对应一个服务器 ...

  8. 数据库系统概念:SQL的数据类型与模式、授权

    public class DataBase { public static void main() { } } /* 4.5 SQL的数据类型与模式 4.5.1 SQL的日期与时间类型 SQL标准支持 ...

  9. python的ORM技巧记录

    # -*- coding:utf-8 -*- from sqlalchemy import create_engine, Column, Integer, String, ForeignKey, In ...

  10. python函数知识一 函数初始、定义与调用、返回值、参数和函数的好处+菜中菜

    第四章 函数 1.函数初识: def :关键字 -- 定义 函数名:和变量的定义方式一样 (): 用于参数传递,: 形参:函数的定义中()内的是形参 实参:调用的()内是实参 传参:调用时将实参传递给 ...