1549469775 5 years ago
parent
commit
032b2091f8
  1. 15
      .vscode/launch.json
  2. BIN
      __debug_bin
  3. 93
      db/index.go
  4. 80
      demo/fuck.go
  5. 49
      demo/loadjson.go
  6. 1
      demo/readme
  7. BIN
      go-demo.exe
  8. 207
      main.go
  9. 10
      path/path.go
  10. 202
      pk10/index.go
  11. 7
      pk10/interface.go
  12. 22
      pk10/var.go
  13. 104
      readme.md
  14. 14
      runtime/runtime.go

15
.vscode/launch.json

@ -0,0 +1,15 @@
{
// 使 IntelliSense
//
// 访: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [{
"name": "Launch",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${fileDirname}/../main.go",
"env": {},
"args": []
}]
}

BIN
__debug_bin

Binary file not shown.

93
db/index.go

@ -0,0 +1,93 @@
package db
import (
_"github.com/go-sql-driver/mysql"
"database/sql"
"fmt"
"strings"
)
// 教程
// https://www.jianshu.com/p/ee87e989f149
//数据库配置
const (
userName = "go_test"
password = "R4MSD57Gmr42CRTw"
ip = "27.102.70.190"
port = "3306"
dbName = "go_test"
)
//Db数据库连接池
var DB *sql.DB
//注意方法名大写,就是public
func InitDB() bool {
//构建连接:"用户名:密码@tcp(IP:端口)/数据库?charset=utf8"
path := strings.Join([]string{userName, ":", password, "@tcp(",ip, ":", port, ")/", dbName, "?charset=utf8"}, "")
//打开数据库,前者是驱动名,所以要导入: _ "github.com/go-sql-driver/mysql"
DB, _ = sql.Open("mysql", path)
//设置数据库最大连接数
DB.SetConnMaxLifetime(100)
//设置上数据库最大闲置连接数
DB.SetMaxIdleConns(10)
//验证连接
if err := DB.Ping(); err != nil{
fmt.Println("opon database fail",err)
return false
}
fmt.Println("connnect success")
return true
}
type User struct {
Id int
UserName string
Password string
}
func InsertUser(user User) (bool){
//开启事务
tx, err := DB.Begin()
if err != nil{
fmt.Println("tx fail")
return false
}
//准备sql语句
stmt, err := tx.Prepare("INSERT INTO nk_user (`name`, `password`) VALUES (?, ?)")
if err != nil{
fmt.Println("Prepare fail")
return false
}
//将参数传递到sql语句中并且执行
res, err := stmt.Exec(user.UserName, user.Password)
if err != nil{
fmt.Println("Exec fail")
return false
}
//将事务提交
tx.Commit()
//获得上一个插入自增的id
fmt.Println(res.LastInsertId())
return true
}
func SelectAllUser() ([]User) {
//执行查询语句
rows, err := DB.Query("SELECT * from nk_user")
if err != nil{
fmt.Println("查询出错了")
}
var users []User
//循环读取结果
for rows.Next(){
var user User
//将每一行的结果都赋值到一个user对象中
err := rows.Scan(&user.Id, &user.UserName, &user.Password)
if err != nil {
fmt.Println("rows fail")
}
//将user追加到users的这个数组中
users = append(users, user)
}
return users
}

80
demo/fuck.go

@ -0,0 +1,80 @@
// 包名
package main
import (
"fmt"
"io/ioutil"
"encoding/json"
"./path"
"./runtime"
"time"
"./pk10"
"./db"
)
func readJSON(file string) []map[string][]interface{} {
log := fmt.Println
jsondata, _ := ioutil.ReadFile(file)
var user []map[string][]interface{}
err := json.Unmarshal(jsondata, &user)
if err != nil {
log(err)
return nil
}
return user
}
// https://studygolang.com/pkgdoc
func main() {
log := fmt.Println
pk10.Log()
var isConnect bool= db.InitDB()
if isConnect {
// define a user data
var user db.User
user.UserName="dsad"
user.Password="123"
// insert user data
runtime.Time("插入一个User数据",func () {
db.InsertUser(user)
})
log("fuck")
var allUsers []db.User
runtime.Time("查询所有用户",func () {
allUsers = db.SelectAllUser()
})
// 这么取出结构体的值
log(allUsers[0].Id)
return
}else {
log("数据库未连接,其实不用这么判断,但是任性")
return
}
//we are test now
// pk10.Init()
var allArray []map[string][]interface{}
runtime.Time("加载JSON数据",func () {
var parhArray = path.Output(".\\data")
for _, filePath := range parhArray {
str := path.Abs("./"+filePath)
log("正在读取:",str)
oneData := readJSON(str)
if oneData != nil {
for _, item := range oneData {
allArray = append(allArray,item)
}
}
}
log("长度: ", len(allArray))
runtime.Time("遍历所有的数据",func () {
sum := 0
for _, item := range allArray {
if item!=nil {
sum++
}
time.Sleep(2)
}
log("长度: ", sum)
})
})
}

49
demo/loadjson.go

@ -0,0 +1,49 @@
package main
import (
"fmt"
"io/ioutil"
"encoding/json"
"../path"
"time"
)
func readJSON(file string) []map[string][]interface{} {
log := fmt.Println
jsondata, _ := ioutil.ReadFile(file)
var user []map[string][]interface{}
err := json.Unmarshal(jsondata, &user)
if err != nil {
log(err)
return nil
}
return user
}
func main() {
t1 := time.Now()
var allArray []map[string][]interface{}
var parhArray = path.Output(".\\data")
for _, filePath := range parhArray {
str := path.Abs("./"+filePath)
fmt.Println("正在读取:",str)
oneData := readJSON(str)
if oneData != nil {
for _, item := range oneData {
allArray = append(allArray,item)
}
}
}
runAllt := time.Now()
sum := 0
for _, item := range allArray {
if item!=nil {
sum++
}
}
fmt.Println("长度: ", sum)
runAll := time.Since(runAllt)
fmt.Println("该程序运行的时长: ", runAll)
fmt.Println(allArray[0])
elapsed := time.Since(t1)
fmt.Println("该程序运行的时长: ", elapsed)
}

1
demo/readme

@ -0,0 +1 @@
用作demo程序展示,不做任何用途

BIN
go-demo.exe

Binary file not shown.

207
main.go

@ -3,27 +3,204 @@ package main
import (
"fmt"
"./sm"
"io/ioutil"
"encoding/json"
"./path"
fuck "./sm/fuck"
"./runtime"
"strconv"
// "time"
// "./pk10"
// "./db"
)
func main() {
fmt.Println(fuck.Add(1,2))
fmt.Println(sm.Addd(1,2))
fmt.Println("Hello, World!")
// 要使用这个方法的话需要一起编译,先用go build .
// test()
var parhArray = path.Output("./data")
fmt.Println(parhArray[0])
str := "./"+parhArray[0]
jsondata, _ := ioutil.ReadFile(str)
var user []map[string][]int
func readJSON(file string) []map[string][]interface{} {
log := fmt.Println
jsondata, _ := ioutil.ReadFile(file)
var user []map[string][]interface{}
err := json.Unmarshal(jsondata, &user)
if err != nil {
fmt.Println(err)
log(err)
return nil
}
return user
}
// 万能类型转数字。只能先转float64,然后转int
func w2int(array []interface{}) []int{
var res []int
for _, val := range array {
var temp float64= val.(float64)
res=append(res,int(temp))
}
return res
}
// https://studygolang.com/pkgdoc
func main() {
log := fmt.Println
log(str2arr("asdasd"))
open()
return
var allArray []map[string][]interface{}
runtime.Time("加载JSON数据",func () {
// 遍历文件夹
var parhArray = path.Output(".\\data")
// 只用一个文价测试
str := path.Abs("./"+parhArray[10])
log("正在读取:",str)
oneData := readJSON(str)
if oneData == nil {
log("load failed")
return
}
for _, item := range oneData {
allArray = append(allArray,item)
}
log("长度: ", len(allArray))
host := 0
runtime.Time("遍历所有的数据",func () {
for _, item := range allArray {
// var mon int
// 定义存放开奖类型的数组
var niu_list []int = w2int(item["type"][0:6])
// 庄家的牛
var host_niu int = niu_list[host]
// 庄家为牛牛时大于其他的牛
if host_niu == 0 {
host_niu = 11
}
// 赢家的字符串
var win string = ""
for i := 0; i < len(niu_list); i++ {
if i!=host {
if niu_list[i] > host_niu{
win += strconv.Itoa(i)
}
}
}
log(win)
// 因为item["type"][7]刚取出来时万能类型,先转换成[]interface{},在转[]int
// var alltype = w2int(item["type"][7].([]interface{}))
// log(alltype)
break
}
})
})
}
// https://blog.csdn.net/u010412301/article/details/83894740
func open(host_v int,downmoney_v []int,cs float64, downpei_v []int, winner_v string) {
var downmoney = []int{0,0,0,0,0,0}
var host string= strconv.Itoa(0)
// 定义所有玩家
var origin []string = []string{"0","1","2","3","4","5"}
// 删除庄家位置
delOne(origin,host)
var winner string = "123"
var lose string = ""
for _, val := range origin {
var index int = -1
for i := 0; i < len(winner); i++ {
// 此时winner[i]是byte类型,不能比较,需要转化成字符串
if (val == string(winner[i])) {
index = i
break
}
}
if index==-1 {
lose += val
}
}
var temp = map[string]string{"w":winner,"l":lose}
fmt.Println(winner)
fmt.Println(lose)
host_str,_ := strconv.Atoi(host)
fmt.Println(getWin(downmoney,host_str,temp,[]int{1,1,1,1,1,1}))
}
func getWin(down []int,host int,wl map[string]string,pei []int) (int,map[string]string,int,int) {
var sum = 0
var hostsum = down[host];
var bate = [6]int{0, 0, 0, 0, 0, 0}
for i, val := range down {
if i!= host {
sum+=val
if sum!=0 {
bate[i] = hostsum / sum;
}else{
bate[i] = 0
}
}else{
bate[i] = -1;
}
}
var win = [6]int{0, 0, 0, 0, 0, 0}
var warr = str2arrInt(wl["w"])
var cal = 0
var summoney = 0
var money = hostsum
for _, val := range warr {
win[val] = down[val] * bate[val] * pei[val]
money += down[val] * bate[val] * pei[val]
cal += down[val] * bate[val] * pei[val]
var intdown = down[val] * bate[val]
if intdown<0 {
summoney -= intdown
}else{
summoney += intdown
}
}
var larr = str2arrInt(wl["l"])
for _, val := range larr {
win[val] = -down[val] * bate[val] * 1 * pei[val];
money -= down[val] * bate[val] * pei[val]
var intdown = down[val] * bate[val]
if intdown<0 {
summoney -= intdown
}else{
summoney += intdown
}
}
var m = money + win[0] + win[1] + win[2] + win[3] + win[4] + win[5]
var v = wl
return m,v,cal,summoney
// fmt.Println(warr)
// fmt.Println(larr)
// var win = [0, 0, 0, 0, 0, 0]
}
func str2arrInt(arr string) []int {
var res []int
for _, val := range arr {
valint,_ := strconv.Atoi(string(val))
res = append(res,valint)
}
return res
}
func str2arr(arr string) []string {
var res []string
for _, val := range arr {
res = append(res,string(val))
}
return res
}
func findOne(array []string,value string) int {
var res int = -1
for i := 0; i < len(array); i++ {
if value == array[i] {
res = i
}
}
return res
}
func delOne(array []string,value string) []string {
var res []string
for i := 0; i < len(array); i++ {
if value != array[i] {
res = append(res,array[i])
}
}
fmt.Println(user[2]["one"])
return res
}

10
path/path.go

@ -24,3 +24,13 @@ func Output(path string,) []string {
}
return array
}
/*
*/
func Abs(path string ) string {
var absolutePath,err = filepath.Abs(path)
if err!=nil {
fmt.Printf("err:", err)
}
return absolutePath
}

202
pk10/index.go

@ -0,0 +1,202 @@
package pk10
import (
"fmt"
)
func Log() {
fmt.Println("dsa")
}
/*作为包被导入时会自动自行的函数*/
func init() {
keys = [][]int{
// 第一球:
// 单双
[]int{1,2},
// 大小
[]int{3,4},
// 龙虎
[]int{5,6},
// 第二球:
// 单双
[]int{7,8},
// 大小
[]int{9,10},
// 龙虎
[]int{11,12},
// 第三球:
// 单双
[]int{13,14},
// 大小
[]int{15,16},
// 龙虎
[]int{17,18},
// 第四球:
// 单双
[]int{19,20},
// 大小
[]int{21,22},
// 龙虎
[]int{23,24},
// 第五球:
// 单双
[]int{25,26},
// 大小
[]int{27,28},
// 龙虎
[]int{29,30},
// 第六球:
// 单双
[]int{31,32},
// 大小
[]int{33,34},
// 第七球:
// 单双
[]int{35,36},
// 大小
[]int{37,38},
// 第八球:
// 单双
[]int{39,40},
// 大小
[]int{41,42},
// 第九球:
// 单双
[]int{43,44},
// 大小
[]int{45,46},
// 第十球:
// 单双
[]int{47,48},
// 大小
[]int{49,50},
// 冠亚和单双
[]int{51, 52},
// 冠亚和大小
[]int{53, 54},
g(55,17),
g(100,10),
g(110,10),
g(120,10),
g(130,10),
g(140,10),
g(150,10),
g(160,10),
g(170,10),
g(180,10),
g(190,10)}
money = [][]int{
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,17),
s(0,10),
s(0,10),
s(0,10),
s(0,10),
s(0,10),
s(0,10),
s(0,10),
s(0,10),
s(0,10),
s(0,10)}
bate = [][]int{
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,2),
s(0,17),
s(0,10),
s(0,10),
s(0,10),
s(0,10),
s(0,10),
s(0,10),
s(0,10),
s(0,10),
s(0,10),
s(0,10)}
fmt.Println(len(keys))
fmt.Println(len(money))
fmt.Println(len(bate))
fmt.Println(bate)
}

7
pk10/interface.go

@ -0,0 +1,7 @@
package pk10
type User struct {
id int
UserName string
Password string
}

22
pk10/var.go

@ -0,0 +1,22 @@
package pk10
var keys [][]int
var money [][]int
var bate [][]int
func g(start int,hl int) []int {
var val = []int{}
for i := start; i < start+hl; i++ {
val=append(val,i)
}
return val
}
func s(start int,hl int) []int {
var val = []int{}
for i := start; i < start+hl; i++ {
val=append(val,start)
}
return val
}

104
readme.md

@ -1,10 +1,11 @@
> 目的:快速上手go语言
> 目的:快速上手 go 语言
1. `package main` 表示我们这个文件的包名
2. `import "fmt"` 表示引入`fmt`包
3. 注释的代码
```
// 单行注释
/*
@ -16,6 +17,7 @@
4. `func main() {}`必须要有的,作为入口函数执行
5. 数据类型:
```
1. 布尔型
2. 数字类型
@ -25,6 +27,7 @@
```
5. 定义变量:
```
var age int;//表示定义一个int型的age变量,如果没有初始化,变量默认为零值。
fruit = apples + oranges;//表示定义一个fruit变量,类型初始化是啥就是啥
@ -33,6 +36,7 @@ intVal,intVal1 := 1,2//省略 var, 注意 := 左侧如果没有声明新的变
```
6. 常量:
```
//显式类型定义: const b string = "abc"
//隐式类型定义: const b = "abc"
@ -46,3 +50,101 @@ const (
//iota: iota 在 const关键字出现时将被重置为 0(const 内部的第一行之前),const 中每新增一行常量声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)。
```
7. 任意类型:`interface{}`
```
var user = []map[string][]interface{}
//定义了类似这种的结构:[{"ada":[1,"dsa",[12,3,]]}]
```
8. 取出结构体的值
```
//如果我们有这样的结构体
type User struct {
Id int
UserName string
Password string
}
//当我们解析出数据的时候,可能会得到这样的值
{1 dsad 123}
//这时候直接用这样的方式取值
user.Id //1
```
9. 好像没回调也不会执行下面的语句,要等执行完成才会执行下面的语句
10) defer 规则
defer 声名的函数最后才会执行,会先执行函数内其他的
https://www.cnblogs.com/jukaiit/p/10786093.html
```
package main
import "fmt"
func main() {
defer fmt.Println("world")
fmt.Println("hello")
}
//hello
//world
```
11. 切片
https://www.cnblogs.com/OctoptusLian/p/9205326.html
切片拥有 长度 和 容量。
切片的长度就是它所包含的元素个数。
切片的容量是从它的第一个元素开始数,到其底层数组元素末尾的个数。
切片 s 的长度和容量可通过表达式 len(s) 和 cap(s) 来获取。
你可以通过重新切片来扩展一个切片,给它提供足够的容量。
```
package main
import "fmt"
func main() {
s := []int{2, 3, 5, 7, 11, 13}
printSlice(s)
// 截取切片使其长度为 0
s = s[:0]
printSlice(s)
// 拓展其长度
s = s[:4]
printSlice(s)
// 舍弃前两个值
s = s[2:]
printSlice(s)
// 舍弃前两个值
s = s[1:]
printSlice(s)
}
func printSlice(s []int) {
fmt.Printf("len=%d cap=%d %v\n", len(s), cap(s), s)
}
```
12. go 语言中 int 和 string 类型的转换
https://www.cnblogs.com/miria-486/p/10706699.html
int 转 string 直接只用`string(0)`这种方式的话 string 出来的不知道是个啥,因此换种方式
```
import "strconv"
//string到int (这个默认是int32类型的)
int,err := strconv.Atoi(string)
#string到int64
int64, err := strconv.ParseInt(string, 10, 64)
//第二个参数为基数(2~36),
//第三个参数位大小表示期望转换的结果类型,其值可以为0, 8, 16, 32和64,
//分别对应 int, int8, int16, int32和int64
#int到string
string := strconv.Itoa(int)
//等价于
string := strconv.FormatInt(int64(int),10)
#int64到string
string := strconv.FormatInt(int64,10)
//第二个参数为基数,可选2~36
//对于无符号整形,可以使用FormatUint(i uint64, base int)
```

14
runtime/runtime.go

@ -0,0 +1,14 @@
package runtime
import (
"time"
"fmt"
)
func Time(name string,runFun func()) interface{} {
runAllt := time.Now()
runFun()
runAll := time.Since(runAllt)
fmt.Println(name,"运行时长: ", runAll)
return nil
}
Loading…
Cancel
Save