Go html template

Submitted by Lizhe on Tue, 09/12/2017 - 11:39

 

package main

import (
    "html/template"
    "os"
)

func main() {
    const tpl = `hello {{.}}`
    data := "world"

    t, err := template.New("").Parse(tpl)
    if err == nil {
        t.Execute(os.Stdout, data)
    }

}
 

使用结构体

Go 中文字符串处理

Submitted by Lizhe on Fri, 09/01/2017 - 11:37

Go语言本身是使用utf8的, 不过在处理字符串的时候仍然需要注意一些事情

问题很简单,直接看例子吧

package main

import (
    "fmt"
    "unicode/utf8"
)

func main() {
    str := "这是一个测试字符串"
    fmt.Println(str)
    fmt.Println(utf8.RuneCountInString(str))
    fmt.Println(utf8.DecodeRuneInString(str))

Go map ++

Submitted by Lizhe on Mon, 08/28/2017 - 17:23

今天发现go的map结构居然可以直接用 ++ 当值... 好神奇

记录一下

package app

import (
    "bufio"
    "fmt"
    "os"
)

Go debug

Submitted by Lizhe on Mon, 08/28/2017 - 12:08

首先你需要知道几个概念

Go语言输出的exe需要使用gdb(The GNU Project Debugger) 来调试

gdb调试时如果go是64位的, 那么对应的gdb也需要使用64位的

在windows下使用gdb需要gdb.exe, 但是有些版本可能不兼容,如果发现莫名其妙的错误可以尝试换个版本,如果你找不到可用版本我推荐你直接使用liteide自带的版本

 

1 使用liteide 调试

下载liteide    http://liteide.org/en/

然后需要一些简单配置

点击那个console图标,然后配置

474

Go 并发

Submitted by Lizhe on Thu, 08/24/2017 - 15:41

Go语言最大的一个特点就是对并发的原生支持

Go的并发指的是能让某个函数独立于其他函数运行的能力.

当一个函数创建为goroutine时, Go会将其视为一个独立的工作单元. 这个单元会被调度到任何可用的逻辑处理上执行.

Go的运行时调度器能管理被创建的goroutine并为他们分配执行时间.

Go基于叫做CSP ( Communicating Sequential Processes ) 的并发同步模型来保证数据的线程安全, CSP是一种消息传递模型, 通过在goroutine之间传递数据来传递消息,而不是对数据进行加锁来来实现同步访问, 用于传递数据的关键数据类型叫做channel

package main

import (
    "fmt"
    "runtime"
    "sync"
)

Go init函数

Submitted by Lizhe on Thu, 08/24/2017 - 12:24

init函数和main函数一样是go语言中的保留函数,由go自动调用

main函数只能应用于main包中, 但是init函数可以使用在任意包中

init函数会在包被导入时自动执行(在常量和变量初始化之后)

 

我们使用下面的例子进行验证

C:\DEV\workspace_angularjs\GoHelloInit\src\main\main.go

package main

import (
    t "testinit"
)

func main(){
    t.SayHello()
}

C:\DEV\workspace_angularjs\GoHelloInit\src\testinit\app.go

Go语言的微服务搭建

Submitted by Lizhe on Wed, 08/23/2017 - 18:02

 

Negroni是一个第三方库,用于在Go内置的net/ http包上构建路由接口

gorilla/mux是一个强大的路由,小巧但是稳定高效,不仅可以支持正则路由还可以按照Method,header,host等信息匹配,可以从我们设定的路由表达式中提取出参数方便上层应用,而且完全兼容http.ServerMux

 

package main

import (
    service "service"
)

func main(){
    port := "8888"
    server := service.NewServer()
    server.Run(":"+port)
}

 

Tensorflow 对数几率回归

Submitted by Lizhe on Tue, 08/22/2017 - 13:47

线性回归模型所预测的是一个连续值或任意实数

对数几率回归则用于预测 Y/N 

f(x) = 1/(1+e-x)

log

随着x值(横轴)的变化, y值(纵轴)会在0~1 这个区间内变化, 这里1表示Y, 0表示位N 

这个函数接收单个输入值所以这里如果我们需要使用多个输入值的话,需要将多个值合并成单个值使用

例如如果数据中是 

姓名    年龄    性别

Tom    20       Male

可能需要合并成 Tom_20_Male之后才能放入上面的公式参与计算

这里的例子是计算泰坦尼克的乘客的幸存概率,原始数据为

Tensorflow 线性回归

Submitted by Lizhe on Fri, 08/18/2017 - 11:31

在有监督学习问题中, 线性回归是一种最简单的建模手段.

给定一个数据点集合作为训练集, 线性回归的目标是找到一个与这些数据最为吻合的线性函数.

y(x1,x2,x3,...,xk) = w1x1+w2x2+w3x3+...+wkxk+b

Y 为待预测值

X 是一组独立的预测变量

w 为权值 (可学习)

b 为偏移量 (可学习)

上面的公式用代码表示应该是