#自学课程#《放学你别走第一季之GO语言学习》Day2打卡

GoLangzkbhj 发表了文章 • 0 个评论 • 112 次浏览 • 2019-02-22 14:54 • 来自相关话题

【Day2任务】
学习GO语言的基础数据类型,命名,变量,常量,格式化输入输出,类型转换及别名;运算符。
用学到的知识实现下面的题目:
用Go语言实现一个计算器程序,实现两个操作数的加、减、乘、除四种基本类型的操作,并可以指定最终计算结果的数据类型。
打卡时间:后天(2月22日)18:30
打卡形式:代码运行截图+现场面对面讨论package main

import (
"fmt"
"strconv"
"os"
)

func help(){

fmt.Println("请依次按顺序输入运算方法(add,sub,mul,div),数字1,数字2这三个参数,用空格隔开")

}

func errorHappen(no int) {

switch no {

case 1:
fmt.Println("参数错误!更多帮助信息请使用参数'help'!")

case 2:
fmt.Println("除法计算时,除数不能为0!更多帮助信息请使用参数'help'!")

default:
fmt.Println("未知错误!更多帮助信息请使用参数'help'!")
}
}

func main(){

const HELP_FLAG = "help"
const PRECISION = 2


args := os.Args

//输入帮助符号
if len(args) == 2 && HELP_FLAG == args[1] {
help()
os.Exit(0)
}

//判断参数传递是否正确
if len(args) < 3 || args == nil {
errorHappen(1)
os.Exit(0)

}


//获取计算方法
operator := args[1]
result := 0.0

//使用switch case 实现流程控制
switch operator {

case "add":{

number1, error1 := strconv.ParseFloat(args[2], PRECISION)
number2, error2 := strconv.ParseFloat(args[3], PRECISION)

if error1 == nil && error2 == nil {
result = number1 + number2

}

}


case "sub":{

number1, error1 := strconv.ParseFloat(args[2], PRECISION)
number2, error2 := strconv.ParseFloat(args[3], PRECISION)

if error1 == nil && error2 == nil {
result = number1 - number2

}

}

case "mul":{

number1, error1 := strconv.ParseFloat(args[2], PRECISION)
number2, error2 := strconv.ParseFloat(args[3], PRECISION)

if error1 == nil && error2 == nil {
result = number1 * number2

}

}

case "div":{

//判断除数是否为0
if "0" == args[3] {
errorHappen(2)
os.Exit(0)
}

number1, error1 := strconv.ParseFloat(args[2], PRECISION)
number2, error2 := strconv.ParseFloat(args[3], PRECISION)

if error1 == nil && error2 == nil {
result = number1 / number2

}

}

default:
help()

}

//打印结果
fmt.Println("计算结果为:",result)

}





  查看全部
【Day2任务】
学习GO语言的基础数据类型,命名,变量,常量,格式化输入输出,类型转换及别名;运算符。
用学到的知识实现下面的题目:
用Go语言实现一个计算器程序,实现两个操作数的加、减、乘、除四种基本类型的操作,并可以指定最终计算结果的数据类型。
打卡时间:后天(2月22日)18:30
打卡形式:代码运行截图+现场面对面讨论
package main

import (
"fmt"
"strconv"
"os"
)

func help(){

fmt.Println("请依次按顺序输入运算方法(add,sub,mul,div),数字1,数字2这三个参数,用空格隔开")

}

func errorHappen(no int) {

switch no {

case 1:
fmt.Println("参数错误!更多帮助信息请使用参数'help'!")

case 2:
fmt.Println("除法计算时,除数不能为0!更多帮助信息请使用参数'help'!")

default:
fmt.Println("未知错误!更多帮助信息请使用参数'help'!")
}
}

func main(){

const HELP_FLAG = "help"
const PRECISION = 2


args := os.Args

//输入帮助符号
if len(args) == 2 && HELP_FLAG == args[1] {
help()
os.Exit(0)
}

//判断参数传递是否正确
if len(args) < 3 || args == nil {
errorHappen(1)
os.Exit(0)

}


//获取计算方法
operator := args[1]
result := 0.0

//使用switch case 实现流程控制
switch operator {

case "add":{

number1, error1 := strconv.ParseFloat(args[2], PRECISION)
number2, error2 := strconv.ParseFloat(args[3], PRECISION)

if error1 == nil && error2 == nil {
result = number1 + number2

}

}


case "sub":{

number1, error1 := strconv.ParseFloat(args[2], PRECISION)
number2, error2 := strconv.ParseFloat(args[3], PRECISION)

if error1 == nil && error2 == nil {
result = number1 - number2

}

}

case "mul":{

number1, error1 := strconv.ParseFloat(args[2], PRECISION)
number2, error2 := strconv.ParseFloat(args[3], PRECISION)

if error1 == nil && error2 == nil {
result = number1 * number2

}

}

case "div":{

//判断除数是否为0
if "0" == args[3] {
errorHappen(2)
os.Exit(0)
}

number1, error1 := strconv.ParseFloat(args[2], PRECISION)
number2, error2 := strconv.ParseFloat(args[3], PRECISION)

if error1 == nil && error2 == nil {
result = number1 / number2

}

}

default:
help()

}

//打印结果
fmt.Println("计算结果为:",result)

}

微信图片_20190222145306.png

 

#自学课程#《放学你别走第一季之GO语言学习》Day1打卡

GoLangzkbhj 发表了文章 • 0 个评论 • 102 次浏览 • 2019-02-22 14:53 • 来自相关话题

【Day1任务】
熟悉Go编程语言,搭建运行环境,选择适合自己的IDE,并写出自己的第一个GO程序(hello world!),并用命令形式成功运行。
打卡时间:明天(2月21日)18:30
打卡形式:程序运行截图+现场面对面讨论package main

import "fmt"

func main(){
fmt.Printf("%s\n","Hello wolrd!This is my first go program!I'm ZhengKai!")
} 查看全部
【Day1任务】
熟悉Go编程语言,搭建运行环境,选择适合自己的IDE,并写出自己的第一个GO程序(hello world!),并用命令形式成功运行。
打卡时间:明天(2月21日)18:30
打卡形式:程序运行截图+现场面对面讨论
package main

import "fmt"

func main(){
fmt.Printf("%s\n","Hello wolrd!This is my first go program!I'm ZhengKai!")
}

如何让PHP程序支持使用MsgPack方式序列化数据?

回复

PHPzkbhj 回复了问题 • 1 人关注 • 1 个回复 • 232 次浏览 • 2019-01-24 17:13 • 来自相关话题

如何查找yum方式安装的软件安装到哪个目录了?

回复

工具软件zkbhj 回复了问题 • 1 人关注 • 1 个回复 • 204 次浏览 • 2019-01-23 11:50 • 来自相关话题

两种数据序列化方案性能对比:Msgpack和Json

专业名词zkbhj 发表了文章 • 0 个评论 • 343 次浏览 • 2019-01-23 11:00 • 来自相关话题

    MessagePack(简写msgpack)是一个高效的二进制序列化格式。它让你像JSON一样可以在各种语言之间交换数据。但是它比JSON更快、更小。小的整数会被编码成一个字节,短的字符串仅仅只需要比它的长度多一字节的大小。之前在lua脚本中使用过msgpack,因为有大量数据要入redis,而考虑到内存开销,使用了压缩比更大的msgpack。因为msgpack是一个二进制格式,所以没法像json后的字符串一样可直观地查看数据。
 
    msgpack的官网地址:http://pecl.php.net/package/msgpack 里面有各PHP版本windows下的dll扩展,也有源码包供linux下编译,所以像lua这样的脚本语言可以直接使用。msgpack和json_encode都是序列化存储数据,那么msgpack的效率与json的效率相比的话到底怎么样呢?看下面这个简单的对比程序:
//msgpack与json的性能对比
//1,数据拼凑
$data =array(
'youku' => '优酷视频', 'pptv' => 'PPTV', 'sohu' => '搜狐视频', 'qiyi' => '奇艺视频', 'letv' => '乐视视频',
'tencent' => '腾讯视频', 'sina' => '新浪视频', 'tudou' => '土豆视频', 'm1905' => '电影网', 'cntv' => 'CNTV',
);
$data = json_encode($data);
$newArr = array();
for($i = 1; $i<=500; $i++) //修改此处$i的最大值以控制数据的大小
{
$newArr [] =$data;
}

//数据大小对比
$msg_data = msgpack_pack($newArr);
echo "使用msgpack处理后大小:".strlen($msg_data);
$json_data = json_encode($newArr);
echo "<br>使用json处理后大小:".strlen($json_data);
echo "<br>msgpack处理后大小与json处理后大小比为1:".round((strlen($json_data)/strlen($msg_data)),2);

//计算1000次msgpack压缩用时
$time = microtime(true);
for($i = 1; $i<1000; $i++){
msgpack_pack($newArr);
}
echo '<br>1000次msgpack操作用时:'.(microtime(true)- $time);

//计算1000次json_encode压缩用时
$time1 = microtime(true);
for($i = 1; $i<1000; $i++){
json_encode($newArr);
}
echo '<br>1000次json_encode操作用时:'.(microtime(true)- $time1); 程序过程没什么可说的了,就是先拼凑了一个数组数据(用$i来控制它的大小)。然后对比对这个数组的处理用时,如果$i很小,假如为2,得到的结果如下:
使用msgpack处理后大小:609
使用json处理后大小:751
msgpack处理后大小与json处理后大小比为1:1.23
1000次msgpack操作用时:0.05400013923645
1000次json_encode操作用时:0.03600001335144 从上面的结果来看,msg_pack的效率根本不如json_encode的效率,只是msg_pack的压缩率大些而已。而当我把$i改大点,比如改到500后,结果就完全反转了:
使用msgpack处理后大小:152003
使用json处理后大小:187501
msgpack处理后大小与json处理后大小比为1:1.23
1000次msgpack操作用时:0.68599987030029
1000次json_encode操作用时:2.2000000476837     经过多次测试,最后做两个总结如下:    1,msg_pack的压缩效率比json_encode大是毫无疑问,但压缩比我这只看到提高了20%左右,可能和数据类型有关系,这个值只供参考。


    2,在数据量较小的情况下,msg_pack的效率不如json_encode.而在数据量较大时,msg_pack的效率就远大于json_encode。

    3,和数据序列化一样,对数据的反序列化上,也是数量量大时,msg_unpack的效率远大于json_decode.

    下面是进行反序列化时的结果:
1000次msgpack操作用时:0.80399990081787
1000次json_encode操作用时:2.6389999389648 查看全部
    MessagePack(简写msgpack)是一个高效的二进制序列化格式。它让你像JSON一样可以在各种语言之间交换数据。但是它比JSON更快、更小。小的整数会被编码成一个字节,短的字符串仅仅只需要比它的长度多一字节的大小。之前在lua脚本中使用过msgpack,因为有大量数据要入redis,而考虑到内存开销,使用了压缩比更大的msgpack。因为msgpack是一个二进制格式,所以没法像json后的字符串一样可直观地查看数据。
 
    msgpack的官网地址:http://pecl.php.net/package/msgpack 里面有各PHP版本windows下的dll扩展,也有源码包供linux下编译,所以像lua这样的脚本语言可以直接使用。msgpack和json_encode都是序列化存储数据,那么msgpack的效率与json的效率相比的话到底怎么样呢?看下面这个简单的对比程序:
//msgpack与json的性能对比
//1,数据拼凑
$data =array(
'youku' => '优酷视频', 'pptv' => 'PPTV', 'sohu' => '搜狐视频', 'qiyi' => '奇艺视频', 'letv' => '乐视视频',
'tencent' => '腾讯视频', 'sina' => '新浪视频', 'tudou' => '土豆视频', 'm1905' => '电影网', 'cntv' => 'CNTV',
);
$data = json_encode($data);
$newArr = array();
for($i = 1; $i<=500; $i++) //修改此处$i的最大值以控制数据的大小
{
$newArr [] =$data;
}

//数据大小对比
$msg_data = msgpack_pack($newArr);
echo "使用msgpack处理后大小:".strlen($msg_data);
$json_data = json_encode($newArr);
echo "<br>使用json处理后大小:".strlen($json_data);
echo "<br>msgpack处理后大小与json处理后大小比为1:".round((strlen($json_data)/strlen($msg_data)),2);

//计算1000次msgpack压缩用时
$time = microtime(true);
for($i = 1; $i<1000; $i++){
msgpack_pack($newArr);
}
echo '<br>1000次msgpack操作用时:'.(microtime(true)- $time);

//计算1000次json_encode压缩用时
$time1 = microtime(true);
for($i = 1; $i<1000; $i++){
json_encode($newArr);
}
echo '<br>1000次json_encode操作用时:'.(microtime(true)- $time1);
 程序过程没什么可说的了,就是先拼凑了一个数组数据(用$i来控制它的大小)。然后对比对这个数组的处理用时,如果$i很小,假如为2,得到的结果如下:
使用msgpack处理后大小:609
使用json处理后大小:751
msgpack处理后大小与json处理后大小比为1:1.23
1000次msgpack操作用时:0.05400013923645
1000次json_encode操作用时:0.03600001335144
 从上面的结果来看,msg_pack的效率根本不如json_encode的效率,只是msg_pack的压缩率大些而已。而当我把$i改大点,比如改到500后,结果就完全反转了:
使用msgpack处理后大小:152003
使用json处理后大小:187501
msgpack处理后大小与json处理后大小比为1:1.23
1000次msgpack操作用时:0.68599987030029
1000次json_encode操作用时:2.2000000476837
     经过多次测试,最后做两个总结如下:    1,msg_pack的压缩效率比json_encode大是毫无疑问,但压缩比我这只看到提高了20%左右,可能和数据类型有关系,这个值只供参考。


    2,在数据量较小的情况下,msg_pack的效率不如json_encode.而在数据量较大时,msg_pack的效率就远大于json_encode。

    3,和数据序列化一样,对数据的反序列化上,也是数量量大时,msg_unpack的效率远大于json_decode.

    下面是进行反序列化时的结果:
1000次msgpack操作用时:0.80399990081787
1000次json_encode操作用时:2.6389999389648

Yii2框架如何重写POST或者GET参数?

回复

Yii框架zkbhj 回复了问题 • 1 人关注 • 1 个回复 • 193 次浏览 • 2019-01-11 16:08 • 来自相关话题

MySql如何将13位的时间戳展示成易读格式?

回复

数据库zkbhj 回复了问题 • 1 人关注 • 1 个回复 • 225 次浏览 • 2019-01-10 19:20 • 来自相关话题

PHP如何计算两个经纬度地理位置之间的距离?

回复

PHPzkbhj 回复了问题 • 1 人关注 • 1 个回复 • 245 次浏览 • 2019-01-04 19:24 • 来自相关话题

PHP如何在数据的头部插入新元素?

回复

PHPzkbhj 回复了问题 • 1 人关注 • 1 个回复 • 194 次浏览 • 2018-12-19 17:50 • 来自相关话题

PHP如何在数组特定位置处插入新元素?

回复

PHPzkbhj 回复了问题 • 1 人关注 • 1 个回复 • 201 次浏览 • 2018-12-19 17:43 • 来自相关话题