您当前的位置: 首页 >  Java

qianbo_insist

暂无认证

  • 0浏览

    0关注

    399博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

使用go来做系统,如何比java node php 更 简单

qianbo_insist 发布时间:2021-03-28 17:24:02 ,浏览量:0

使用go

go语言的好处不言而喻:

效率问题,

无论是开发效率还是运行效率至少都兼顾了,比较适合中国国情。

运行

可以以脚本运行,可以编译结果运行

跨平台

没有大问题

java

java1.7 后的非阻塞做的可以了 大量I/O的情况下,还没有好的解决方案,可以使用分布式,中国后台大量使用了java,以至于不懂技术的人说到后台就认为是java

node

node 很好,很喜欢,但是太脚本化,一般单线程运行,可以多进程运行,可以使用分布式,在运行脚本测试方面,其实比python更加快捷简单,效率高,当然并非使用python效率就不高,python的AI大量模块都是c,c++写的,node也是如此。

go

Goroutine 很好,不多说,使用就行,同样可以使用分布式,各方面比较先进

c c++

效率很好,可惜为此要引入的库时很不方便,编译一大堆库,要效率别无他法,尽量自己写代码,中国国情。。。。。

选择

所以使用go node java,现在偏重于go,其他效率方面的,c 第一 没有之一,如 linus 写的git ,他用c 写东西,那就是开发效率和运行效率一样高。

例子,五分钟httpserve 和 mysql 准备好 show me the code 先写一个数据库连接获取数据的
  package main
 
import (
	"database/sql"
	"fmt"
 	_ "github.com/go-sql-driver/mysql"
	"github.com/jmoiron/sqlx"
)
 
var DB *sqlx.DB
 
func initDb() error {
	var err error
	dsn := "root:root@tcp(127.0.0.1:3306)/test"
	DB, err = sqlx.Open("mysql", dsn)
	if err != nil {
		return err
	}
	DB.SetMaxOpenConns(100)
	DB.SetMaxIdleConns(16)
	return nil
}
 
type User struct {
	ID   int64          `db:"ID"`
	Name sql.NullString `db:"name"`
	Age  int            `db:"age"`
}
 
func testSqlxQuery() {
	sqlstr := "select ID,name,age from user where ID = ?"  
	var user User
 
	err := DB.Get(&user, sqlstr, 1)
	if err != nil {
		fmt.Printf("select failed, err:%v\n", err)
		return
	}
 
	fmt.Printf("user:%#v\n", user)
}
 
func main() {
	err := initDb()
	if err != nil {
		fmt.Printf("init db failed, err:%v\n", err)
		return
	}
	testSqlxQuery()
}

运行立刻得到结果,速度效率兼顾,当然自己需要

加上httpserver,然后从httpserver返回结果

package main

import (
	"github.com/gin-gonic/gin"
	"fmt"
	//"database/sql"
    _ "github.com/go-sql-driver/mysql"
    "github.com/jmoiron/sqlx"
	//"net/http"
)


var (
    userName  string = "root"
    password  string = "root"
    ipAddrees string = "localhost"
    port      int    = 3306
    dbName    string = "test"
    charset   string = "utf8"
)
 
type User struct {
    ID int `db:"ID"`
    Name string `db:"name"`
    Age int `db:"age"`
    Address string `db:"address"`
}
 
func getUser(Db *sqlx.DB) ([]User) {
    var users []User  // 这里创建的是存放结构体的切片
    if err := Db.Select(&users, "select * from user where ID > ?", 0); err != nil {
        fmt.Println("Select ERROR:", err)
        return nil
    }
    fmt.Println(users)
    return users
}


func getUserRecord(Db *sqlx.DB,id int64){

    result, err := Db.Exec("select * from user where id = ?",id)
    if err != nil {
        fmt.Printf("delete faied, error:[%v]", err.Error())
        return
    }
    num, _ := result.RowsAffected()
    fmt.Printf("select success, affected rows:[%d]\n", num)
	//return result()
}

func connectMysql() (*sqlx.DB) {
    dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%s", userName, password, ipAddrees, port, dbName, charset)
    Db, err := sqlx.Open("mysql", dsn)
    if err != nil {
        fmt.Printf("mysql connect failed, detail is [%v]", err.Error())
		return nil
    }
	Db.SetMaxOpenConns(20)
	Db.SetMaxIdleConns(15)
    return Db
}

func main() {

	var Db *sqlx.DB = connectMysql()
	if Db == nil{
		fmt.Println("db error")
	}
	defer Db.Close()
    
	x:=getUser(Db)

	r := gin.Default()
	r.GET("/ping", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"message": "I am qianbo",
		})
	})
	r.GET("/get/user",func(c *gin.Context){
        c.JSON(200,gin.H{
            "data":x,
		})
	})
	r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
}

浏览器里输入http://127.0.0.1:8080/get/user 可以看到返回的json结果,我会继续写完整,go 语言和c,c++配合来写系统,事半功倍。

关注
打赏
1663161521
查看更多评论
立即登录/注册

微信扫码登录

0.0395s