摘要: gin内置验证器使用 func TopicUrl(f1 validator.FieldLevel) bool { return true //返回true表示验证成功 } func main(){ router:=gin.Default() if v, ok := binding.Validator.Engine().(*validator.Validate); ok ... 阅读全文
posted @ 2019-12-19 23:06 离地最远的星 阅读(3499) 评论(0) 推荐(1)
摘要: type TopicQuery struct { UserName string `form:"username" json:"username"` Page int `form:"page" json:"page" binding:"required"` //binding:required表示必须有这个参数,否则err := context.Bind(query)... 阅读全文
posted @ 2019-12-19 23:02 离地最远的星 阅读(247) 评论(0) 推荐(0)
摘要: work,工作模式 一个消息只能被一个消费者获取 工作模式就是simple模式多了几个消费者,其他一样来自为知笔记(Wiz) 阅读全文
posted @ 2019-12-19 23:01 离地最远的星 阅读(226) 评论(0) 推荐(0)
摘要: gorm会默认给struct名称设置小写,并且加上复数形式 tc := &src.TopicClass{} //用orm去建表时驼峰个是你会用下划线隔开,所有TopicClass对应表为topic_class db.First(tc,2) //只取topic_class查询结果第一条,后面的2是可选参数,加上表示取主键=2的数据集的第一条,结构体必须标注了主键才可以查询到结果,如下面clas... 阅读全文
posted @ 2019-12-19 23:01 离地最远的星 阅读(244) 评论(0) 推荐(0)
摘要: simple模式代码 package RabbitMQ import ( "fmt" "github.com/streadway/amqp" "log" ) const MQURL = "amqp://guest:guest@127.0.0.1:5672/imooc" //创建rabbitmq结构体实例 type RabbitMQ struct { conn... 阅读全文
posted @ 2019-12-19 22:59 离地最远的星 阅读(244) 评论(0) 推荐(0)
摘要: rabbitmq是面向消息的中间件,用于组件之间的解耦,主要体现在消息的发送者和消费者之间无强依赖关系 rabbitmq特点: 高可用 拓展性,多语言客户端,管理界面 使用场景:流量削峰,异步处理,应用解耦等 VirtualHost RabbitMq的VirtualHost(虚拟消息服务器),每个VirtualHost相当于一个相对独立的RabbitMQ服务器;每个VirtualHost之... 阅读全文
posted @ 2019-12-19 22:58 离地最远的星 阅读(173) 评论(0) 推荐(0)
摘要: Publish/Subscribe,订阅模式 消息被路由投递给多个队列,一个消息可以被多个消费者获取 订阅模式代码 package RabbitMQ import ( "fmt" "github.com/streadway/amqp" "log" ) const MQURL = "amqp://guest:guest@127.0.0.1:5672/imooc" ... 阅读全文
posted @ 2019-12-19 22:54 离地最远的星 阅读(177) 评论(0) 推荐(0)
摘要: routing,路由模式 一个消息被多个消费者获取,并且消息的目标队列可被生产者指定 package RabbitMQ import ( "fmt" "github.com/streadway/amqp" "log" ) const MQURL = "amqp://guest:guest@127.0.0.1:5672/imooc" //创建rabbitmq结构体实... 阅读全文
posted @ 2019-12-19 22:52 离地最远的星 阅读(196) 评论(0) 推荐(0)
摘要: Redis的五大数据类型 redis的五大数据类型是,String(字符串),Hash(哈希),List(列表),Set(集合),zset(sorted set: 有序集合) string字符串 string是redis最基本的类型,一个key对应一个value Str1 := "hello" St 阅读全文
posted @ 2019-12-19 22:51 离地最远的星 阅读(518) 评论(0) 推荐(0)
摘要: go操作redis package main import ( "fmt" "github.com/garyburd/redigo/redis" ) func main() { //连接到redis conn, err := redis.Dial("tcp", "localhost:6379") if err != nil { fmt.Println... 阅读全文
posted @ 2019-12-19 22:50 离地最远的星 阅读(293) 评论(0) 推荐(0)
摘要: package main import ( "fmt" "sort" ) type ServerSlice []Server type Server struct { Weight int } //只要实现了下面三个方法就可以传入sort方法使用 func (p ServerSlice) Len() int { return len(p) } fu... 阅读全文
posted @ 2019-12-19 22:49 离地最远的星 阅读(401) 评论(0) 推荐(0)
摘要: package util import ( "fmt" "hash/crc32" "math/rand" "sort" "time" ) type HttpServer struct { //目标server类 Host string Weight int CWeight int //当前权重 ... 阅读全文
posted @ 2019-12-19 22:48 离地最远的星 阅读(1195) 评论(0) 推荐(0)
摘要: package main import ( "log" "net/http" "net/http/httputil" "net/url" "os" "os/signal" "regexp" "反向代理/util" ) type ProxyHandler struct { } func (*ProxyHandler) ServeH... 阅读全文
posted @ 2019-12-19 22:47 离地最远的星 阅读(453) 评论(0) 推荐(0)
摘要: 来自为知笔记(Wiz) 阅读全文
posted @ 2019-12-19 22:46 离地最远的星 阅读(212) 评论(0) 推荐(0)
摘要: package util import ( "fmt" "hash/crc32" "math/rand" "time" ) type HttpServer struct { //目标server类 Host string Weight int } func NewHttpServer(host string, weight int) *Ht... 阅读全文
posted @ 2019-12-19 22:45 离地最远的星 阅读(304) 评论(0) 推荐(0)
摘要: func (this *LoadBalance) RoundRobinByWeight3() *HttpServer { //平滑加权轮询 for _, s := range this.Servers { s.CWeight = s.CWeight + s.Weight } sort.Sort(this.Servers) max := this.... 阅读全文
posted @ 2019-12-19 22:44 离地最远的星 阅读(215) 评论(0) 推荐(0)
摘要: 来自为知笔记(Wiz) 阅读全文
posted @ 2019-12-19 22:43 离地最远的星 阅读(291) 评论(0) 推荐(0)
摘要: package util import ( "math/rand" "time" ) type HttpServer struct { //目标server类 Host string } func NewHttpServer(host string) *HttpServer { return &HttpServer{Host: host} } type Lo... 阅读全文
posted @ 2019-12-19 22:41 离地最远的星 阅读(251) 评论(0) 推荐(0)
摘要: Go实现 在头里设置WWW-Authenticate 返回401 func (webhandler) ServeHTTP(writer http.ResponseWriter, request *http.Request) { writer.Header().Set("WWW-Authenticate", `Basic realm="您必须输入用户名和密码"`) writer... 阅读全文
posted @ 2019-12-19 22:41 离地最远的星 阅读(185) 评论(0) 推荐(0)
摘要: package main import ( "io/ioutil" "log" "net/http" "os" "os/signal" ) type ProxyHandler struct { } func (*ProxyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { d... 阅读全文
posted @ 2019-12-19 22:40 离地最远的星 阅读(123) 评论(0) 推荐(0)
摘要: func (this *LoadBalance) RoundRobinByWeight() *HttpServer { server := this.Servers[ServerIndices[this.CurIndex]] this.CurIndex = (this.CurIndex + 1) % len(ServerIndices) //ServersIndices存放的是按照... 阅读全文
posted @ 2019-12-19 22:39 离地最远的星 阅读(187) 评论(0) 推荐(0)
摘要: func (this *LoadBalance) SelectByWeightBetter(ip string) *HttpServer { rand.Seed(time.Now().UnixNano()) sumList := make([]int, len(this.Servers)) //this.servers是服务器列表 sum := 0 for ... 阅读全文
posted @ 2019-12-19 22:38 离地最远的星 阅读(170) 评论(0) 推荐(0)
摘要: package util import ( "fmt" "hash/crc32" "math/rand" "time" ) type HttpServer struct { //目标server类 Host string Weight int } func NewHttpServer(host st 阅读全文
posted @ 2019-12-19 22:11 离地最远的星 阅读(338) 评论(0) 推荐(0)
摘要: ![](https://xiahualou.oss-cn-shanghai.aliyuncs.com/img/20191219143156.png) 来自为知笔记(Wiz) 阅读全文
posted @ 2019-12-19 22:08 离地最远的星 阅读(533) 评论(0) 推荐(0)
摘要: 创建服务端并调用 syntax = "proto3"; package services; message ProdRequest { int32 prod_id = 1; //传入id } message ProdResponse { int32 prod_stock = 1; //商品库存 } 阅读全文
posted @ 2019-12-19 22:06 离地最远的星 阅读(241) 评论(0) 推荐(0)
摘要: package main import ( "io/ioutil" "log" "net/http" "os" "os/signal" . "反向代理/util" ) type ProxyHandler struct { } func (*ProxyHandler) ServeHTTP(w http 阅读全文
posted @ 2019-12-19 22:06 离地最远的星 阅读(242) 评论(0) 推荐(0)
摘要: Models.proto syntax = "proto3"; package services; //商品模型 message ProdModel { int32 prod_id = 1; string prod_name = 2; float prod_price = 3; } Prod.pro 阅读全文
posted @ 2019-12-19 22:04 离地最远的星 阅读(731) 评论(0) 推荐(0)
摘要: package main import ( "context" "fmt" "google.golang.org/grpc" "grpccli/services" "log" ) func main() { conn, err := grpc.Dial("localhost:8081", grpc. 阅读全文
posted @ 2019-12-19 22:02 离地最远的星 阅读(149) 评论(0) 推荐(0)
摘要: 上面的的是通用的,可以生成java php python等等之类的通用版本 Go版本安装 go get -v github.com/golang/protobuf/protoc-gen-go protoc --go_out=../services Prod.proto 通过这个命令根据proto文件 阅读全文
posted @ 2019-12-19 21:56 离地最远的星 阅读(288) 评论(0) 推荐(0)
摘要: 服务端流 syntax = "proto3"; package services; import "Models.proto"; message UserScoreRequest { repeated UserInfo users = 1; } message UserScoreResponse { 阅读全文
posted @ 2019-12-19 21:55 离地最远的星 阅读(770) 评论(0) 推荐(0)
摘要: 定义Models.proto syntax = "proto3"; package services; import "google/protobuf/timestamp.proto"; //引入timestamp的proto文件 //商品模型 message ProdModel { int32 p 阅读全文
posted @ 2019-12-19 21:53 离地最远的星 阅读(169) 评论(0) 推荐(0)
摘要: 使用第三方库protoc-gen-validate,validate.proto是我从下载的库里面复制出来的,可以直接指定目录,我为了避免麻烦直接拷贝出来了 syntax = "proto3"; package services; import "google/protobuf/timestamp. 阅读全文
posted @ 2019-12-19 21:32 离地最远的星 阅读(1817) 评论(0) 推荐(0)
摘要: package main import ( "context" "fmt" "google.golang.org/grpc" "google.golang.org/grpc/credentials" "grpccli/services" "log" ) func main() { creds, er 阅读全文
posted @ 2019-12-19 21:30 离地最远的星 阅读(124) 评论(0) 推荐(0)
摘要: 使用枚举、获取分区商品库存 syntax = "proto3"; package services; import "google/api/annotations.proto"; message ProdRequest { int32 prod_id = 1; //传入id } message Pr 阅读全文
posted @ 2019-12-19 21:30 离地最远的星 阅读(195) 评论(0) 推荐(0)
摘要: package main import ( "google.golang.org/grpc" "google.golang.org/grpc/credentials" "grpcpro/services" "log" "net" ) func main() { creds, err := crede 阅读全文
posted @ 2019-12-19 21:28 离地最远的星 阅读(154) 评论(0) 推荐(0)
摘要: 服务端代码 package main import ( "crypto/tls" "crypto/x509" "google.golang.org/grpc" "google.golang.org/grpc/credentials" "grpcpro/services" "io/ioutil" "n 阅读全文
posted @ 2019-12-19 21:24 离地最远的星 阅读(1949) 评论(0) 推荐(0)
摘要: syntax = "proto3"; package services; import "Models.proto"; message UserScoreRequest { repeated UserInfo users = 1; } message UserScoreResponse { repe 阅读全文
posted @ 2019-12-19 21:21 离地最远的星 阅读(307) 评论(0) 推荐(0)
摘要: 下载go get -v github.com/grpc-ecosystem/grpc-gateway,然后把这个包下面的third-party下面的google文件夹拷贝到Prod.proto的同级目录下 syntax = "proto3"; package services; import "go 阅读全文
posted @ 2019-12-19 21:20 离地最远的星 阅读(1147) 评论(0) 推荐(0)
摘要: 重新编写proto文件 syntax = "proto3"; package services; import "google/api/annotations.proto"; message ProdRequest { int32 prod_id = 1; //传入id } message Prod 阅读全文
posted @ 2019-12-19 21:17 离地最远的星 阅读(1848) 评论(0) 推荐(0)
摘要: package main import ( "google.golang.org/grpc" "google.golang.org/grpc/credentials" "grpcpro/services" "log" "net/http" ) func main() { creds, err := 阅读全文
posted @ 2019-12-19 21:16 离地最远的星 阅读(1421) 评论(0) 推荐(0)
摘要: 将crt文件和server_no_passwd.key这两个文件拷贝到服务端的keys文件夹中 来自为知笔记(Wiz) 阅读全文
posted @ 2019-12-19 21:15 离地最远的星 阅读(235) 评论(0) 推荐(0)
摘要: models.proto syntax = "proto3"; package services; import "google/protobuf/timestamp.proto"; //引入timestamp的proto文件 //商品模型 message ProdModel { int32 pro 阅读全文
posted @ 2019-12-19 21:11 离地最远的星 阅读(571) 评论(0) 推荐(0)
摘要: 等待一组协程结束,用sync.WaitGroup操作 package main import ( "fmt" "sync" "time" ) func main() { wg := sync.WaitGroup{} for i := 0; i < 10; i++ { wg.Add(1) go calc(&wg, i) } wg... 阅读全文
posted @ 2019-12-19 20:59 离地最远的星 阅读(342) 评论(0) 推荐(0)
摘要: Go语言之unsafe包介绍及使用 unsafe内容介绍 type ArbitraryType int type Pointer *ArbitraryType func Sizeof(x ArbitraryType) uintptr func Offsetof(x ArbitraryType) uintptr func Alignof(x ArbitraryType) uintptr uns... 阅读全文
posted @ 2019-12-19 20:57 离地最远的星 阅读(641) 评论(0) 推荐(0)
摘要: server package main import ( "fmt" "net" ) func main() { listener, err := net.ListenUDP("udp", &net.UDPAddr{ IP: net.IPv4(0, 0, 0, 0), Port: 30000, }) if err !... 阅读全文
posted @ 2019-12-19 20:56 离地最远的星 阅读(284) 评论(0) 推荐(0)
摘要: server package main import ( "fmt" "net" ) //单独处理连接的函数 func process(conn net.Conn) { var buf = make([]byte, 1024) n, err := conn.Read(buf) // 返回读取到的字节数和错误信息 if err != nil { ... 阅读全文
posted @ 2019-12-19 20:54 离地最远的星 阅读(299) 评论(0) 推荐(0)
摘要: type T struct { f string `one:"1" two:"2"blank:""` } func main() { t := reflect.TypeOf(T{}) f, _ := t.FieldByName("f") fmt.Println(f.Tag) // one:"1" two:"2"blank:"" v, ok := f.Tag.... 阅读全文
posted @ 2019-12-19 20:53 离地最远的星 阅读(275) 评论(0) 推荐(0)
摘要: struct和byte类型转换 import ( "fmt" "unsafe" ) type TestStructTobytes struct { data int64 } type SliceMock struct { addr uintptr len int cap int } func main() { var testStruct = &TestStruc... 阅读全文
posted @ 2019-12-19 20:53 离地最远的星 阅读(2083) 评论(0) 推荐(0)
摘要: package main import "fmt" func tryRecover() int { defer func() { r := recover() if err, ok := r.(error); ok { fmt.Println("Error occurred", err) } else { ... 阅读全文
posted @ 2019-12-19 20:51 离地最远的星 阅读(300) 评论(0) 推荐(0)
摘要: panic的参数是一个空接口类型 interface{},所以任意类型的变量都可以传递给panic recover只有在defer后面的函数体里直接调用才能捕获panic终止异常,否则返回nil异常继续向外传递 defer recover() //这种写法捕捉失败 defer fmt.Println(recover()) //这种写法捕捉失败 defer func(){ func(){ ... 阅读全文
posted @ 2019-12-19 20:50 离地最远的星 阅读(1227) 评论(0) 推荐(0)
摘要: 三次握手 ​ 主动发起请求端,发送SYN(SYN表示建立连接) ​ 被动建立连接请求端,会去应答ACK同时发送SYN ​ 主动发起请求端,发送应答ACK (ACK表示响应) 四次挥手 1主动关闭连接请求端,发送FIN (FIN表示关闭连接) 2被动关闭连接请求端,应答ACK 半关闭完成 3被动关闭连接请求端,发送FIN 4主动关闭连接请求端,应答ACK 因... 阅读全文
posted @ 2019-12-19 20:49 离地最远的星 阅读(314) 评论(0) 推荐(0)
摘要: 字典被设置成not addressble,所以不可以直接修改value成员(结构体或数组) 正确做法是返回整个value,待修改后再设置字典键值,或直接用指针类型 如果返回的是指针,可以透过指针直接修改目标对象 在创建时预先准备足够空间有助于提升性能,减少扩张时的内存分配和重新哈希操作来自为知笔记(Wiz) 阅读全文
posted @ 2019-12-19 20:45 离地最远的星 阅读(277) 评论(0) 推荐(0)
摘要: itoa可以套公式,下面的依旧会按照公式运算 package main import "fmt" func main() { const ( b = 1 << (10 * iota) kb mb tb pb ) fmt.Println(b, kb, mb, tb, pb) //1 1024... 阅读全文
posted @ 2019-12-19 20:43 离地最远的星 阅读(167) 评论(0) 推荐(0)
摘要: io包 type Reader interface{ Read(p []byte)(n int,err error) } type Writer interface{ Write(p []byte)(n int,err err) } for循环中一次读出文件 n := -1 for { n, err = file.Read(bs) if n== 0 || e... 阅读全文
posted @ 2019-12-19 20:37 离地最远的星 阅读(278) 评论(0) 推荐(0)
摘要: go启动一个简单的httpserver package main import ( "fmt" "log" "net/http" ) func main() { http.HandleFunc("/", sayhelloName) //设置访问的路由 err := http.ListenAndServe(":8080", nil) //设置监听的端口 i... 阅读全文
posted @ 2019-12-19 20:33 离地最远的星 阅读(101) 评论(0) 推荐(0)
摘要: Go语言runtime.Gosched()函数浅析 这个函数的作用是让当前goroutine让出CPU,好让其它的goroutine获得执行的机会。同时,当前的goroutine也会在未来的某个时间点继续运行。 请看下面这个例子(show.go): package main import ( "fmt" ) func showNumber (i int) { fmt.Pr... 阅读全文
posted @ 2019-12-19 20:29 离地最远的星 阅读(434) 评论(0) 推荐(0)
摘要: package main import ( "fmt" "runtime" ) func main() { n := runtime.NumCPU() fmt.Print(n) runtime.GOMAXPROCS(n - 1) //设置cpu运行的数目 } 来自为知笔记(Wiz) 阅读全文
posted @ 2019-12-19 20:26 离地最远的星 阅读(838) 评论(0) 推荐(0)
摘要: go奉行通过通信来共享内存,不像c和c++通过共享内存来通信 协程是轻量级的线程,编译器做优化** 有独立的栈空间 共享程序堆空间 调度由用户控制 协程是轻量级的线程 并行:多个cpu共同执行 并发 多个程序在cpu上不停的切换 go协程也是抢占式的 情景:在多线程情况下如果多个线程去下载同一个视频,这样多个线程可能会同时被io阻塞 这段时间所有线程都阻塞了,线程轮询所有线程都... 阅读全文
posted @ 2019-12-19 20:18 离地最远的星 阅读(506) 评论(0) 推荐(0)
摘要: sync.Cond代表条件变量,需要配置锁才能有用 package main import ( "fmt" "runtime" "sync" "time" ) func main() { runtime.GOMAXPROCS(4) testCond() } func testCond() { c := sync.NewCond(... 阅读全文
posted @ 2019-12-19 20:17 离地最远的星 阅读(229) 评论(0) 推荐(0)
摘要: 判断io读取是否结束,尽量用if n==0这种方式,因为可以判断很多种情况 package main import ( "fmt" "io" "net/http" ) func handler(w http.ResponseWriter, r *http.Request) { w.Write([]byte("hello")) fmt.Println(r.... 阅读全文
posted @ 2019-12-19 20:15 离地最远的星 阅读(508) 评论(0) 推荐(0)
摘要: Go函数类型的使用 type myfunc func() string // 声明函数变量 func main() { fn := func() string { return "bbb" } // 声明map myMap := make(map[string]myfunc) // map赋值 myMap["fn"] = fn fmt.Printl... 阅读全文
posted @ 2019-12-19 20:13 离地最远的星 阅读(300) 评论(0) 推荐(0)
摘要: import "sync" var ( myMap = make(map[int]int, 10) lock sync.Mutex //声明一个全局的互斥锁 //sync 包 同步 // Mutex:是互斥 ) func test(n int){ res := 1 for i:=1;i<=n;i++{ res *=1 ... 阅读全文
posted @ 2019-12-19 20:13 离地最远的星 阅读(226) 评论(0) 推荐(0)
摘要: Go序列化和反序列化 package main import ( "bufio" "encoding/json" "fmt" "os" ) type Monster struct { Name string Age int Skill string } func (m *Monster) Store(path string) { b, ... 阅读全文
posted @ 2019-12-19 20:09 离地最远的星 阅读(111) 评论(0) 推荐(0)
摘要: https://blog.csdn.net/zzhongcy/article/details/97243826来自为知笔记(Wiz) 阅读全文
posted @ 2019-12-19 20:07 离地最远的星 阅读(400) 评论(0) 推荐(0)
摘要: package main import ( "fmt" "html/template" "net/http" ) type User struct { UserName string Age int } func info(w http.ResponseWriter, r *http.Request) { t, err := temp... 阅读全文
posted @ 2019-12-19 20:06 离地最远的星 阅读(701) 评论(0) 推荐(0)
摘要: channel的基本介绍 channel的本质是一个数据结构队列 数据是先进先出 FIFO 线程安全,多goroutine访问时,不需要加锁,就是说channel本身是线程安全的 channel是由类型的,一个string的channel只能存放string类型数据 无缓冲的channel关闭后,再往外读数据读到的是该管道数据类型的初始值 有缓冲的channel的channel关闭后,如果管道... 阅读全文
posted @ 2019-12-19 20:04 离地最远的星 阅读(1268) 评论(0) 推荐(0)
摘要: ARP与RARP详细解析 原创zlnnjit 发布于2016-04-03 15:12:15 阅读数 9544 收藏 展开 地址解析协议 ARP和逆地址解析协议RARP 1.基本关系: ​ 2.地址解析协议 ARP的实现过程: 不管网络层使用的是什么协议,在实际网络的链路上传送数据帧时,最终还是必须使用硬件地址。 ‚每一个主机都设有一个 ARP高速缓存(AR... 阅读全文
posted @ 2019-12-19 20:02 离地最远的星 阅读(368) 评论(0) 推荐(0)
摘要: package main import ( "errors" "fmt" "reflect" ) type Student struct { Name string `json:"name"` Age int `json:"age"` } type Teacher struct { name string } func (Studen... 阅读全文
posted @ 2019-12-19 20:00 离地最远的星 阅读(101) 评论(0) 推荐(0)
摘要: Go 系列教程 —— 31. 自定义错误 使用 New 函数创建自定义错误 创建自定义错误最简单的方法是使用 errors 包中的 New 函数。 在使用 New 函数 创建自定义错误之前,我们先来看看 New 是如何实现的。如下所示,是 errors 包 中的 New 函数的实现。 // Package errors implements functions to manipulate ... 阅读全文
posted @ 2019-12-19 19:57 离地最远的星 阅读(218) 评论(0) 推荐(0)
摘要: package main import ( "fmt" "unsafe" ) type W struct { a byte b int32 c int32 } func main() { var w = W{b: 32, c: 64} t := unsafe.Pointer(&w) ... 阅读全文
posted @ 2019-12-19 19:53 离地最远的星 阅读(994) 评论(0) 推荐(0)
摘要: GO语言变量逃逸分析 空格键_11aa · 2019-07-09 21:32:41 · 274 次点击 · 预计阅读时间 1 分钟 · 大约1分钟之前 开始浏览 这是一个创建于 2019-07-09 21:32:41 的文章,其中的信息可能已经有所发展或是发生改变。 引言 ​ 内存管理的灵活性是让C/C++程序猿们又爱又恨的东西,比如malloc或new一块内存我可以整个进程使用... 阅读全文
posted @ 2019-12-19 19:53 离地最远的星 阅读(1063) 评论(0) 推荐(0)
摘要: 字符串常用函数 package main import ( "fmt" "strings" ) func main() { str := "I love my work and i love my family too" ret := strings.Split(str, " ") fmt.Println(ret) ... 阅读全文
posted @ 2019-12-19 19:53 离地最远的星 阅读(131) 评论(0) 推荐(0)
摘要: jsoniter高性能json库 非常快,支持java和go marshal使用的一些坑 package main import ( "encoding/json" "fmt" ) type User struct { Id int `json:"id,string"` //加了这个序列化到json中int类型会被转换成string类型 Name st... 阅读全文
posted @ 2019-12-19 19:52 离地最远的星 阅读(1158) 评论(0) 推荐(0)
摘要: package main import ( "log" "net/http" "os" "os/signal" ) type webhandler struct { } type web2handler struct { } func (webhandler) ServeHTTP(writer http.ResponseWriter, request *htt... 阅读全文
posted @ 2019-12-19 19:50 离地最远的星 阅读(108) 评论(0) 推荐(0)
摘要: 使用Fprintln追加字符串到文件末尾 package main import ( "fmt" "os" ) func main() { f,err := os.Create("test.txt") defer f.Close() if err != nil{ return } if err!=nil{ ... 阅读全文
posted @ 2019-12-19 19:49 离地最远的星 阅读(143) 评论(0) 推荐(0)
摘要: package main import ( "fmt" "os" ) func main() { f, err := os.Open("/test.txt") if err, ok := err.(*os.PathError); ok { fmt.Println("File at path", err.Path, "failed to open"... 阅读全文
posted @ 2019-12-19 19:48 离地最远的星 阅读(219) 评论(0) 推荐(0)
摘要: 互斥锁 package main import ( "fmt" "sync" "time" ) var mux sync.Mutex func Printer(s string) { mux.Lock() for _, v := range s { fmt.Printf("%c", v) time.Sleep(300 ... 阅读全文
posted @ 2019-12-19 19:47 离地最远的星 阅读(114) 评论(0) 推荐(0)
摘要: 数组 如果元素支持==和!=操作符,那么数组也支持此操作 a := [...]int{1, 2, 3} b := [...]int{4, 5, 6} println(a == b) // false println(a != b) // true //下面的代码会抛出异常,因为map类型不支持==和!=运算 c := [...]map[int]str... 阅读全文
posted @ 2019-12-19 19:46 离地最远的星 阅读(97) 评论(0) 推荐(0)
摘要: 这种方式是Go所推荐的,优点就是安全,尽管这种操作会发生内存拷贝,导致性能上会有所损耗,这在处理一般业务时这种损耗是可以忽略的。但如果是拷贝频繁的情况下,想要进行性能优化时,就需要引入unsafe.Pointer了: func main() { var s = []byte("我永远喜欢藤原千花.jpg") Res := *(*string)(unsafe.Pointer(&s... 阅读全文
posted @ 2019-12-19 19:45 离地最远的星 阅读(439) 评论(0) 推荐(0)
摘要: package main import ( "fmt" "unsafe" ) type TestStructTobytes struct { data int64 s int8 } type SliceMock struct { addr uintptr len int cap int } func main() { ... 阅读全文
posted @ 2019-12-19 19:44 离地最远的星 阅读(1365) 评论(0) 推荐(0)
摘要: package main import ( "bufio" "fmt" "io" "strings" ) type intGen func() int func (g intGen) Read(p []byte) (n int, err error) { next := g() if next > 10000 { //因为是斐波那契额数列,所以... 阅读全文
posted @ 2019-12-19 19:43 离地最远的星 阅读(195) 评论(0) 推荐(0)
摘要: package main import ( "fmt" "sync" "time" ) func add(i *int, mutex *sync.Mutex) { mutex.Lock() *i++ mutex.Unlock() } func main() { var mutex sync.Mutex //声明锁的时候不要用指针,锁需要... 阅读全文
posted @ 2019-12-19 19:42 离地最远的星 阅读(389) 评论(0) 推荐(0)
摘要: 命令行参数,向整个函数传参 go run xxx.go argv1 argv2 os.Args package main import ( "fmt" "os" ) func main() { fmt.Println(os.Args) } 来自为知笔记(Wiz) 阅读全文
posted @ 2019-12-19 19:40 离地最远的星 阅读(78) 评论(0) 推荐(0)
摘要: slice的实现 切片的结构定义 type SliceHeader struct{ Data uintptr Len int Cap int } //由上述代码可以看出切片的开头部分和Go字符串一样,但是切片多了一个Cap成员来表示切片指向的内存空间的最大容量(对应元素的个数,而不是字节数) 切片的定义方式 var ( a []int b = []int{} ... 阅读全文
posted @ 2019-12-19 19:40 离地最远的星 阅读(228) 评论(0) 推荐(0)
摘要: 类型断言传递的是实例值的副本,如果实例是指针,则是指针的副本 package main import "fmt" func main() { var a = 34 var i interface{} = &a o := i.(*int) fmt.Println(i, o) } // output: 0xc4200160a0 0xc4200160a0来自为... 阅读全文
posted @ 2019-12-19 19:39 离地最远的星 阅读(104) 评论(0) 推荐(0)
摘要: package main import "fmt" type A struct{ } func (a *A) Say(){ fmt.Print("haha") } func main(){ var a A a.Say() //方法绑定的是实例指针编译器会自动把实例转成指针类型传到方法中,反之如果方法绑定的是实例,指针也会被编译器自动转成实例传入到方法内部 (&a).Say(... 阅读全文
posted @ 2019-12-19 19:38 离地最远的星 阅读(130) 评论(0) 推荐(0)
摘要: 支持匿名接口类型,可直接用为变量定义,或结构体字段 package main type data struct { } func (data) string() string { return "haha" } type node struct { data interface { string() string //匿名接口类型 } } fun... 阅读全文
posted @ 2019-12-19 19:38 离地最远的星 阅读(110) 评论(0) 推荐(0)
摘要: package main import ( "bufio" "fmt" "io" "strings" ) type intGen func() int //正规的函数式编程都是先定义函数类型 func fibonacci() intGen { //声明一个返回intGen类型的斐波那契生成器 a, b := 0, 1 return func... 阅读全文
posted @ 2019-12-19 19:36 离地最远的星 阅读(100) 评论(0) 推荐(0)
摘要: package main import ( "fmt" "net" "strings" "time" ) type Client struct { C chan string Name string Addr string } //创建全局map,存储在现空间 var onlineMap map[string]Client //... 阅读全文
posted @ 2019-12-19 19:35 离地最远的星 阅读(106) 评论(0) 推荐(0)
摘要: 使用反射机制,编写函数的适配器,桥连接 test1 := func(v1 int, v2 int){ t.Log(v1,v2) } 基本介绍 反射可以在运行时动态获取变量的各种信息,比如变量的类型,类别 如果是结构体变量,还可以获取到结构体本身的信息(包括字段,方法) 通过反射,可以修改变量的值可以调用关联的方法 使用反射,需要import("reflect") 变量 inte... 阅读全文
posted @ 2019-12-19 19:35 离地最远的星 阅读(148) 评论(0) 推荐(0)
摘要: 主要内容: 由对象获取反射类型,由对象获取反射值 由反射值获取反射类型 反射值重新转换成对象 遍历字段 遍历方法 易知go语言的struct是值类型,如果修改需要使用引用传递。反射修改值类型,要获取其指针的值类型。此方法适用于int string 以及struct。 反射调用的注意点: 类方法要大写,以便能被其它包,也就是reflect包调用。小写的方法可以由反射查询,但是不能调用。 要获取... 阅读全文
posted @ 2019-12-19 19:35 离地最远的星 阅读(220) 评论(0) 推荐(0)
摘要: 周期定时器 func main() { timer := time.NewTicker(1 * time.Second) //NewTicker是周期定时器,NewTimer是普通定时器只能用一次 for { <-timer.C fmt.Println("good") } } 定时器 time.Sleep(time.Secon... 阅读全文
posted @ 2019-12-19 19:34 离地最远的星 阅读(1164) 评论(0) 推荐(0)
摘要: go语言中的包 一个目录下的统计文件归属一个包,package的声明要一致 package声明的包和对应的目录名可以不一致,但习惯上还是可以写成一直的 包可以嵌套 同包下的函数不需要导入包,可以直接使用 main包,main函数所在的包,其他包不可以引用 点操作 import ( . "fmt" ) func main(){ println("haha") //使用... 阅读全文
posted @ 2019-12-19 19:33 离地最远的星 阅读(131) 评论(0) 推荐(0)
摘要: 闭包对闭包外的环境引入是直接引用,编译器监测到闭包,会将闭包饮用的外部变量分配到堆上 package main func fa(a int) func(i int) int { return func(i int) int { fmt.println(&a) a = a + i return a } } func main() ... 阅读全文
posted @ 2019-12-19 19:33 离地最远的星 阅读(77) 评论(0) 推荐(0)
摘要: const定义在main函数里面就是局部常量 package main import "fmt" func add(a int) func(int) int { return func(i int) int { fmt.Println(&a) a += i return a } } func main() { cons... 阅读全文
posted @ 2019-12-19 19:33 离地最远的星 阅读(84) 评论(0) 推荐(0)
摘要: ## 创建巨大字符串时性能提升的方法 package main import ( "bytes" "fmt" ) func test() string{ var b bytes.Buffer b.Grow(1000) //将buffer的容量提升到1000,然后写入到字符中 for i :=0;i<1000;i++{ b.WriteS... 阅读全文
posted @ 2019-12-19 19:33 离地最远的星 阅读(181) 评论(0) 推荐(0)
摘要: package main import "fmt" type optionClient func(*options) func setAge(a int) optionClient { return func(o *options) { o.Age = a } } func setSex(s int) optionClient { return func(o ... 阅读全文
posted @ 2019-12-19 19:31 离地最远的星 阅读(246) 评论(0) 推荐(0)
摘要: package main import ( "fmt" "runtime" ) func test() { defer fmt.Println("ccccccccc") //只要成功注册了无论是return 还是goexit都会被调用 runtime.Goexit() //退出函数所在当前go程 defer fmt.Println("dddddddddd... 阅读全文
posted @ 2019-12-19 19:31 离地最远的星 阅读(104) 评论(0) 推荐(0)
摘要: go语言在for循环中遍历的临时变量地址是一样的 func main() { //SetLogConfToEtcd() for i := 0; i < 5; i++ { a := i fmt.Printf("%p\n", &i) //可以看到i的地址都是一样的,也就是说i是复用的 fmt.Printf("%p\n", &a) //... 阅读全文
posted @ 2019-12-19 19:30 离地最远的星 阅读(345) 评论(0) 推荐(0)
摘要: 单行模式(?s:(.?))万能用法尽量匹配少的文本,最关键的是可以匹配换行的文本,直接写.?不能匹配\n package main import ( "fmt" "regexp" ) func main() { str := "3.14 23.22 abc a7c 2.43 mfc cat 8ca azc cba" //解析,编译正则表达式 ret :... 阅读全文
posted @ 2019-12-19 19:29 离地最远的星 阅读(495) 评论(0) 推荐(0)