PHP 写入内容到文本文件并自动换行

回复

PHPzkbhj 回复了问题 • 1 人关注 • 1 个回复 • 17 次浏览 • 4 天前 • 来自相关话题

如何在命令行下直接执行PHP代码?

回复

PHPzkbhj 回复了问题 • 1 人关注 • 1 个回复 • 29 次浏览 • 2019-03-14 15:53 • 来自相关话题

如何在命令行下查看PHP扩展的版本?

回复

PHPzkbhj 回复了问题 • 1 人关注 • 1 个回复 • 23 次浏览 • 2019-03-14 15:52 • 来自相关话题

Goland IDE激活码

回复

GoLangzkbhj 回复了问题 • 1 人关注 • 1 个回复 • 71 次浏览 • 2019-03-04 15:54 • 来自相关话题

PHP怎么实现高德地图坐标和百度地图坐标之间的转换?

回复

PHPzkbhj 回复了问题 • 1 人关注 • 1 个回复 • 44 次浏览 • 2019-03-01 09:44 • 来自相关话题

Linux上如何查找文件里含有特定字符串?

回复

工具软件zkbhj 回复了问题 • 1 人关注 • 1 个回复 • 40 次浏览 • 2019-02-27 16:11 • 来自相关话题

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

GoLangzkbhj 发表了文章 • 0 个评论 • 40 次浏览 • 2019-02-25 10:13 • 来自相关话题

【Day4任务】
学习GO语言组织数据的容器:数组,切片,映射,列表以及结构体。
用学到的知识实现下面的题目:
设计一个程序,可以录入、读取和删除房源数据,房源数据包括房源名称,房源编号,房源价格(正整数),房源面积(浮点数),是否是首次出租(布尔类型),房源标签(新校区,进地铁,深呼吸,独立卫生间等不限)。
读取房源时通过房源编号读取信息。
打卡时间:2月24日(周日)23:30前
打卡形式:代码运行截图+代码源码
package main

import (
"fmt"
"os"

)

//定义房源结构体
type house struct {
houseCode string
price int
area float64
isNew bool
tags string
}

var (
houseCode string
price int
area float64
isNewName string
isNew bool
tags string
)

func help(){

fmt.Println("请按照提示信息录入房源数据,并根据房源编号显示房源数据:")

}

func line() {
fmt.Println("*********************************")

}

func menu() {
fmt.Println("*********************************")
fmt.Println("1、查询房源(Select)")
fmt.Println("2、新增房源(Insert)")
fmt.Println("3、删除房源(Delete)")
fmt.Println("4、帮助信息(Help)")
fmt.Println("5、统计房源数量(Counts)")
fmt.Println("6、退出程序(Exit)")
fmt.Println("*********************************")

}

func errorHappen(no int) {

switch no {

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

case 2:
fmt.Println("该房源编号已经被占用,请重新输入房源编号!更多帮助信息请使用参数'help'!")

case 3:
fmt.Println("您要查找的房源信息不存在,请验证房源编号准确性后再试!更多帮助信息请使用参数'help'!")

case 4:
fmt.Println("您要删除的房源数据不存在,请验证房源编号准确性后再试!更多帮助信息请使用参数'help'!")

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

func houseCounts(houses map[string]house) {
line()
fmt.Println("【房源数量】您已进入房源数量统计模式")
counts := len(houses)
fmt.Printf("当前已经录入了 %d 套房源信息!", counts)
line()

}

func deleteHouse(houses map[string]house) {
line()
fmt.Println("【删除数据】您已进入房源数据删除模式")
var exists bool
for {
fmt.Println("请输入你要删除的房源编号")
fmt.Scan(&houseCode,)
_, exists = houses[houseCode]
if !exists {
errorHappen(4)
continue
}
break
}
delete(houses, houseCode)
fmt.Printf("编号为%s的房源数据删除成功!", houseCode)

fmt.Println("成功退出房源删除模式,回到主程序!")
line()

}

func insertHouse(houses map[string]house) {
for {
line()
fmt.Println("【新增数据】您已进入新增房源数据模式:")
fmt.Println("1、请输入房源编号")
fmt.Scan(&houseCode,)

_, exit := houses[houseCode]
if exit {
errorHappen(2)
continue
}
break
}


fmt.Println("2、请输入房源价格(正整数,单位:元)")
fmt.Scan(&price,)
fmt.Println("3、请输入房源面积(保留1位小数,单位:平方米)")
fmt.Scan(&area,)

for {
fmt.Println("4、请输入房源是否为首次出租(是 否)")
fmt.Scan(&isNewName,)
if isNewName == "是" {
isNew = true
break
} else if isNewName == "否" {
isNew = false
break
} else {
errorHappen(1)
}
}
fmt.Println("5、请输入房源标签并用','隔开")
fmt.Scan(&tags,)


house := house{
houseCode,
price,
area,
isNew,
tags,
}

houses[house.houseCode] = house
fmt.Println("恭喜您!房源"+ house.houseCode +"的房源信息保存成功!")
fmt.Println("成功退出房源保存模式,回到主程序!")
line()

}

func readHouse(houses map[string]house) {
line()
fmt.Println("【查询数据】您已进入查询房源数据模式:")
var (
house house
exists bool
)
for {
fmt.Println("请输入你要查询的房源编号")
fmt.Scan(&houseCode,)
house, exists = houses[houseCode]
if !exists {
errorHappen(3)
continue
}
break
}

fmt.Println("已为您查询到该房源数据,具体房源信息如下:")
fmt.Println("【房源编号】" + house.houseCode)
fmt.Printf("【房源价格】%d 元/月\n", house.price)
fmt.Printf("【房源面积】 %f 平方米\n", house.area)
if house.isNew {
fmt.Println( "【首次出租】是")
} else {
fmt.Println( "【首次出租】否")
}

fmt.Println( "【房源标签】:" + house.tags)
fmt.Println("成功退出房源查询模式,回到主程序!")
line()


}



func main(){

const helpFlag = "help"
var action string



//定义map存储房源数据
houses := map[string]house{}

//进入主程序控制流程
fmt.Println("欢迎进入凯冰科技房源管理系统")
line()

for {
fmt.Println("当前可进行的操作如下,请输入对应的数字编号:")
menu()

fmt.Scan(&action,)

switch action {
case "1":
readHouse(houses)
continue

case "2":
insertHouse(houses)
continue

case "3":
deleteHouse(houses)
continue

case "4":
help()
continue

case "5":
houseCounts(houses)

case "6":
fmt.Println("您已成功退出程序运行!感谢您的使用!")
os.Exit(0)
default:
errorHappen(1)
}
}

}




















  查看全部
【Day4任务】
学习GO语言组织数据的容器:数组,切片,映射,列表以及结构体。
用学到的知识实现下面的题目:
设计一个程序,可以录入、读取和删除房源数据,房源数据包括房源名称,房源编号,房源价格(正整数),房源面积(浮点数),是否是首次出租(布尔类型),房源标签(新校区,进地铁,深呼吸,独立卫生间等不限)。
读取房源时通过房源编号读取信息。
打卡时间:2月24日(周日)23:30前
打卡形式:代码运行截图+代码源码
package main

import (
"fmt"
"os"

)

//定义房源结构体
type house struct {
houseCode string
price int
area float64
isNew bool
tags string
}

var (
houseCode string
price int
area float64
isNewName string
isNew bool
tags string
)

func help(){

fmt.Println("请按照提示信息录入房源数据,并根据房源编号显示房源数据:")

}

func line() {
fmt.Println("*********************************")

}

func menu() {
fmt.Println("*********************************")
fmt.Println("1、查询房源(Select)")
fmt.Println("2、新增房源(Insert)")
fmt.Println("3、删除房源(Delete)")
fmt.Println("4、帮助信息(Help)")
fmt.Println("5、统计房源数量(Counts)")
fmt.Println("6、退出程序(Exit)")
fmt.Println("*********************************")

}

func errorHappen(no int) {

switch no {

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

case 2:
fmt.Println("该房源编号已经被占用,请重新输入房源编号!更多帮助信息请使用参数'help'!")

case 3:
fmt.Println("您要查找的房源信息不存在,请验证房源编号准确性后再试!更多帮助信息请使用参数'help'!")

case 4:
fmt.Println("您要删除的房源数据不存在,请验证房源编号准确性后再试!更多帮助信息请使用参数'help'!")

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

func houseCounts(houses map[string]house) {
line()
fmt.Println("【房源数量】您已进入房源数量统计模式")
counts := len(houses)
fmt.Printf("当前已经录入了 %d 套房源信息!", counts)
line()

}

func deleteHouse(houses map[string]house) {
line()
fmt.Println("【删除数据】您已进入房源数据删除模式")
var exists bool
for {
fmt.Println("请输入你要删除的房源编号")
fmt.Scan(&houseCode,)
_, exists = houses[houseCode]
if !exists {
errorHappen(4)
continue
}
break
}
delete(houses, houseCode)
fmt.Printf("编号为%s的房源数据删除成功!", houseCode)

fmt.Println("成功退出房源删除模式,回到主程序!")
line()

}

func insertHouse(houses map[string]house) {
for {
line()
fmt.Println("【新增数据】您已进入新增房源数据模式:")
fmt.Println("1、请输入房源编号")
fmt.Scan(&houseCode,)

_, exit := houses[houseCode]
if exit {
errorHappen(2)
continue
}
break
}


fmt.Println("2、请输入房源价格(正整数,单位:元)")
fmt.Scan(&price,)
fmt.Println("3、请输入房源面积(保留1位小数,单位:平方米)")
fmt.Scan(&area,)

for {
fmt.Println("4、请输入房源是否为首次出租(是 否)")
fmt.Scan(&isNewName,)
if isNewName == "是" {
isNew = true
break
} else if isNewName == "否" {
isNew = false
break
} else {
errorHappen(1)
}
}
fmt.Println("5、请输入房源标签并用','隔开")
fmt.Scan(&tags,)


house := house{
houseCode,
price,
area,
isNew,
tags,
}

houses[house.houseCode] = house
fmt.Println("恭喜您!房源"+ house.houseCode +"的房源信息保存成功!")
fmt.Println("成功退出房源保存模式,回到主程序!")
line()

}

func readHouse(houses map[string]house) {
line()
fmt.Println("【查询数据】您已进入查询房源数据模式:")
var (
house house
exists bool
)
for {
fmt.Println("请输入你要查询的房源编号")
fmt.Scan(&houseCode,)
house, exists = houses[houseCode]
if !exists {
errorHappen(3)
continue
}
break
}

fmt.Println("已为您查询到该房源数据,具体房源信息如下:")
fmt.Println("【房源编号】" + house.houseCode)
fmt.Printf("【房源价格】%d 元/月\n", house.price)
fmt.Printf("【房源面积】 %f 平方米\n", house.area)
if house.isNew {
fmt.Println( "【首次出租】是")
} else {
fmt.Println( "【首次出租】否")
}

fmt.Println( "【房源标签】:" + house.tags)
fmt.Println("成功退出房源查询模式,回到主程序!")
line()


}



func main(){

const helpFlag = "help"
var action string



//定义map存储房源数据
houses := map[string]house{}

//进入主程序控制流程
fmt.Println("欢迎进入凯冰科技房源管理系统")
line()

for {
fmt.Println("当前可进行的操作如下,请输入对应的数字编号:")
menu()

fmt.Scan(&action,)

switch action {
case "1":
readHouse(houses)
continue

case "2":
insertHouse(houses)
continue

case "3":
deleteHouse(houses)
continue

case "4":
help()
continue

case "5":
houseCounts(houses)

case "6":
fmt.Println("您已成功退出程序运行!感谢您的使用!")
os.Exit(0)
default:
errorHappen(1)
}
}

}

微信图片_20190225101127.png


微信图片_20190225101132.png


微信图片_20190225101137.png


微信图片_20190225101147.png

 

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

GoLangzkbhj 发表了文章 • 0 个评论 • 38 次浏览 • 2019-02-25 10:11 • 来自相关话题

【Day3任务】
学习GO语言的流程控制和函数。
用学到的知识实现下面的题目:
要求用户输入一个年份和一个月份,判断(要求使用嵌套的if…else和switch分别判断一次)该年该月有多少天。
打卡时间:2月23日(周六)23:30前
打卡形式:代码运行截图+代码源码
package main

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

func help(){

fmt.Println("请依次按顺序输入年份和月份2个参数,用空格隔开,例如要查看2019年2月的天数,请输入:2019 2")

}

func errorHappen(no int) {

switch no {

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

case 2:
fmt.Println("月份为大于0小于13的正整数,您输入的月份不合法!更多帮助信息请使用参数'help'!")

case 3:
fmt.Println("年份为大于0的正整数,您输入的年份不合法!更多帮助信息请使用参数'help'!")

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

func isLeap(year int) int {

isLeap := 0
if year % 4 == 0 && year % 100 != 0 {
isLeap = 1
}

return isLeap

}

func main(){

const helpFlag = "help"


args := os.Args

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

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

}




//获取数据
year, _ := strconv.Atoi(args[1])
month := args[2]
days := 0

//判断月份合法
m,_ := strconv.Atoi(args[2])
if m < 0 || m >12{
errorHappen(2)
os.Exit(0)
}


//判断年份合法
if year < 0 {
errorHappen(3)
os.Exit(0)
}

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

case "1","3","5","7","8","10","12":{
days = 31

}

case "4","6","9","11":{
days = 30
}

case "2" : {
if 1 == isLeap(year) {
days = 29
}else{
days = 28
}

}

default:
help()

}

//打印结果
fmt.Printf("%d年%s月一共有%d天!",year,month,days)

}





  查看全部
【Day3任务】
学习GO语言的流程控制和函数。
用学到的知识实现下面的题目:
要求用户输入一个年份和一个月份,判断(要求使用嵌套的if…else和switch分别判断一次)该年该月有多少天。
打卡时间:2月23日(周六)23:30前
打卡形式:代码运行截图+代码源码
package main

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

func help(){

fmt.Println("请依次按顺序输入年份和月份2个参数,用空格隔开,例如要查看2019年2月的天数,请输入:2019 2")

}

func errorHappen(no int) {

switch no {

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

case 2:
fmt.Println("月份为大于0小于13的正整数,您输入的月份不合法!更多帮助信息请使用参数'help'!")

case 3:
fmt.Println("年份为大于0的正整数,您输入的年份不合法!更多帮助信息请使用参数'help'!")

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

func isLeap(year int) int {

isLeap := 0
if year % 4 == 0 && year % 100 != 0 {
isLeap = 1
}

return isLeap

}

func main(){

const helpFlag = "help"


args := os.Args

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

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

}




//获取数据
year, _ := strconv.Atoi(args[1])
month := args[2]
days := 0

//判断月份合法
m,_ := strconv.Atoi(args[2])
if m < 0 || m >12{
errorHappen(2)
os.Exit(0)
}


//判断年份合法
if year < 0 {
errorHappen(3)
os.Exit(0)
}

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

case "1","3","5","7","8","10","12":{
days = 31

}

case "4","6","9","11":{
days = 30
}

case "2" : {
if 1 == isLeap(year) {
days = 29
}else{
days = 28
}

}

default:
help()

}

//打印结果
fmt.Printf("%d年%s月一共有%d天!",year,month,days)

}

微信图片_20190225101021.png

 

常用的GO语言内部包解析

GoLangzkbhj 发表了文章 • 0 个评论 • 32 次浏览 • 2019-02-25 10:08 • 来自相关话题

一、Go 标准库可以大致按其中库的功能进行以下粗略的分类


输入输出:这个分类包括二进制以及文本格式在屏幕、键盘、文件以及其他设备上的输
入输出等,比如二进制文件的读写。对应于此分类的包有bufio、 fmt、 io、 log和flag
等,其中 flag 用于处理命令行参数。

文本处理:这个分类包括字符串和文本内容的处理,比如字符编码转换等。对应于此分
类的包有encoding、 bytes、 strings、 strconv、 text、 mime、 unicode、 regexp、
index和path等。其中path用于处理路径字符串。

网络:这个分类包括开发网络程序所需要的包,比如Socket编程和网站开发等。对应于此
分类的包有: net、 http和expvar等。

系统:这个分类包含对系统功能的封装,比如对操作系统的交互以及原子性操作等。对
应于此分类的包有os、 syscall、 sync、 time和unsafe等。

数据结构与算法:对应于此分类的包有math、 sort、 container、 crypto、 hash、
archive、 compress和image等。因为image包里提供的图像编解码都是算法,所以也
归入此类。

运行时:对应于此分类的包有: runtime、 reflect和go等。

 二、常用包介绍
这里介绍Go语言标准库里使用频率相对较高的一些包 (如下):
 
fmt。它实现了格式化的输入输出操作,其中的fmt.Printf()和fmt.Println()是开发者使用最为频繁的函数。io。它实现了一系列非平台相关的IO相关接口和实现,比如提供了对os中系统相关的IO功能的封装。我们在进行流式读写(比如读写文件)时,通常会用到该包。bufio。它在io的基础上提供了缓存功能。在具备了缓存功能后, bufio可以比较方便地提供ReadLine之类的操作。strconv。本包提供字符串与基本数据类型互转的能力。os。本包提供了对操作系统功能的非平台相关访问接口。接口为Unix风格。提供的功能包括文件操作、进程管理、信号和用户账号等。sync。它提供了基本的同步原语。在多个goroutine访问共享资源的时候,需要使用sync中提供的锁机制。flag。它提供命令行参数的规则定义和传入参数解析的功能。绝大部分的命令行程序都需要用到这个包。encoding/json。 JSON目前广泛用做网络程序中的通信格式。本包提供了对JSON的基本支持,比如从一个对象序列化为JSON字符串,或者从JSON字符串反序列化出一个具体的对象等。http。它是一个强大而易用的包,也是Golang语言是一门“互联网语言”的最好佐证。通过http包,只需要数行代码,即可实现一个爬虫或者一个Web服务器,这在传统语言中是无法想象的。
 
三、完整包列表













































 
  查看全部
一、Go 标准库可以大致按其中库的功能进行以下粗略的分类



输入输出:这个分类包括二进制以及文本格式在屏幕、键盘、文件以及其他设备上的输
入输出等,比如二进制文件的读写。对应于此分类的包有bufio、 fmt、 io、 log和flag
等,其中 flag 用于处理命令行参数。

文本处理:这个分类包括字符串和文本内容的处理,比如字符编码转换等。对应于此分
类的包有encoding、 bytes、 strings、 strconv、 text、 mime、 unicode、 regexp、
index和path等。其中path用于处理路径字符串。

网络:这个分类包括开发网络程序所需要的包,比如Socket编程和网站开发等。对应于此
分类的包有: net、 http和expvar等。

系统:这个分类包含对系统功能的封装,比如对操作系统的交互以及原子性操作等。对
应于此分类的包有os、 syscall、 sync、 time和unsafe等。

数据结构与算法:对应于此分类的包有math、 sort、 container、 crypto、 hash、
archive、 compress和image等。因为image包里提供的图像编解码都是算法,所以也
归入此类。

运行时:对应于此分类的包有: runtime、 reflect和go等。


 二、常用包介绍
这里介绍Go语言标准库里使用频率相对较高的一些包 (如下):
 
  1. fmt。它实现了格式化的输入输出操作,其中的fmt.Printf()和fmt.Println()是开发者使用最为频繁的函数。
  2. io。它实现了一系列非平台相关的IO相关接口和实现,比如提供了对os中系统相关的IO功能的封装。我们在进行流式读写(比如读写文件)时,通常会用到该包。
  3. bufio。它在io的基础上提供了缓存功能。在具备了缓存功能后, bufio可以比较方便地提供ReadLine之类的操作。
  4. strconv。本包提供字符串与基本数据类型互转的能力。
  5. os。本包提供了对操作系统功能的非平台相关访问接口。接口为Unix风格。提供的功能包括文件操作、进程管理、信号和用户账号等。
  6. sync。它提供了基本的同步原语。在多个goroutine访问共享资源的时候,需要使用sync中提供的锁机制。
  7. flag。它提供命令行参数的规则定义和传入参数解析的功能。绝大部分的命令行程序都需要用到这个包。
  8. encoding/json。 JSON目前广泛用做网络程序中的通信格式。本包提供了对JSON的基本支持,比如从一个对象序列化为JSON字符串,或者从JSON字符串反序列化出一个具体的对象等。
  9. http。它是一个强大而易用的包,也是Golang语言是一门“互联网语言”的最好佐证。通过http包,只需要数行代码,即可实现一个爬虫或者一个Web服务器,这在传统语言中是无法想象的。

 
三、完整包列表

20181122133038383.png


20181122133121371.png


20181122133138459.png


20181122133154889.png


20181122133210116.png


20181122133225130.png


20181122133237835.png


20181122133316248.png


20181122133339570.png

 
 

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

GoLangzkbhj 发表了文章 • 0 个评论 • 37 次浏览 • 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