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

29 篇文章 1 订阅
22 篇文章 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++配合来写系统,事半功倍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qianbo_insist

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值