• #Go# 点滴积累


    此篇仅为不断记录趟过的坑

    StringToTimestamp

    import (
    	"time"
    )
    
    const TimeFormat = "2006-01-02T15:04:05.000000Z"
    
    func StringToTimestamp(dateString string) (int64, error) {
    	theTime, err := time.ParseInLocation(TimeFormat, dateString, time.UTC)
    	if err != nil {
    		return 0, err
    	}
    	sr := theTime.Unix()
    	return sr, nil
    }
    

    代码来源于华为SDK

    Redigo
    使用 hmset 进行 Do 操作时,如果是多个参数,可以写成一句,例如

    redis.Do("hmset", key, value1, value2, value3, ...)
    

    如果不知道有几个参数怎么办,用切片

    slice := make([]interface{}, 0)
    slice = append(slice, value1, value2, value3, ...)
    redis.Do("hmset", slice)
    

    需要注意的是,由于使用了切片作为容器传递多个参数给 hmset,所以切片的第一个值应给是 key 值,从第2个开始是真正的键值对

    go-mysql

    导入时使用以下方式

    "database/sql"
    _ "github.com/go-sql-driver/mysql"
    

    编译时如果没有下载 mysql 包是会提示没有导入?,使用 go get 下载下来

    go get github.com/go-sql-driver/mysql
    

    使用通用驱动接口 sql.DB 作为驱动操作的接口,因此声明一个 var Db *sql.DB 的全局变量来使用,并使用其进行数据操作

    type User struct {
    	Id int
    	Name string
    	Password string
    }
    
    var Db *sql.DB
    
    func main() {
        // 数据连接的通用格式: user:password@tcp(host:port)/dbname?params
    	dsn := "xxx:xxx@tcp(192.168.0.160:3306)/mydata?charset=utf8mb4"
    
    	Db, err := sql.Open("mysql", dsn)
    	if err != nil {
    		fmt.Printf("MySql connect error: %v
    ", err)
    		return
    	}
    
    	defer func() {
    		Db.Close()
    		fmt.Println("GoodBye, Db Closed")
    	}()
    
    	fmt.Println("MySql connected")
    
    	sqlString := "SELECT * FROM `users` LIMIT 0,1"
    
    	user := User{}
    	err = Db.QueryRow(sqlString).Scan(&user.Id, &user.Name, &user.Password)
    	if err != nil {
    		fmt.Printf("Db Query [%v] error: %v
    ", sqlString, err)
    		return
    	}
    
    	fmt.Printf("Id: %v, Name: %v, Password: %v
    ", user.Id, user.Name, user.Password)
    }
    

    http:HandleFunc 的时候,别忘了处理 /favicon.ico

    当浏览器请求服务的时候,总是会请求 /favicon.ico 造成额外的请求
    因此,一定要加入对此路径的处理,否则当浏览器进行请求时,就会额外增加对此资源的请求,如果未加处理,就会造成404或其它意外结果。

    http.HandleFunc("/", common.X404)
    http.HandleFunc("/favicon.ico", common.Favicon)
    http.HandleFunc("/register", user.Register)
    ...some else
    

    传地址,而不是变量
    描述:fmt.Scanln 语句不能停下接受输入
    解决:当参数是变量时,要传递地址(指针),而不是变量名。传指针是因为函数会把输入结果按照变量的地址放进去,从而更改变量的值,反之,输入结果会生成一个接收不到的新变量,和作为参数传递进来的变量没有关系。
    线索:func Scanln 返回值是 count 和 error,如果不传递指针没有返回变量值的地方
    感谢:Go语言技术交流群 @给我一杯酒

    langString :=""
    inputString := ""
    fmt.Scanln(&langString, &inputString)
    
  • 相关阅读:
    LINQ学习笔记 Join 与 Group join
    JAVA如何解压缩ZIP文档
    Thread.getContextClassLoader() is null
    如何部署 sources and javadoc jars
    Maven部署异常:on project standalone-pom: Cannot deploy artifact from the local repository解决方法
    Git忽略规则及.gitignore规则不生效的解决办法
    Java算法HmacSHA256不可用
    DHCP协议
    【Redis】Redis实现计数器
    【前端】JavaScript原型链与继承
  • 原文地址:https://www.cnblogs.com/cinlap/p/10483810.html
Copyright © 2020-2023  润新知