golang

Golang读取并修改非主流配置文件

匿名 (未验证) 提交于 2019-12-03 00:03:02
今天工作中碰到的问题,要求修改此配置文件,没看出来是什么格式,用了下面的思路: mysql { # If any of the files below are set, TLS encryption is enabled tls { ca_file = "/etc/ssl/certs/my_ca.crt" ca_path = "/etc/ssl/certs/" certificate_file = "/etc/ssl/certs/private/client.crt" private_key_file = "/etc/ssl/certs/private/client.key" cipher = "DHE-RSA-AES256-SHA:AES128-SHA" tls_required = yes tls_check_cert = no tls_check_cert_cn = no } # If yes, (or auto and libmysqlclient reports warnings are # available), will retrieve and log additional warnings from # the server if an error has occured. Defaults to 'auto' warnings = auto }

Golang channel

匿名 (未验证) 提交于 2019-12-03 00:02:01
channel channel是goroutine进行通信的管道,数据从一端发送到另一端,通过通道接收。 不要通过共享内存来通信,而应该通过通信来共享内存 go语言中,要传递某个数据给另一个goroutine,可以把这个数据封装成一个对象,然后把这个对象的指针传入某个channel中,另外一个goroutine从这个channel中读出这个指针,并处理其指向的内存对象。Go从语言层面保证同一个时间只有一个goroutine能访问channel中的数据,所以go的做法就是使用channel来通信,通过通信来传递内存中的数据,是的内存数据在不同的goroutine中传递,而不是使用共享内存来通信。 注意点 1.用于goroutine,传递消息的 2.通道,每个都有相关联的数据类型,nil chan无法使用,类似于nil map,不能直接储存键值对 3.使用通道传递数据:<-,根据箭头方法进行数据传递 4.阻塞: 发送数据: chan <- data ,阻塞的,直到另一条goroutine读取数据来解除阻塞 读取数据: data <- chan ,阻塞的,直到另一条goroutine写出数据来解除阻塞 5.本身channel就是同步的,意味着同一时间,只能有一条goroutine来操作 最后:通道是goroutine之间的连接,所以通道的发送和接收必须处在不同的goroutine中。

golang 指针类型* ,以及 &amp;取变量内存地址

匿名 (未验证) 提交于 2019-12-02 23:59:01
1.golang 中,指针是一种类型,指向变量所在的内存单元(不是内存地址)。申明: 在变量名前加上星号字符,比如 * age ,指向变量 age 所在的内存单元 2. & :获取变量在计算机内存中的地址, & age ,取出变量 age 所在内存地址,一般地址是十六进制。 3 : 申明指针* age , 打印指针内存单元的值 ** age .如下面 x * int , * x 就是指针所对应的值。 package mainimport ( "fmt" "reflect" ) func main (){ k := 40 fmt . Println ( k ) fmt . Println ( say ( "hello,world" , "lf" )) fmt . Println ( reflect . TypeOf ( k )) //检查变量类型 fmt.Println(&k) // 获取变量在计算机内存中的地址,可在变量名前面加上&字符。 // &k 引用的是变量k的值,值所在的内存地址 showMemoryAddress(&k) //返回的地址是相同的}func showMemoryAddress(x *int){ // *int参数类型位指向整数的指针,而不是整数 fmt.Println(*x) //本身就是指针,打印地址不需要 &这个符号,如果想使用指针指向的变量的值

golang 内存对齐问题 记录

匿名 (未验证) 提交于 2019-12-02 23:59:01
eg 1: 1 package main 2 3 import ( 4 "fmt" 5 "unsafe" 6 ) 7 8 func main() { 9 fmt.Printf("%d\n", unsafe.Sizeof(struct { 10 a byte 11 i8 int 12 b byte 13 }{})) 14 } 结果:24 eg 2: 1 package main 2 3 import ( 4 "fmt" 5 "unsafe" 6 ) 7 8 func main() { 9 fmt.Printf("%d\n", unsafe.Sizeof(struct { 10 i8 int 11 a byte 12 b byte 13 }{})) 14 } 结果:16 来源:博客园 作者: ywdxz 链接:https://www.cnblogs.com/ywdxz/p/11484040.html

golang中创建logger时候踩过的坑

匿名 (未验证) 提交于 2019-12-02 23:57:01
错误的代码 package main import ( "fmt" "io" "log" "os" ) var logger *log.Logger func init(){ fmt.Println("创建日记录日志文件") f,err:=os.OpenFile("./Log.log",os.O_WRONLY|os.O_CREATE|os.O_APPEND,0644) if err!=nil{ log.Fatal("os.OpenFile err",err) } defer f.Close() writers := []io.Writer{ f, os.Stdout} //实例化Writer接口 fileAndStdoutWriter := io.MultiWriter(writers...) //MultiWriter创建一个Writer接口,会将提供给其的数据写入所有创建时提供的Writer接口 logger = log.New(fileAndStdoutWriter, "", log.Ldate|log.Ltime|log.Lshortfile) logger.Println("---> logger:check to make sure is works") } func main(){ logger.Println("注意,这里是不会打印和写入文件的") } 出现的错误

golang 使用 consul 做服务发现

匿名 (未验证) 提交于 2019-12-02 23:57:01
当我们服务越来越多,如果服务配置了弹性伸缩,或者当服务不可用时,我们需要随时动态掌握可以使用的服务数量,并向可提供响应的服务发送请求。这时我们需要服务发现功能,当新增服务时,服务可以自动向consul注册,客户端直接向consul发送请求,获取可用服务的地址和端口;当服务不可用时,动态的更新consul,删除该服务在consul中的列表 docker安装consul docker run --name consul1 -d -p 8500:8500 -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8600:8600 consul:latest agent -server -bootstrap-expect 2 -ui -bind=0.0.0.0 -client=0.0.0.0 8500 http 端口,用于 http 接口和 web ui 8300 server rpc 端口,同一数据中心 consul server 之间通过该端口通信 8301 serf lan 端口,同一数据中心 consul client 通过该端口通信 8302 serf wan 端口,不同数据中心 consul server 通过该端口通信 8600 dns 端口,用于服务发现 -bbostrap-expect 2: 集群至少两台服务器,才能选举集群leader -ui

Golang 单例模式 singleton pattern

匿名 (未验证) 提交于 2019-12-02 23:57:01
在Java中,单例模式的实现主要依靠类中的静态字段。在Go语言中,没有静态类成员,所以我们使用的包访问机制和函数来提供类似的功能。来看下下面的例子: } 来测试下: } 输出结果: 相关阅读: http://www.linuxidc.com/Linux/2013-09/90748.htm http://www.linuxidc.com/Linux/2013-04/83106.htm Ubuntu http://www.linuxidc.com/Linux/2013-05/85171.htm http://www.linuxidc.com/Linux/2013-05/84709.htm http://www.linuxidc.com/Linux/2013-05/83697.htm http://www.linuxidc.com/Linux/2013-05/84060.htm 来源:博客园 作者: ExplorerMan 链接:https://www.cnblogs.com/ExMan/p/11454011.html

golang可见性规则(公有与私有,访问权限)

匿名 (未验证) 提交于 2019-12-02 23:57:01
Go语言没有像其它语言一样有public、protected、private等访问控制修饰符,它是通过字母大小写来控制可见性的,如果定义的常量、变量、类型、接口、结构、函数等的名称是大写字母开头表示能被其它包访问或调用(相当于public),非大写开头就只能在包内使用(相当于private,变量或常量也可以下划线开头) 例如: visibility/test.go package visibility import "fmt" const PI = 3.145 const pi = 3.14 const _PI = 3.14 var P int = 1 var p int = 1 func private_function ( ) { fmt . Println ( "only used in this package!" ) } func Public_fuction ( ) { fmt . Println ( "used in anywhere!" ) } main.go package main import ( "visibility" "fmt" ) func main ( ) { visibility . Public_fuction ( ) //used in anywhere! //visibility.private_function() //不能访问私有函数

golang make()的第三个参数

匿名 (未验证) 提交于 2019-12-02 23:57:01
学习了一段时间golang,大概可以用golang做一些小东西了,于是回顾了一下一些基础的东西。golang分配内存有一个make函数,该函数第一个参数是类型,第二个参数是分配的空间,第三个参数是预留分配空间,前两个参数都很好理解,但我对第三个参数却一脸懵逼,例如a:=make([]int, 5, 10), len(a)输出结果是5,cap(a)输出结果是10,然后我对a[4]进行赋值发现是可以得,但对a[5]进行赋值发现报错了,于是郁闷这个预留分配的空间要怎么使用呢,于是google了一下发现原来预留的空间需要重新切片才可以使用,于是做一下记录,代码如下。 package main import "fmt" func main (){ a := make ([] int , 10 , 20 ) fmt . Printf ( "%d, %d\n" , len ( a ), cap ( a )) fmt . Println ( a ) b := a [: cap ( a )] fmt . Println ( b ) } 输出结果 10 , 20 [ 0 0 0 0 0 0 0 0 0 0 ] [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] 来源:博客园 作者: ExplorerMan 链接:https://www.cnblogs.com

golang微服务框架go-micro 入门笔记2.3 micro工具之消息接收和发布

匿名 (未验证) 提交于 2019-12-02 23:57:01
本章节阐述micro消息订阅和发布相关内容 阅读本文前你可能需要进行如下知识储备 broker代理 微服务之间需要通过broker来传递消息,go-micro支持http/nats/memory三种broker,其中http是默认的broker。 同时,go-micro以强大的插件形式,提供如下几种常见的broker。 $ls gocloud / googlepubsub / grpc / kafka / mqtt / nats / nsq / proxy / rabbitmq / redis / snssqs / sqs / stan / stomp / http HTTP Broker 是基于HTTP的异步broker,源代码在 github.commicrogo-micro@v1.9.1brokerbroker.go 中,默认DefaultBroker为http var ( DefaultBroker Broker = newHttpBroker () ) httpbroker实际上就是一个结构体 type httpBroker struct { id string //微服务ID address string //主机地址 opts Options //一些配置 mux * http . ServeMux //通过这个监听其他端发送的http请求 c * http .