获取url中的参数及输出到页面的几种方式

func SayHello(w http.ResponseWriter, req *http.Request) {
req.Method //获取url的方法 GET or POST
request := req.URL.Query() //获取url中的所有参数(get或post)
io.WriteString(w, req.FormValue("id")) //获取url的id参数(常用)
w.Write([]byte(request["wang"][])) //发送到HTTP客户端
io.WriteString(w, "hello, world!\n") //发送到HTTP客户端
fmt.Fprintf(w, "%s", "hello, world!\n") //发送到HTTP客户端 }

获取当前路径  

 os.Getwd() //执行用户当前所在路径
file, _ := exec.LookPath(os.Args[])//执行程序所在的绝对路径

变量类型转换

floatTOint
int(float) intTOfloat
var a int =
var b float64 = float64(a)
stringTOfloat( / )
f, err := strconv.ParseFloat(s, )
f, err := strconv.ParseFloat(s, )
intTOstring
var i int =
str1 := strconv.Itoa(i) // 通过Itoa方法转换
str2 := fmt.Sprintf("%v", i) // 通过Sprintf方法转换 万能
stringTOint
var s string = ""
var i int
i, err = strconv.Atoi(s)
stringToint
strconv.ParseInt()
strToBool
i, err =strconv.ParseBool("")
intToint32
var a int
b = int32(a)
interface TO string
var a interface{}
var b string
a = "asdasdasdasd"
b = a.(string)
interface TO float32
var a interface{}
var b float32
a = 126.982577
b = a.(float32)
interface TO int32
var a interface{}
var b int32
a =
b = a.(int32)
强制类型转换
type MyInt32 int32
func main() {
var uid int32 =
var gid MyInt32 = MyInt32(uid)
fmt.Printf("uid=%d, gid=%d\n", uid, gid)
}
强制类型转换
unsafe.Pointer string  byte互转

aa:="hello world"
      bb:=[]byte(aa)
      cc:=string(bb)

时间篇

 当前时间戳
fmt.Println(time.Now().Unix())
# 时间戳到具体显示的转化
fmt.Println(time.Unix(t, ).String()) 带纳秒的时间戳
t = time.Now().UnixNano()
基本格式化的时间表示
fmt.Println(time.Now().String())
格式化时间
fmt.Println(time.Now().Format("2006-01-02 15:04:05")) # 记忆方法:-----
# -- :: 时间戳转str格式化时间
str_time := time.Unix(, ).Format("2006-01-02 15:04:05")
fmt.Println(str_time) # -- :: str格式化时间转时间戳
the_time := time.Date(, , , , , , , time.Local)
unix_time := the_time.Unix()
fmt.Println(unix_time) # 还有一种方法,使用time.Parse
the_time, err := time.Parse("2006-01-02 15:04:05", "2014-01-08 09:04:41")
if err == nil {
unix_time := the_time.Unix()
fmt.Println(unix_time)
}
#

sleep

   time.Sleep(time.Millisecond * 1000)  #sleep 1000毫秒
time.Sleep(time.Second * 1) #sleep 1秒

fmt

    万能格式:%v
字符串: %s
十进制: %d
浮点数: %f 保留2位小数 %0.2f
二进制: %b
Boolen: %t fmt.Fprintf(os.Stdout, "%08b\n", 32) //
fmt.Printf("%v", "hello world") // hello world 直接格式化打印
fmt.Print(fmt.Sprintf("%v", "hello world")) // hello world Sprintf 返回格式化后的变量
fmt.Print(fmt.Errorf("%08b\n", 32)) //
fmt.Fprint(os.Stdout, "A")
fmt.Fprintln(os.Stdout, "A") // A
fmt.Println("B") // B
fmt.Print(fmt.Sprintln("C")) // C

函数不定参数 

func sum (nums ...int) {
fmt.Print(nums, " ") //输出如 [1, 2, 3] 之类的数组
total := 0
for _, num := range nums { //要的是值而不是下标
total += num
}
fmt.Println (total)
}
a:=[]int{1,2,3,4,5} //可传slice …
sum(a…)

执行命令行

import "os/exec"
func main () {
//cmd := exec.Command("ps", "-aux")
cmd := exec.Command ("ls", "/root")
out, err := cmd.Output ()
if err!=nil {
println ("Command Error!", err.Error ())
return
}
fmt.Println (string (out))
}
或者(正规一点)
func main () {
cmd := exec.Command ("tr", "a-z", "A-Z")
cmd.Stdin = strings.NewReader ("some input")
var out bytes.Buffer
cmd.Stdout = &out
err := cmd.Run ()
if err != nil {
log.Fatal (err)
}
fmt.Printf("in all caps: %q\n", out.String ())
} 输出:in all caps: "SOME INPUT"

命令行参数 (可用flag包)

func main () {
args := os.Args
fmt.Println (args) //带执行文件的
}
$go run args.go aaa bbb ccc ddd

生成随机数

 r := rand.New(rand.NewSource(time.Now().UnixNano())) //使用时间作为种子

结构体的初始化方法

        rect1 := new(Rect)
rect2 := &Rect{}
rect3 := &Rect{0, 0, 100, 200}
rect4 := &Rect{width:100, height:200}
var rect5 *Rect=new(Rect)
注意这几个变量全部为指向Rect结构的指针(指针变量),因为使用了new()函数和&操作符
a := Rect{} 则表示这个是一个Rect{}类型

md5

import (
"crypto/md5"
"encoding/hex"
) func GetMd5String(s string) string {
h := md5.New()
h.Write([]byte(s))
return hex.EncodeToString(h.Sum(nil))
}

urlencode

import "net/url"
url.QueryEscape("strings")

log 记日志

logfile, _ := os.OpenFile("./pro.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0777)
defer logfile.Close() logger := log.New(logfile, "", 0)
logger.Printf("%v%v", err, ret)

判断文件是否存在

func main() {
f, err := os.Open("dotcoo.com.txt")
defer f.Close()
if err != nil && os.IsNotExist(err) {
fmt.Printf("file not exist!\n")
return
}
fmt.Printf("file exist!\n")
}

string如果里面有"或换行,可以使用`来进行包含

jsonString := `
{
"development":{
"connector":[
{"id":"connector-server-1", "host":"127.0.0.1", "port":4050, "wsPort":3050}
],
"gate":[
{"id": "gate-server-1", "host": "127.0.0.1", "wsPort": 3014}
]
}
}`

path.Clean

path.Clean用于对路径 ../../等进行过滤,在创建修改文件的时候需要使用到,否则会有漏洞

import包命名

import的包可以给它命名import l4g "code.google.com/p/log4go"

判断当前用户是否是root用户

os.Geteuid() != 0

break 退出指定的循环体  如果在某个条件下,你需要从 for-select 中退出,就需要使用标签

    sum := 0
MyForLable:
for {
for i := 0; i < 10; i++ {
if sum > 200 {
break MyForLable //将退出循环体for{}
}
sum += i
}
}
fmt.Println(sum)

golang 通过go-sql-driver/mysql 调取存储过程报错

Error 1312: PROCEDURE mydb.GetAllNotes can't return a result set in the given context
to line 209 in packets.go
under function writeAuthPacket
adding clientMultiStatements |
clientMultiResults | 调用方式 db.Query("call proc_xxx();")

golang 中的 类型判断

var a interface{}
a=12
newA,ok:=a.(string)
如果ok 是 true 则说明 变量a 是字符串类型,而newA就是string类型的变量,a的实际值
a.(type) 返回的是 a的 类型, 注意他返回的不是一个 字符串表示 string int 这样表示a的类型
a.(type)是和switch 搭配使用的
switch vtype:=v.(type){
case string: case int: case []interface{}: default:
}

json 简单的 encode decode 

import  "encoding/json"

   type MyData struct {
Name string `json:"item"`
Other float32 `json:"amount"`
}
detail:=&MyData{"Name":"hello","Other":2}
userinfo, _ := json.Marshal(detail)
fmt.Println(string(userinfo))
//`json:"item"` 就是Name字段在从结构体实例编码到JSON数据格式的时候,使用item作为名字。算是一种重命名的方式。
//输出:{"item":"hello","amount":2} userinfo,_:=json.Marshal(detail)
ObjUser := make(map[string]interface{})
json.Unmarshal([]byte(userinfo), &ObjUser)

panic和恢复recover用法 

defer func() {
    if re := recover(); re != nil {
        fmt.Printf("%v", re)
    }
}()

从文件中json解析 

尽量使用os.OpenFile直接获取reader,然后再从reader中使用Decoder来解析json

package main

import (
"fmt"
"encoding/json"
"os") func main() {
pathToFile := "jsondata.txt" file, err := os.OpenFile(pathToFile, os.O_RDONLY, 0644)
if err != nil {
fmt.Println(err)
os.Exit(1)
} configs := make(map[string]map[string][]Service, 0)
err = json.NewDecoder(file).Decode(&configs)
if err != nil {
fmt.Println(err)
os.Exit(1)
}}

lock 并发小例

import (
"fmt"
"sync"
"time"
) var l sync.Mutex func main() {
l.Lock()
defer l.Unlock()
m := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
ch := make(chan int)
defer close(ch)
for i := 0; i < 30; i++ {
time.Sleep(time.Second)
go func(x int) {
for {
if len(m) == 0 {
break
} else {
l.Unlock()
fmt.Println(x, m[0:1])
m = m[1:len(m)]
l.Lock()
}
time.Sleep(time.Second) }
ch <- x }(i)
}
for i := 0; i < 30; i++ {
fmt.Println(<-ch)
} }

future 小例

package main

import (
"fmt"
) //一个查询结构体
type query struct {
//参数Channel
sql chan string
//结果Channel
result chan string
} //执行Query
func execQuery(q query) {
//启动协程
go func() {
//获取输入
sql := <-q.sql
//访问数据库,输出结果通道
q.result <- "get " + sql
}() } func main() {
//初始化Query
q :=
query{make(chan string, 1), make(chan string, 1)}
//执行Query,注意执行的时候无需准备参数
execQuery(q) //准备参数
q.sql <- "select * from table"
//获取结果
fmt.Println(<-q.result)
}

反射小例

package main

import (
"errors"
"fmt"
"reflect"
) func foo() {
fmt.Println("hello") }
func bar(a, b, c int) {
fmt.Println(a, b, c)
} func Call(m map[string]interface{}, name string, params ...interface{}) (result []reflect.Value, err error) {
f := reflect.ValueOf(m[name])
if len(params) != f.Type().NumIn() {
err = errors.New("The number of params is not adapted.")
return
}
in := make([]reflect.Value, len(params))
for k, param := range params {
in[k] = reflect.ValueOf(param)
}
result = f.Call(in)
return
} func main() {
funcs := map[string]interface{}{"foo": foo, "bar": bar}
Call(funcs, "foo")
Call(funcs, "bar", 1, 2, 3)
}

快速搭建服务器


func main(){
http.HandleFunc( "/",Handler)
http.HandleFunc( "/valueget",valueget)
s := &http.Server{
Addr: ":80",
ReadTimeout: 30 * time.Second,
WriteTimeout: 30 * time.Second,
MaxHeaderBytes: 1 << 20,
}
log.Fatal(s.ListenAndServe())
} func valueget(w http.ResponseWriter, r *http.Request) {
    params := r.URL.Query()
    user := params.Get("user")
    fmt.Fprintf(w, "you are get user %s", user)
}
 

go “静态目录服务” http.FileServer

//对目录提供静态映射服务
http.Handle("/", http.FileServer(http.Dir("/tmp"))) http.HandleFunc("/static/", func(w http.ResponseWriter, r *http.Request) {
        http.ServeFile(w, r, r.URL.Path[1:])

})

go语言中导入另外一个库结果调用时出错:cannot refer to unexported name

解决方法
go,模块中要导出的函数,必须首字母大写。

 goto

func main() {
defer fmt.Println("cc")
goto L
defer fmt.Println("dd")
fmt.Println("aa")
L:
fmt.Println("bb")
} 输出
bb
cc

git 安装redis

  cd $GOPATH/src
git clone git://github.com/alphazero/Go-Redis.git redis
cd redis
go install

 hook

package main

import (
"fmt"
) var hooks []hookfunc //hook function slice to store the hookfunc type hookfunc func() error //hook function to run func initOne() error {
fmt.Println("hello world 1")
return nil
}
func initTwo() error {
fmt.Println("hello world 2")
return nil
}
func AddHook(hf hookfunc) {
hooks = append(hooks, hf)
} func main() {
AddHook(initOne)
AddHook(initTwo) // do hooks function
for _, hk := range hooks {
err := hk()
if err != nil {
panic(err)
}
}
}

signalpackage main


import (
"fmt"
"os"
"os/signal"
"syscall"
"time"
) func main() {
go signalHandle()
time.Sleep(time.Second * )
} func signalHandle() {
for {
ch := make(chan os.Signal)
signal.Notify(ch, syscall.SIGINT, syscall.SIGUSR1, syscall.SIGUSR2, syscall.SIGHUP)
sig := <-ch
switch sig {
default:
fmt.Println("default")
case syscall.SIGHUP:
fmt.Println("SIGHUP")
case syscall.SIGINT:
fmt.Println("SIGINT")
case syscall.SIGUSR1:
fmt.Println("SIGUSR1")
case syscall.SIGUSR2:
fmt.Println("SIGUSR2") }
}
} 闭包
package main

import "fmt"

func adder() func(int) int {
sum :=
return func(x int) int {
sum += x
return sum
}
} func main() {
pos, neg := adder(), adder()
for i := ; i < ; i++ {
fmt.Println(
pos(i),
neg(-*i),
)
}
}

 
 

json 解析标签

//tag中的第一个参数是用来指定别名
//比如Name 指定别名为 username `json:"username"`
//如果不想指定别名但是想指定其他参数用逗号来分隔
//omitempty 指定到一个field时 如果该字段为nil或0值(数字0,字符串"",空数组[]等),则打包的JSON结果不会有这个字段//- 指定到一个field时 无论有没有值将Person序列化成json时都会忽略该字段
//string 指定到一个field时
//比如Person中的Count为int类型 如果没有任何指定在序列化
//到json之后也是int 比如这个样子 "Count":0
//但是如果指定了string之后序列化之后也是string类型的
//那么就是这个样子"Count":"0"
type Person struct {
Name string `json:"username"`
Age int
Gender bool `json:",omitempty"`
Profile string
OmitContent string `json:"-"`
Count int `json:",string"`
}

命令

格式化(美化)文件代码
>go fmt -x test 或者
>gofmt -l -w E:\projects\go\src\test\main.go

  

golang 小知识点记录的更多相关文章

  1. C#小知识点记录(QQ交流群的一个小问题)Linq提取数据

    请教 这里 LINQ想 找到 最后的 4条 记录 然后放在 这里这个 List Linq查找怎么写呀? 解答:写了一个小例子作为解答. namespace C_Sharp { class Progra ...

  2. C#小知识点记录,对象的深拷贝

    在CSDN中的定义是: public static string CompareExchange( ref string location1, string value, string compara ...

  3. js,css小知识点记录

    JS手册中提到:可以使用任意表达式作比较表达式.任何值为0.null.未定义或空字符串的表达式被解释为 false.其他任意值的表达式解释为 true.也就是说,这里会隐式的转换为布尔值.       ...

  4. 日常css和js小知识点记录

    2015-6-29 1.<meta name="viewport" content="width=device-width,user-scalable=no&quo ...

  5. springMVC等小知识点记录。。。持续更新

    1.springMVC 项目根路径访问页面配置 <!-- 表示当访问主页时自动转发到index控制器 --> <mvc:view-controller path="/&qu ...

  6. iOS小知识点记录

    1.创建视图的两种方法:用代码创建视图,创建XIB文件.如何决定使用哪种方法?参考法则:如果视图没有子视图,就用代码创建:如果有子视图,就通过XIB文件创建. 2.创建视图的时候,视图控制器会调用lo ...

  7. React Native小知识点记录

    1>查看 RN 的所有历史版本: npm view react-native versions -json 2>查看 RN 的当前版本: npm view react-native ver ...

  8. css 设置小知识点记录

    1.消除控件与控件之间的边界 /* 公共样式 用于消除控件与控件之间的边界 */ *{ margin:0; padding:0} 2.设置背景图片大小与控件大小一致 #frame_top{ min-h ...

  9. C# 小知识点记录

    1.当计算数据有小数点时不要使用float和double类型的数据,使用这两个会计算不准确.使用decimal 2.如果使用decimal计算数据,遇到除不进的数据有很多小数点的时候,在计算结果后面接 ...

随机推荐

  1. 【洛谷5287】[HNOI2019] JOJO(主席树优化KMP)

    点此看题面 大致题意: 每次往一个字符串末尾加上\(x\)个字符\(c\),或者回到某一历史版本,求\(KMP\)的\(\sum Next_i\). 问题转化 考虑到可以离线. 于是,我们就可以用一个 ...

  2. 课堂笔记--------JavaScript 的DOM操作

    1.DOM的基本概念 DOM是文档对象模型,这种模型为树模型:文档是指标签文档:对象是指文档中每个元素:模型是指抽象化的东西. 2.Window对象操作 一.属性和方法: 属性(值或者子对象): op ...

  3. POJ 3185 The Water Bowls 【一维开关问题 高斯消元】

    任意门:http://poj.org/problem?id=3185 The Water Bowls Time Limit: 1000MS   Memory Limit: 65536K Total S ...

  4. C# .Net Framework4.5中配置和使用managedCUDA及常见问题解决办法

    主要参考英文帖子.我就不翻译了哈.很容易懂的. 先说明我的运行平台: 1.IDE:Visual Studio 2012 C# .Net Framework4.5,使用默认安装路径: 2.显卡类型:NV ...

  5. Android学习笔记_43_网络通信之文件断点上传

    1.建立服务端,用于接收上传的文件.这里使用Socket,文件可能会比较大.采用多线程编程,防止并发. package com.socket.service; import java.io.File; ...

  6. Android学习笔记_12_网络通信之从web获取资源数据到Android

    从web获取图片信息,并显示到android的imageView控件. 一.添加网络访问权限. <uses-permission android:name="android.permi ...

  7. UGUI防止点击穿透

    if (!IsPointerOverGameObject(Input.mousePosition)) { } public static bool IsPointerOverGameObject(Ve ...

  8. deep learning学习记录二

    接着我的微博继续八卦吧 微博里问了几个人,关于deep learning和cnn的区别,有不少热心网友给了回答,非常感谢.结合我听课和看文章的理解,我大胆大概总结一下: 在上世纪90年代,neural ...

  9. 菜鸟崛起 DB Chapter 3 MySQL 5.6的基本操作

    3   MySQL的基本操作 上面我们学习一如何安装数据库,那么这节我们来认识一下数据库: 我们在MySQL安装后,在data目录下会自动生成几个必须的数据库,可以使用SHOW DATABASES语句 ...

  10. SpringBoot学习17:springboot热部署配置

    spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用. devtool ...