golang编程学习
一起分享golang实战代码
柠檬(lemon)
这个作者很懒,什么都没留下…
展开
-
使用golang操作redis-curd
package mainimport( "fmt" "github.com/garyburd/redigo/redis" "time")type Redis struct{ pool *redis.Pool Server string Port int Password string DB int}func (r *Redis) InitRedisConn(){ r.pool = &redis.Pool{ Dial:func() (redis.Conn,er原创 2020-10-11 12:36:44 · 216 阅读 · 1 评论 -
使用反射实现序列化与反序列化
conf.iniconfig.ini ;test#test[server]ip=192.168.0.100port = 8080[ mysql]username=rootpassword = abc-123database=testhost=192.168.0.1.1port=3306ini_config.go //实现代码package configimport ("errors""fmt""io/ioutil""os""reflect""strconv"原创 2020-09-10 17:03:57 · 302 阅读 · 0 评论 -
go文件断点续传(简易版本)
package mainimport ( "fmt" "io" "os" "strconv" "time")type MyCopy struct{}func NewMyCopy() *MyCopy { return new(MyCopy)}var last string = "/tmp/last.txt"/*** 功能:文件复制(支持断点续传)* Seek(offset int64, whence int) (ret int64, err error) 表示设置当前光原创 2020-09-01 23:01:01 · 403 阅读 · 0 评论 -
线性表的单链式存储
package mainimport ( "fmt")type Node struct { value interface{} next *Node}type LinkedList struct { Size int First *Node}var linkedList *LinkedList = &LinkedList{}/** 在头部添加元素*/func Add(value interface{}) { node := &Node{}原创 2020-06-03 19:41:04 · 229 阅读 · 0 评论 -
golang实现一个简易的缓存系统
项目结构:├── README.md├── cache│ ├── cache.go│ ├── cache_store.go│ ├── iCache.go│ ├── mcache.go│ └── mcache_test.go├── cache_server│ ├── cacheServer.go│ └── cacheServer_test.go├── constant│ └── constant.go├── cuserror│ └── error原创 2020-05-19 17:53:13 · 1105 阅读 · 3 评论 -
go 的slice
slice初始化的表达式和初始化数组的表大式的区别:slice字面上看去和数组字面量很像,都是用逗号分隔并用花括号括起来的一个元素序列,但是slice没有指定长度。这种隐式区别的结果分别是创建具有固定的长度的数组和创建指定数组的slice。和数组一样,slice也按照顺序指定元素,也可以通过索引来指定元素,或者两者结合。和数组不同的是,slice无法做比较,因此不能用==来测试两个slice是否拥有相同的元素。标准库里提供了bytes.Equal来做比较两个字节slice([]byte)。但是对其原创 2020-05-19 16:06:28 · 231 阅读 · 1 评论 -
golang字符串取反
package mainimport "fmt"func reverse(s string)string{ dt := []rune(s) for i:=0; i < len(dt)/2;i++{ dt[i],dt[len(dt)-i-1] = dt[len(dt)-i-1],dt[i] } return string(dt)}func main(){ s := "1234567" fmt.Println(reverse(s)) s = "hello world"原创 2020-05-19 15:01:09 · 779 阅读 · 0 评论 -
获取文件基本名
package mainimport "fmt"import "strings"/** 获取文件基本名 */func basename(s string) string{ for i:= len(s)-1; i>=0;i--{ if s[i] == '/' { s = s[i+1:] break } } //保留最后一个'.'之前的的内容 for i:= len(s)-1; i>=0; i--{ if s[i] == '.' { s = s原创 2020-05-19 14:31:07 · 185 阅读 · 0 评论 -
go io.Copy使用
package mainimport( "os" "fmt" "net/http" "io" "bufio")func main(){ url := "https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=2134092665,3141066907&fm=26&gp=0.jpg" resp,err := http.Get(url) if err != nil { fmt.Fprintf(os.Std原创 2020-05-18 22:41:22 · 1280 阅读 · 0 评论 -
go程序在各平台下的打包方式
go build 不同系统下的可执行文件Golang 支持在一个平台下生成另一个平台可执行程序的交叉编译功能。1、Mac下编译Linux, Windows平台的64位可执行程序:$ CGO_ENABLED=0GOOS=linuxGOARCH=amd64go build test.go$ CGO_ENABLED=0GOOS=windowsGOARCH=amd64go build test.go2、Linux下编译Mac, Windows平台的64位可执行程序:原创 2020-05-18 22:39:40 · 648 阅读 · 0 评论 -
golang使用net/http简单抓取一个页面
import( "fmt" "io/ioutil" "net/http" "os")func main(){ for _,url := range os.Args[1:]{ resp,err := http.Get(url) if err != nil { fmt.Fprintf(os.Stderr,"fetch:%v\n",err) os.Exit(1) } b,err := ioutil.ReadAll(resp.Body) resp.Body.Close原创 2020-05-18 22:03:57 · 166 阅读 · 0 评论 -
go从标准输入读取字符并统计出现的次数
package mainimport ( "fmt" "bufio" "os")/** 统计次数 从标准输入读取值 */func main(){ counts := make(map[string]int) input := bufio.NewScanner(os.Stdin) for input.Scan() { value := input.Text() if value == "Quit"{ break } counts[value]++ }原创 2020-05-18 21:37:16 · 505 阅读 · 0 评论 -
对字符串进行取反操作
package mainimport( "fmt")/**对英文字符取反操作 */func reverse(str string) string{ if str == "" { return "" } s := []byte(str) var switchCount int if len(s) % 2 == 0 { switchCount = len(s)/...原创 2020-05-06 18:08:07 · 1380 阅读 · 0 评论 -
gin自定义一个中间并加载使用它
package mainimport ( "github.com/gin-gonic/gin" "log" "net/http" "time")//中间件就是一个钩子函数func StatCost() gin.HandlerFunc{ return func(c *gin.Context) { t := time.Now() //设置公共参数 c.Set("use...原创 2020-04-26 17:20:13 · 234 阅读 · 0 评论 -
gin框架渲染不同的类型的数据
目录结构:tree ..├── Go-Protobuf-Tips├── renderingDataMain.go├── static│ └── 01.jpeg├── templates│ ├── posts│ │ └── index.tmpl│ └── users│ └── index.tmpl模板文件内容:package main...原创 2020-04-26 16:58:47 · 354 阅读 · 0 评论 -
gin处理请求绑定参数
package mainimport ( "github.com/gin-gonic/gin" "net/http")type Login struct { Username string `form:"username" json:"username" binding:"required"` Password string `form:"password" json:"pass...原创 2020-04-26 16:20:32 · 883 阅读 · 1 评论 -
使用gin框架上传多个文件
package mainimport ( "fmt" "github.com/gin-gonic/gin" "log" "net/http")func main(){ e := gin.Default() //set a lower memory limit for multipart forms (default is 32 Mib) //e.MaxMultipartM...原创 2020-04-26 14:16:58 · 1040 阅读 · 0 评论 -
使用gin框架上传文件
import ( "fmt" "github.com/gin-gonic/gin" "log" "net/http")func main(){ e := gin.Default() //set a lower memory limit for multipart forms (default is 32 Mib) e.MaxMultipartMemory = 8 <&...原创 2020-04-26 14:04:04 · 442 阅读 · 0 评论 -
golang使用gin框架实现restful风格对数据库的增删查改操作
依赖包的下载: go get github.com/jmoiron/sqlx go get github.com/gin-gonic/gin 1.目录结构:restfulServerJackm1688sMacBook-Air:restfulServer JackMeng$ tree ..├── db│ ├── IUser.go //数据库CURD接口设计│ ├──...原创 2020-04-26 13:04:08 · 1589 阅读 · 0 评论 -
Golang 1.13: 解决国内 go get 无法下载的问题
在下载并安装 go 1.13 之后,安装 golang gin 依赖包的时候,发现长时间没有响应,无法下载,从返回的错误信息看应该是国内无法访问 golang.org。$ go get -u github.com/gin-gonic/ginpackage golang.org/x/sys/unix: unrecognized import path "golang.org/x/sys/...转载 2020-04-25 19:22:29 · 1265 阅读 · 0 评论 -
配置redis的主从节点
和MySQL主从复制的原因一样,Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况。为了分担读压力,Redis支持主从复制,Redis的主从结构可以采用一主多从或者级联结构。Redis主从复制可以根据是否是全量分为全量同步和增量同步:全量同步 Redis全量复制一般发生在Slave初始化阶段,这时Slave需要将Master上的所有数据都复制一份。具体步骤如下: 1...原创 2020-04-24 11:52:09 · 2097 阅读 · 0 评论 -
golang使用sqlx第三方包进行数据的CURD操作
package mainimport( "fmt" _"github.com/go-sql-driver/mysql" "github.com/jmoiron/sqlx")var Dbx *sqlx.DBfunc initXDb() error { var err error dsn := "root:abc@198920@tcp(localhost:3306)/golan...原创 2020-04-24 07:47:12 · 458 阅读 · 0 评论 -
使用golang自带的net/http包写一个简单的http服务
依赖第三包:mysql下载依赖:go get github.com/go-sql-driver/mysql该HttpServer提供了以下功能:1.首页访问功能2.用户登录验证功能3.对数据库的CURD功能创建所需的表:user_tb | CREATE TABLE `user_tb` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user...原创 2020-04-23 22:09:00 · 628 阅读 · 0 评论 -
Go Protobuf Tips
reference:Go Protobuf TipsA couple of tips for working with proto files in golangPosted on April 18, 2017 (Last modified on August 28, 2018) | 4 min (788 words) | 5 commentsI’ve had my fair ...转载 2020-04-23 10:01:04 · 261 阅读 · 0 评论 -
golang tcp入门第一个demo记录一下哈
package chatimport ( "fmt" "io" "log" "net" "strings" "time")var serverList map[string]net.Conn = make(map[string]net.Conn)func Server(host string) { log.Printf("启动【柠檬】室程序\n") log.Print...原创 2020-04-22 15:05:38 · 226 阅读 · 0 评论 -
golang使用net工具包模拟post form请求
HTTP POST请求协议格式如下:POST POST /formLogin HTTP/1.1HOST: www.XXX.comUser-Agent: Mozilla/5.0(Windows NT 6.1;rv:15.0) Firefox/15.0username=jack&password=abc-123使用springBoot构建服务端:package com.mfz.sp...原创 2020-04-21 18:24:23 · 948 阅读 · 0 评论 -
golang中的方法
package mainimport( "fmt")/** * 方法能给用户定义类型添加新的行为。方法实际上也是函数,只是在声明时, * 在关键字func和方法之间增加一个参数 * 首字母大写权限为public,所有引入者都可访问 * 首字母小写权限为private,只限本包内访问 */type User struct{ Name string Passwd st...原创 2020-04-08 21:16:00 · 142 阅读 · 0 评论 -
golang结构体
package mainimport "fmt"/** *结构体类型 */ //声明一个结构体类型type Person struct{ name string //默认为空 age int //default is 0 sex rune //default is 0 address string //default is null}//嵌套其他结构体type...原创 2020-04-08 20:50:57 · 145 阅读 · 0 评论