文档章节

golang学习之go简单博客应用

c
 caiyezi
发布于 2016/11/08 20:24
字数 2460
阅读 10
收藏 0
点赞 0
评论 0

先说说golang的语法吧,个人觉得有以下特点:

  • 简洁,不管是变量、方法声明,还是代码编写,均十分简洁,效率也比较高
  • 非纯粹面向对象,但是go的struct类似c的struct,go的结构体还可以进行struct的包含,被包含的struct的方法被外层struct共享
  • 指针,方法传参时可以直接传指针,相比传值更加快速
  • 接口,go中规定,如果一个对象(struct)实现了interface中的所有方法,那么该struct便实现该接口
  • chan的定义,用来各个线程(有人叫协程,超轻量级)间的通信,基本不用考虑死锁等问题
  • 默认大写开头的结构体、方法等为public公有,小写开头为private私有

go的特性还有很多,菜鸟就不多说了,下面是一个用go开发的博客应用,功能比较简单,直接上菜:

系统环境

go版本:1.5rc1
系统:win7
数据库:mongodb(使用mgo操作)
web框架:revel
样式:bootstrap

页面效果

博客主页:

 

 

新建博客:

 

 

联系:

 

 

博客详情:

 

界面差不多就是这样,很简单吧,下节笔记是博客新增部分,慢慢来。。。

Header页

<div class="container-fluid">
    <div class="row-fluid">
        <div class="span12">
            <div class="page-header">
                <h3>基于Golang实现的博客应用iBlog</h3>
                <h4><small>数据库采用mongodb(mgo)、页面样式使用bootstrap(布局参考csdn)、整体实现采用Revel,Revel地址:<a href="http://revel.github.io/docs/godoc/index.html" target="_blank">http://revel.github.io/docs/godoc/index.html</a></small></h4>
                <h4><small>时间:2015.12.23</small></h4>           
            </div>
            <div class="navbar navbar-inverse" style="margin-top:1px;">
                <div class="navbar-inner">
                    <div class="container-fluid">
                        <a class="btn btn-navbar" data-target=".navbar-responsive-collapse" data-toggle="collapse"></a> <a class="brand" href="#">iBlog</a>
                        <div class="nav-collapse collapse navbar-responsive-collapse">
                            <ul class="nav">
                                <li class="{{.home}}">
                                    <a href="/">主页</a>
                                </li>
                                <li class="{{.blog}}">
                                    <a href="/blog">新博客</a>
                                </li>
                                <li class="{{.contact}}">
                                    <a href="javascript:contact()">联系</a>
                                </li>
                            </ul>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

Footer页

<script type="text/javascript">
    function contact(){
        jQuery.dialog({
            title: '关于我',
            content: '姓名:caiya928' + '<br/>' + '地址:陕西-西安' + '<br/>' + '博客:<a href="http://www.cnblogs.com/caiya928" target="_blank">http://www.cnblogs.com/caiya928</a>'
        });
    }
</script>

项目结构

首页页面实现

<!DOCTYPE html>
<html>
  <head>
    {{set . "title" "iBlog博客"}}
    {{set . "home" "active" }}
    <title>{{.title}}</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <link rel="shortcut icon" type="image/png" href="/public/img/favicon.png">
    <link href="/public/bootstrap/css/bootstrap.css" rel="stylesheet">
    <link href="/public/css/header.css" rel="stylesheet">
    <link href="/public/bootstrap/css/bootstrap-responsive.css" rel="stylesheet">
    <link href="/public/bootstrap/css/jquery-confirm.css" rel="stylesheet">
    <script src="/public/js/jquery-1.9.1.min.js" type="text/javascript" charset="utf-8"></script>
    <script src="/public/bootstrap/js/bootstrap.js"></script>
    <script src="/public/bootstrap/js/jquery-confirm.js"></script>
  </head>
  <body>
    {{template "header.html" .}}
    <div class="container-fluid" style="margin-top:0px;">
    <div class="row-fluid" style="margin-left:0px;margin-top:0px;">
    <div class="span12" margin-top="200px;">
    {{if .blogs}}
        {{range $blog := .blogs}}
            <div style="margin-left:0px;" class="span12">
                <ul class="thumbnails">
                    <li >
                       <div class="caption" >
                        <h3><a style="color:#000" href="/bloginfo/{{$blog.Id_}}/{{$blog.ReadCnt}}">{{$blog.GetTitle }}</a></h3>
                        <span class="label label-default">作者:{{$blog.Author}}</span>
                            <span class="label label-info">日期:{{$blog.CDate.Format "2006-01-02 15:04"}}</span>
                         <span class="label label-success">阅读:{{$blog.ReadCnt}}</span>
                         <p>{{$blog.GetContent}}</p>
                       </div>
                       </li>
                 </ul>           
            </div>
        {{end}}
    {{end}}
    </div>
    {{template "footer.html" .}}
  </body>
</html>

控制器层配置

# Routes
# This file defines all application routes (Higher priority routes first)
# ~~~~

module:testrunner

GET     /                                       App.Index
GET     /blog                                      App.Blog
GET     /bloginfo/:id/:rcnt                        App.BlogInfo                              
POST    /save                                   WBlog.Save
POST    /saveComment                            Comment.SaveComment
# Ignore favicon requests
GET     /favicon.ico                            404

# Map static resources from the /app/public folder to the /public path
GET     /public/*filepath                       Static.Serve("public")

# Catch all
*       /:controller/:action                    :controller.:action

页面跳转控制层App.go

package controllers

import (
    "github.com/revel/revel"
    "myapp/app/modules"
)

type App struct {
    *revel.Controller
}

func (c App) Index() revel.Result {
    dao, err := modules.Conn()
    if err != nil {
        c.Response.Status = 500
        return c.RenderError(err)
    }
    defer dao.Close()
    blogs := dao.FindBlogs()
    return c.Render(blogs)
}

func (c App) Blog() revel.Result {
    return c.Render()
}

func (c App) BlogInfo(id string, rcnt int) revel.Result {
    dao, err := modules.Conn()
    if err != nil {
        c.Response.Status = 500
        return c.RenderError(err)
    }
    defer dao.Close()
    blog := dao.GetBlogFromId(id)
    if blog.ReadCnt == rcnt {
        blog.ReadCnt = rcnt + 1
        dao.UpdateBlogById(id, blog)
    }
    comments := dao.GetCommentsFromBlogId(blog.Id_)
    blog.CommentCnt = len(comments)
    dao.UpdateBlogById(id, blog)
    return c.Render(blog, rcnt, comments)
}

数据库Dao层

package modules

import (
    "gopkg.in/mgo.v2"
)

const (
    CommentCollection = "comment"
    DbName            = "blog"
    UserCollection    = "user"
    BlogCollection    = "blog"
    MessageCollection    = "message"
)

type Dao struct {
    session *mgo.Session
}

func Conn() (*Dao, error) {
    session, err := mgo.Dial("localhost")
    if err != nil {
        return nil, err
    }
    return &Dao{session}, nil
}

func (dao *Dao) Close() {
    dao.session.Close()
}

新增博客页面

<!DOCTYPE html>
<html>
  <head>
    {{set . "title" "新博客"}}
    {{set . "blog" "active"}}
    <title>{{.title}}</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <link rel="shortcut icon" type="image/png" href="/public/img/favicon.png">
    <link href="/public/bootstrap/css/bootstrap.css" rel="stylesheet">
    <link href="/public/css/header.css" rel="stylesheet">
    <link href="/public/bootstrap/css/bootstrap-responsive.css" rel="stylesheet">
    <link href="/public/bootstrap/css/jquery-confirm.css" rel="stylesheet">
    <script src="/public/js/jquery-1.9.1.min.js" type="text/javascript" charset="utf-8"></script>
    <script src="/public/bootstrap/js/bootstrap.js"></script>
    <script src="/public/bootstrap/js/jquery-confirm.js"></script>
  </head>
  <body>
    {{template "header.html" .}} 
    <div class="container-fluid" style="margin-top:0px;">
        <div class="row-fluid" style="margin-left:5px;margin-top:0px;">
            <div class="row-fluid" style="margin-left:5px;margin:0px auto;border:0px;">
                <div class="span12" style="border:1px solid #ccc;border-radius: 5px;padding:10px;">
                    <form action="/save" method="post">
                      <div class="form-group">
                        <h4>标题</h4>
                        {{with $field := field "blog.Title" .}}
                        <input type="text" id="{{$field.Id}}" style="width:40%" class="form-control" name="{{$field.Name}}" placeholder="请输入您的博客标题" value="{{$field.Flash}}" >
                        <span class="help-inline erro">{{$field.Error}}</span>
                        {{end}}  
                      </div>
                      <div class="form-group">
                        <h4>内容</h4>
                        {{with $field := field "blog.Content" .}}
                        <textarea class="form-control" id="{{$field.Id}}" name="{{$field.Name}}" rows="6" style="width:60%" placeholder="请输入您的博客内容">{{$field.Flash}}</textarea>
                        <span class="help-inline erro">{{$field.Error}}</span>
                        {{end}}  
                      </div>
                      <div class="form-group" style="margin-left:57%">
                          <button type="submit" class="btn btn-success">提交</button>
                      </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
 </body>
</html>
{{template "footer.html" .}}

博客模型层

package modules

import (
    "github.com/revel/revel"
    "gopkg.in/mgo.v2/bson"
    "time"
)

type Blog struct {
    Id_        string `bson:"_id"`
    CDate      time.Time
    Title      string
    Content    string
    ReadCnt    int
    Year       int
    Author     string
    CommentCnt int
}

//新建博客
func (dao *Dao) CreateBlog(blog *Blog) error {
    BlogCollection := dao.session.DB(DbName).C(BlogCollection)
    blog.CDate = time.Now()
    blog.Year = blog.CDate.Year()
    blog.ReadCnt = 0
    blog.CDate = time.Now()
    blog.Id_ = bson.NewObjectId().Hex()
    blog.Author = "匿名"
    blog.Year = blog.CDate.Year()
    err := BlogCollection.Insert(blog) //先根据Id查找,然后更新或插入
    if err != nil {
        revel.WARN.Printf("Unable to save blog:%v error % v", blog, err)
    }
    return err
}

//获取Title
func (blog *Blog) GetTitle() string {
    if len(blog.Title) > 100 {
        return blog.Title[:100]
    }
    return blog.Title
}

//获取Content
func (blog *Blog) GetContent() string {
    if len(blog.Content) > 500 {
        return blog.Content[:500]
    }
    return blog.Content
}

//查询所有博客
func (dao *Dao) FindBlogs() []Blog {
    BlogCollection := dao.session.DB(DbName).C(BlogCollection)
    blogs := []Blog{}
    query := BlogCollection.Find(bson.M{}).Sort("-cdate").Limit(50) //结果根据cdate倒序
    query.All(&blogs)
    return blogs
}

//前台数据提交校验
func (blog *Blog) Validate(v *revel.Validation) {
    v.Check(blog.Title, revel.Required{}, revel.MinSize{1}, revel.MaxSize{200})
    v.Check(blog.Content, revel.Required{}, revel.MinSize{1})
}

//根据id查询Blog对象
func (dao *Dao) GetBlogFromId(id string) *Blog {
    BlogCollection := dao.session.DB(DbName).C(BlogCollection)
    blog := new(Blog)
    query := BlogCollection.Find(bson.M{"_id": id})
    query.One(blog)
    return blog
}

func (dao *Dao) UpdateBlogById(id string, blog *Blog) {
    blogCollection := dao.session.DB(DbName).C(BlogCollection)
    err := blogCollection.Update(bson.M{"_id": id}, blog)
    if err != nil {
        revel.WARN.Printf("Unable to update blog: %v error %v", blog, err)
    }
}

博客Action层

package controllers

import (
    "fmt"
    "github.com/revel/revel"
    "myapp/app/modules"
    "strings"
)

type WBlog struct {
    App //结构体包含
}

func (c WBlog) Save(blog *modules.Blog) revel.Result {
    blog.Title = strings.TrimSpace(blog.Title)
    blog.Content = strings.TrimSpace(blog.Content)
    blog.Validate(c.Validation)
    if c.Validation.HasErrors() {
        c.Validation.Keep()
        c.FlashParams()
        fmt.Println(c.Validation)
        return c.Redirect(App.Blog)
    }
    dao, err := modules.Conn()
    if err != nil {
        c.Response.Status = 500
        return c.RenderError(err)
    }
    defer dao.Close()
    err = dao.CreateBlog(blog)
    if err != nil {
        c.Response.Status = 500
        return c.RenderError(err)
    }
    return c.Redirect(App.Index)
}

博客详情页

<!DOCTYPE html>
<html>
  <head>
    {{set . "title" "博客详情"}}
    {{set . "home" "active" }}
    <title>{{.title}}</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <link rel="shortcut icon" type="image/png" href="/public/img/favicon.png">
    <link href="/public/bootstrap/css/bootstrap.css" rel="stylesheet">
    <link href="/public/css/header.css" rel="stylesheet">
    <link href="/public/bootstrap/css/bootstrap-responsive.css" rel="stylesheet">
    <link href="/public/bootstrap/css/jquery-confirm.css" rel="stylesheet">
    <script src="/public/js/jquery-1.9.1.min.js" type="text/javascript" charset="utf-8"></script>
    <script src="/public/bootstrap/js/bootstrap.js"></script>
    <script src="/public/bootstrap/js/jquery-confirm.js"></script>
  </head>
  <body>
    {{template "header.html" .}}
    <div style="margin-left:5px;" class="span12">
        {{if .blog}}
        <div class="content" style="border:1px solid #ccc;border-radius: 5px;padding:10px;">
            <ul class="thumbnails">
                <li>
                    <div class="caption" >
                         <h3>{{.blog.Title}}</h3>
                         <span class="label label-default">作者:{{.blog.Author}}</span>
                           <span class="label label-info">日期:{{.blog.CDate.Format "2006-01-02 15:04"}}</span>
                         <span class="label label-success">阅读:{{.blog.ReadCnt}}</span>
                    </div>
                   </li>
            </ul> 
            <p>{{.blog.Content}}</p>
        </div>
        <div class="comment" style="margin-top:20px;">
            {{if .comments}}
                <div class="comments" style="border:1px solid #ccc;border-radius: 5px;padding:10px;">
                    <h4>回复</h4>
                    <hr>
                    <dl class="the-comments">
                       {{range $index,$comment := .comments}}
                      <dd >
                        <span class="label label-default pull-right">#{{pls $index 1}}</span>
                        <div class="user-info" style="margin-top:15px;">
                          <a href="#"><strong>{{$comment.Email}}</strong></a>
                          <span style="margin-left:10px;" class="label label-default">日期:{{$comment.CDate.Format "2006-01-02 15:04" }}</span>
                        </div>
                        <div class="user-comment" style="margin-top:15px;">
                          <p>{{$comment.Content}}</p>
                        </div>
                      </dd>
                      {{end}}
                    </dl>
                </div>
            {{end}}
        </div>
        <div class="comments" style="border:1px solid #ccc;border-radius: 5px;padding:10px;margin-top:20px;">
            <div class="comment-form">
              <form action="/saveComment" method="post">
                <input type="hidden" name="id" value="{{.blog.Id_}}">
                <input type="hidden" name="rcnt" value="{{.rcnt}}">
                <div class="form-group">
                  <h4>邮箱</h4>
                  {{with $field := field "comment.Email" .}}
                  <input style="width:50%" type="email" class="form-control" id="{{$field.Id}}" name="{{$field.Name}}"  placeholder="请输入您的联系方式" required value="{{if $field.Flash}}{{$field.Flash}}{{else}}{{$field.Value}}{{end}}">
                  <span class="help-inline erro">{{$field.Error}}</span>
                  {{end}}
                </div>
                <div class="form-group">
                  <h4>评论</h4>
                  {{with $field := field "comment.Content" .}}
                  <textarea style="width:70%" class="form-control" id="{{$field.Id}}" name="{{$field.Name}}" rows="6" placeholder="请输入您的回复" required >{{if $field.Flash}}{{$field.Flash}}{{else}}{{$field.Value}}{{end}}</textarea>
                  {{end}}
                </div>
                <div class="form-group">
                  <button type="submit" style="margin-left:66.5%" class="btn btn-success">提交</button>
                </div>
              </form>
            </div>
        </div>
        {{end}}
    {{template "footer.html" .}}
  </body>
</html>

评论功能Dao层

package modules

import (
    "github.com/revel/revel"
    "gopkg.in/mgo.v2/bson"
    "time"
)

type Comment struct {
    Id_     string `bson:"_id"`
    BlogId  string
    Email   string
    CDate   time.Time
    Content string
}

func (comment *Comment) Validate(v *revel.Validation) {
    v.Check(comment.Email, revel.Required{}, revel.MaxSize{50})
    v.Check(comment.Content, revel.Required{}, revel.MinSize{1}, revel.MaxSize{200})
}

func (dao *Dao) InsertComment(comment *Comment) error {
    commentCollection := dao.session.DB(DbName).C(CommentCollection)
    comment.CDate = time.Now()
    err := commentCollection.Insert(comment)
    if err != nil {
        revel.WARN.Printf("Unable to save Comment: %v error %v", comment, err)
    }
    return err
}

func (dao *Dao) GetCommentsFromBlogId(id string) []Comment {
    commentCollection := dao.session.DB(DbName).C(CommentCollection)
    comments := []Comment{}
    query := commentCollection.Find(bson.M{"blogid": id}).Sort("CDate")
    query.All(&comments)
    return comments
}

评论功能Action层

package controllers

import (
    "github.com/revel/revel"
    "gopkg.in/mgo.v2/bson"
    "myapp/app/modules"
    "strings"
)

type Comment struct {
    App
}

//保存评论
func (c Comment) SaveComment(id string, rcnt int, comment *modules.Comment) revel.Result {
    if len(id) == 0 {
        return c.Redirect("/")
    }
    dao, err := modules.Conn()
    if err != nil { //如果报错
        c.Response.Status = 500
        return c.Redirect("/")
    }
    defer dao.Close()
    blog := dao.GetBlogFromId(id)
    if blog == nil {
        return c.Redirect("/")
    }
    comment.Id_ = bson.NewObjectId().Hex()
    comment.BlogId = blog.Id_
    comment.Content = strings.TrimSpace(comment.Content)
    comment.Email = strings.TrimSpace(comment.Email)
    comment.Validate(c.Validation)
    if c.Validation.HasErrors() {
        c.Validation.Keep()
        c.FlashParams()
        c.Flash.Error("Errs:The email and the content should not be null,or the maxsize of email is 50.")
        return c.Redirect("/bloginfo/%s/%d", id, rcnt)
    }
    err = dao.InsertComment(comment)
    if err != nil {
        c.Response.Status = 500
        return c.RenderError(err)
    }
    blog.CommentCnt++
    dao.UpdateBlogById(id, blog)
    return c.Redirect("/")
}

init.go初始化加载文件

package app

import "github.com/revel/revel"

func init() {

    revel.TemplateFuncs["pls"] = func(a, b int) int {
        return a + b
    }
    // Filters is the default set of global filters.
    revel.Filters = []revel.Filter{
        revel.PanicFilter,             // Recover from panics and display an error page instead.
        revel.RouterFilter,            // Use the routing table to select the right Action
        revel.FilterConfiguringFilter, // A hook for adding or removing per-Action filters.
        revel.ParamsFilter,            // Parse parameters into Controller.Params.
        revel.SessionFilter,           // Restore and write the session cookie.
        revel.FlashFilter,             // Restore and write the flash cookie.
        revel.ValidationFilter,        // Restore kept validation errors and save new ones from cookie.
        revel.I18nFilter,              // Resolve the requested language
        HeaderFilter,                  // Add some security based headers
        revel.InterceptorFilter,       // Run interceptors around the action.
        revel.CompressFilter,          // Compress the result.
        revel.ActionInvoker,           // Invoke the action.
    }

    // register startup functions with OnAppStart
    // ( order dependent )
    // revel.OnAppStart(InitDB)
    // revel.OnAppStart(FillCache)
}

// TODO turn this into revel.HeaderFilter
// should probably also have a filter for CSRF
// not sure if it can go in the same filter or not
var HeaderFilter = func(c *revel.Controller, fc []revel.Filter) {
    // Add some common security headers
    c.Response.Out.Header().Add("X-Frame-Options", "SAMEORIGIN")
    c.Response.Out.Header().Add("X-XSS-Protection", "1; mode=block")
    c.Response.Out.Header().Add("X-Content-Type-Options", "nosniff")

    fc[0](c, fc[1:]) // Execute the next filter stage.
}

footer.css样式

.mbox dl dd{
    margin-top:4px;
}

header.css

.page-header{
    margin-top:2px;
    margin-bottom:15px;
    border-bottom: 1px solid #eeeeee;
}

body{
    line-height:30px;
    font-size: 16px;
    padding:5px;
    margin:5px;
    font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; */
}

li {
    line-height: 30px;
}

.navbar .nav > li > a {
    float: none;
    padding: 15px 30px;
    color: #777;
    text-decoration: none;
    text-shadow: 0 0px 0 #ffffff;
}
.nav{
    margin:0px;
}

.span12{
    padding:0 5px;
}

.brand{
    padding:0;
    margin-top:5px;
    font-size:10px;
}

.container-fluid{
    padding:1px;
}

.form-search{
    margin-top:11px;
}

 

好了,完整的代码就是这样,初学就当练习用的,发现bug还望直接指出。。。

本文转载自:http://www.cnblogs.com/vipzhou/p/5071458.html

共有 人打赏支持
c
粉丝 1
博文 108
码字总数 0
作品 0
西安
程序员
Golang资料集

该资源的github地址:Qix 《Platform-native GUI library for Go》 介绍:跨平台的golang GUI库,支持Windows(xp以上),Unix,Mac OS X(Mac OS X 10.7以上) 《Gopm 快速入门》 介绍:Gopm(Go 包管...

ty4z2008
2016/03/11
0
0
Go语言学习资料整理

整理网上找到的Golang语言学习资料 基础 基础教程 书籍在线版 Go 指南-A Tour of Go Go语言圣经(中文版) Effective Go中文版 Go Web编程 build-web-application-with-golang Go入门指南 Th...

nothingfinal
2017/11/28
0
0
golang: beego自动化部署

springboot: springboot+mongodb+docker实例 golang: beego自动化部署 数据库管理平台NetopGO简介 Go语言开发 Go语言圣经(中文版) Go语言(golang)开源项目大全 Go语言诞生5周年!10大Go语言...

d_watson
2016/05/20
233
0
为什么 PHPer 应当学习 Golang

熟悉我的朋友应当知道,近些年的大部分时间我的工作都会多少和 PHP 相关。随着 PHP 有着越来越深入的了解,以及遇到越来越多的不同业务时,使用 PHP 总会让我有一种莫名的无力感。当然,并不...

龙鸟
2012/11/28
0
4
译 | 我是如何爱上Go语言的

我和编译型编程语言 : 火花不再 在攻读博士学位的时间里,我对用python、R语言和unix shell脚本解决问题和编写代码感到得心应手。为了提高自己的技能,我想,学习用较低级的编译型编程语言进...

程序师
07/15
0
0
最适合DevOps开发的五种编程语言

  【IT168 评论】随着企业基础设施的改变和发展,各岗位所需的具体技术技能也会有所改变。最近,DevOps可谓是风头正劲,所以今天我们就为大家推荐五种和DevOps最速配的编程语言,并附上笔者...

it168网站
2017/04/17
0
0
Golang 协程工作池 - 豆豆Pool

豆豆Pool — GOLANG简单的工作池 本repo是一个简单的golang工作池,仅供交流和学习使用。golang工作池的作用是可以限制goroutine的启动数量。 use //NewTask是放到工作池当中运行的函数。使用...

ppmoon
07/11
0
0
Google Protocol Buffer 和 gRPC 简介

更多文章请访问独立博客 https://huangwenwei.com Protocol Buffer Protocol buffer 是谷歌推出的一种轻便高效的结构化数据存储格式,把结构化的数据序列化。常用以存储数据、作为网络通信的...

hww_面条酱
2017/10/18
0
0
Hprose/hprose-go

Hprose 2.0 for Golang 简介 Hprose 是高性能远程对象服务引擎(High Performance Remote Object Service Engine)的缩写。 它是一个先进的轻量级的跨语言跨平台面向对象的高性能远程动态通讯...

Hprose
2014/10/15
0
0
mongodb: 关于Mongoose的geoNear方法的使用

文章: Selenium自动化测试LOGO(临时文章) mongodb: 关于Mongoose的geoNear方法的使用 Protobuf在go和java数据交互 每日一博 | 如何优雅的控制goroutine的数量 sdk: 被Google Play下架刷爆朋...

d_watson
2016/05/28
57
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Kafka设计解析(一)- Kafka背景及架构介绍

原创文章,转载请务必将下面这段话置于文章开头处。(已授权InfoQ中文站发布) 本文转发自技术世界,原文链接 http://www.jasongj.com/2015/03/10/KafkaColumn1 摘要   Kafka是由LinkedI...

mskk
2分钟前
0
0
使用Service Mesh整合您的微服务架构

在微服务架构的世界中,它正在达到这样的程度,即管理系统的复杂性对于利用它带来的好处变得至关重要。 目前,如何实现这些微服务不再是一个问题,因为有很多可用的框架(Spring Boot,Vert....

xiaomin0322
5分钟前
0
0
看看 LinkedList Java 9

终于迎来了 LinkedList 类,实现的接口就有点多了 Serializable, Cloneable, Iterable<E>, Collection<E>, Deque<E>, List<E>, Queue<E>。LinkedList是一个实现了List接口和Deque接口的双端链......

woshixin
24分钟前
0
0
算法 - 冒泡排序 C++

大家好,我是ChungZH。今天我给大家讲一下最基础的排序算法:冒泡排序(BubbleSort)。 冒泡排序算法的原理如下: 比较相邻的元素。如果第一个比第二个大(可以相反),就交换他们两个。 对每...

ChungZH
26分钟前
0
0
jquery ajax request payload和fromData请求方式

请求头的不同 fromData var data = { name : 'yiifaa'};// 提交数据$.ajax('app/', { method:'POST', // 将数据编码为表单模式 contentType:'application/x-ww...

lsy999
29分钟前
0
0
阿里P7架构师,带你点亮程序员蜕变之路

前言: Java是现阶段中国互联网公司中,覆盖度最广的研发语言。 掌握了Java技术体系,不管在成熟的大公司,快速发展的公司,还是创业阶段的公司,都能有立足之地。 有不少朋友问,成为Java架...

Java大蜗牛
30分钟前
1
0
Ecstore 在没有后台管理界面(维护)的情况如何更新表的字段

window 系统: 切换到:app\base 目录下: C:\Users\qimh>d: D:\>cd D:\WWW\huaqh\app\base 执行:D:\WWW\huaqh\app\base>cmd update linux 系统: 1># cd /alidata/www.novoeshop.com/app/......

qimh
34分钟前
0
0
设计模式-策略模式

策略模式 解释 对工厂模式的再次封装,使用参数控制上下文信息(将工厂返回的实例赋值给context field) 不会返回bean实例,只是设置对应的条件 调用context的方法(调用field的方法) 用户只...

郭里奥
37分钟前
0
0
python使用有序字典

python自带的collections包中有很多有用的数据结构可供使用,其中有个叫OrderedDict类,它可以在使用的时候记录元素插入顺序,在遍历使用的时候就可以按照原顺序遍历。 a = {"a":1,"b"...

芝麻糖人
今天
0
0
RestTemplate HttpMessageConverter

RestTemplate 微信接口 text/plain HttpMessageConverter

微小宝
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部