<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[fjgui的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/fjgui</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; fjgui]]></copyright><item><title><![CDATA[spark executor日志无法写入]]></title><link>https://blog.youkuaiyun.com/fjgui/article/details/110203560</link><guid>https://blog.youkuaiyun.com/fjgui/article/details/110203560</guid><author>fjgui</author><pubDate>Thu, 26 Nov 2020 20:28:10 +0800</pubDate><description><![CDATA[spark_logging.py:


import logging
import logging.config
import os

LOG_FILE="./xxx.log"
def getLogger(name):
    directory = os.path.dirname(LOG_FILE)
    try:
        os.stat(directory)
    except:
        os.mkdir(directory)

    log_settings = {
      ]]></description><category></category></item><item><title><![CDATA[golang json inline用法]]></title><link>https://blog.youkuaiyun.com/fjgui/article/details/104063806</link><guid>https://blog.youkuaiyun.com/fjgui/article/details/104063806</guid><author>fjgui</author><pubDate>Tue, 21 Jan 2020 17:07:22 +0800</pubDate><description><![CDATA[package main

import (
	"encoding/json"
	"fmt"
)

type Project struct {
	Key   string `json:"key"`
	Value string `json:"value"`
}

type JiraHttpReqField struct {
	Project     `json:",inline"`
	Summar...]]></description><category></category></item><item><title><![CDATA[glang template使用]]></title><link>https://blog.youkuaiyun.com/fjgui/article/details/87699856</link><guid>https://blog.youkuaiyun.com/fjgui/article/details/87699856</guid><author>fjgui</author><pubDate>Tue, 19 Feb 2019 12:24:31 +0800</pubDate><description><![CDATA[test.template


{{. | printadd}}
{{. | printupdate}}
{{. | printdel}}

test.go


package main

import (
	"fmt"
	"html/template"
	"os"
)

type TemplateInfo struct {
	OperateType string
	NewRecord   str...]]></description><category></category></item><item><title><![CDATA[golang fatal error: concurrent map read and map write]]></title><link>https://blog.youkuaiyun.com/fjgui/article/details/83789953</link><guid>https://blog.youkuaiyun.com/fjgui/article/details/83789953</guid><author>fjgui</author><pubDate>Tue, 06 Nov 2018 16:43:59 +0800</pubDate><description><![CDATA[go语言切片slice的线程协程安全问题

一、map并发读写问题

如果map由多协程同时读和写就会出现 fatal error:concurrent map read and map write的错误

如下代码很容易就出现map并发读写问题

func main(){

c := make(map[string]int)
       Go func() {//开一个协程写map
     ...]]></description><category></category></item><item><title><![CDATA[golang defer return执行先后顺序]]></title><link>https://blog.youkuaiyun.com/fjgui/article/details/83789896</link><guid>https://blog.youkuaiyun.com/fjgui/article/details/83789896</guid><author>fjgui</author><pubDate>Tue, 06 Nov 2018 16:42:02 +0800</pubDate><description><![CDATA[Go语言中延迟函数defer充当着 cry...catch 的重任，使用起来也非常简便，然而在实际应用中，很多gopher并没有真正搞明白defer、return和返回值之间的执行顺序，从而掉进坑中，今天我们就来揭开它的神秘面纱！

先来运行下面两段代码：

A. 无名返回值的情况



 


	package main
	
	 
	
	import (
	
	
	&quot;fmt&quot;
	
	
	)
	
...]]></description><category></category></item><item><title><![CDATA[mysql ERROR 1045 (28000): (using password: YES)问题解决]]></title><link>https://blog.youkuaiyun.com/fjgui/article/details/78871973</link><guid>https://blog.youkuaiyun.com/fjgui/article/details/78871973</guid><author>fjgui</author><pubDate>Fri, 22 Dec 2017 12:27:55 +0800</pubDate><description><![CDATA[限制ip连接范围了，只限制本地连接
查看用户：
mysql> SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;
+--------------------------------------+
| query                                |
+-]]></description><category></category></item><item><title><![CDATA[time.After 在select-case中使用的正确姿势]]></title><link>https://blog.youkuaiyun.com/fjgui/article/details/78549716</link><guid>https://blog.youkuaiyun.com/fjgui/article/details/78549716</guid><author>fjgui</author><pubDate>Thu, 16 Nov 2017 12:07:59 +0800</pubDate><description><![CDATA[前言

select 的语法如下所示
每个case都必须是一个通信
所有channel表达式都会被求值
所有被发送的表达式都会被求值
如果任意某个通信可以进行，它就执行；其他被忽略。
如果有多个case都可以运行，Select会随机公平地选出一个执行。其他不会执行。 
否则：如果有default子句，则执行该语句。
如果没有default字句，select将阻塞，直到某个通信可以运行；Go不]]></description><category></category></item><item><title><![CDATA[移动场景下通信协议Json,FlatBuffers、ProtocolBuffers、MessagePack选优]]></title><link>https://blog.youkuaiyun.com/fjgui/article/details/78543367</link><guid>https://blog.youkuaiyun.com/fjgui/article/details/78543367</guid><author>fjgui</author><pubDate>Wed, 15 Nov 2017 17:51:43 +0800</pubDate><description><![CDATA[写文章注册登录







首页
下载App










移动场景下通信协议FlatBuffers、ProtocolBuffers、MessagePack选优
 

爱唱歌的王小猫 关注

2017.04.05 19:26 字数 2828 阅读 562评论
 0喜欢 2



大家都知道JSON是纯文本协议，优点是可读性高，使用]]></description><category></category></item><item><title><![CDATA[日志采集系统filebeat输出到logstash配置]]></title><link>https://blog.youkuaiyun.com/fjgui/article/details/78437150</link><guid>https://blog.youkuaiyun.com/fjgui/article/details/78437150</guid><author>fjgui</author><pubDate>Fri, 03 Nov 2017 16:46:49 +0800</pubDate><description><![CDATA[关于elk框架介绍参考链接：https://www.zybuluo.com/dume2007/note/665868
filebeat输出到logstash(filebeat汇集日志数据到logstash)


filebeat配置：
/etc/filebeat/filebeat.yml


修改配置filebeat.yml：
- input_type: log


  #]]></description><category></category></item><item><title><![CDATA[golang修改struct数组问题]]></title><link>https://blog.youkuaiyun.com/fjgui/article/details/78105392</link><guid>https://blog.youkuaiyun.com/fjgui/article/details/78105392</guid><author>fjgui</author><pubDate>Tue, 26 Sep 2017 18:27:35 +0800</pubDate><description><![CDATA[struct数组修改结构体值：// 11111111 project 11111111.go
package main

import (
	"fmt"
)

type Bid struct {
	CRID  string
	ImpID string
}

func main() {
	bid1 := Bid{
		CRID:  "222",
		ImpID: "aaa",
	}

	bid2 :]]></description><category></category></item><item><title><![CDATA[golang DES跟base64相结合加解密]]></title><link>https://blog.youkuaiyun.com/fjgui/article/details/73468947</link><guid>https://blog.youkuaiyun.com/fjgui/article/details/73468947</guid><author>fjgui</author><pubDate>Mon, 19 Jun 2017 16:41:51 +0800</pubDate><description><![CDATA[// DEStest project DEStest.go//注意base64对中文不同编码加解密结果不一样，即UTF-8跟GBK
package main

import (
	"bytes"
	"crypto/cipher"
	"crypto/des"
	"encoding/base64"
	"fmt"

	"github.com/axgle/mahonia"
)

//DES加密
func ]]></description><category></category></item><item><title><![CDATA[golang 匿名函数用法]]></title><link>https://blog.youkuaiyun.com/fjgui/article/details/62219355</link><guid>https://blog.youkuaiyun.com/fjgui/article/details/62219355</guid><author>fjgui</author><pubDate>Wed, 15 Mar 2017 12:26:25 +0800</pubDate><description><![CDATA[// http://studygolang.com/articles/3756
package main

import (
    "fmt"
)

func main() {
    c := func() int {
        fmt.Printf("func 1\n")
        return 555555
    }
    fmt.Println(c]]></description><category></category></item><item><title><![CDATA[golang生成唯一标识id]]></title><link>https://blog.youkuaiyun.com/fjgui/article/details/60136177</link><guid>https://blog.youkuaiyun.com/fjgui/article/details/60136177</guid><author>fjgui</author><pubDate>Fri, 03 Mar 2017 11:29:10 +0800</pubDate><description><![CDATA[package main

import (
        "crypto/md5"
        "crypto/rand"
        "encoding/base64"
        "encoding/hex"
        "fmt"
        "io"
)

//生成32位md5字串
func GetMd5String(s string) string {]]></description><category></category></item><item><title><![CDATA[golang reflect简单使用]]></title><link>https://blog.youkuaiyun.com/fjgui/article/details/56489291</link><guid>https://blog.youkuaiyun.com/fjgui/article/details/56489291</guid><author>fjgui</author><pubDate>Wed, 22 Feb 2017 17:09:45 +0800</pubDate><description><![CDATA[C:/Go/bin/go.exe build -i [F:/Go/src/reflect]
成功: 进程退出代码 0.
F:/Go/src/reflect/reflect.exe [F:/Go/src/reflect]
string
this is string
-------------------
float64
3.4
-------------------
&{fjgui]]></description><category></category></item><item><title><![CDATA[golang grpc服务端客户端简单源码实现]]></title><link>https://blog.youkuaiyun.com/fjgui/article/details/55269900</link><guid>https://blog.youkuaiyun.com/fjgui/article/details/55269900</guid><author>fjgui</author><pubDate>Thu, 16 Feb 2017 18:32:11 +0800</pubDate><description><![CDATA[协议
hello.proto 文件：

syntax = "proto3";
package hello;

message HelloRequest {
    string greeting = 1;
}

message HelloResponse {
    string reply = 1;
    repeated int32 number = 4;
}]]></description><category></category></item><item><title><![CDATA[golang中并发sync和channel]]></title><link>https://blog.youkuaiyun.com/fjgui/article/details/52423530</link><guid>https://blog.youkuaiyun.com/fjgui/article/details/52423530</guid><author>fjgui</author><pubDate>Sat, 03 Sep 2016 15:45:49 +0800</pubDate><description><![CDATA[golang中实现并发非常简单，只需在需要并发的函数前面添加关键字＂go"，但是如何处理go并发机制中不同goroutine之间的同步与通信，golang 中提供了sync包和channel机制来解决这一问题．

sync 包提供了互斥锁这类的基本的同步原语.除 Once 和 WaitGroup 之外的类型大多用于底层库的例程。更高级的同步操作通过信道与通信进行。





typ]]></description><category></category></item><item><title><![CDATA[Go tcp通信]]></title><link>https://blog.youkuaiyun.com/fjgui/article/details/52186853</link><guid>https://blog.youkuaiyun.com/fjgui/article/details/52186853</guid><author>fjgui</author><pubDate>Thu, 11 Aug 2016 21:37:30 +0800</pubDate><description><![CDATA[//server端
package main

import (
	"fmt"
	"net"
	"os"
	"strconv"
	"strings"
	"time"
	//"io/ioutil"
)

func main() {
	service := "localhost:7777"
	tcpAddr, err := net.ResolveTCPAddr("tcp4", service)
	c]]></description><category></category></item><item><title><![CDATA[如何处理被中断的系统调用]]></title><link>https://blog.youkuaiyun.com/fjgui/article/details/52131245</link><guid>https://blog.youkuaiyun.com/fjgui/article/details/52131245</guid><author>fjgui</author><pubDate>Fri, 05 Aug 2016 17:36:41 +0800</pubDate><description><![CDATA[1. 术语

1.1. 慢系统调用（Slow system call）

该术语适用于那些可能永远阻塞的系统调用。永远阻塞的系统调用是指调用永远无法返回，多数网络支持函数都属于这一类。如：若没有客户连接到服务器上，那么服务器的accept调用就会一直阻塞。

慢系统调用可以被永久阻塞，包括以下几个类别：

（1）读写‘慢’设备（包括pipe，终端设备，网络连接等）。读时，数据不存在]]></description><category></category></item><item><title><![CDATA[STL实现的底层数据结构简介]]></title><link>https://blog.youkuaiyun.com/fjgui/article/details/52129597</link><guid>https://blog.youkuaiyun.com/fjgui/article/details/52129597</guid><author>fjgui</author><pubDate>Fri, 05 Aug 2016 15:26:50 +0800</pubDate><description><![CDATA[C++ STL 的实现：

1.vector  底层数据结构为数组 ，支持快速随机访问

2.list    底层数据结构为双向链表，支持快速增删

3.deque   底层数据结构为一个中央控制器和多个缓冲区，详细见STL源码剖析P146，支持首尾（中间不能）快速增删，也支持随机访问

4.stack   底层一般用23实现，封闭头部即可，不用vector的原因应该是容量大小有限]]></description><category></category></item><item><title><![CDATA[关于socket阻塞与非阻塞情况下的recv、send、read、write返回值]]></title><link>https://blog.youkuaiyun.com/fjgui/article/details/52127233</link><guid>https://blog.youkuaiyun.com/fjgui/article/details/52127233</guid><author>fjgui</author><pubDate>Fri, 05 Aug 2016 11:11:36 +0800</pubDate><description><![CDATA[recv：
阻塞与非阻塞recv返回值没有区分，都是 0接收到数据大小，
特别：非阻塞模式下返回 值 
只是阻塞模式下recv会阻塞着接收数据，非阻塞模式下如果没有数据会返回，不会阻塞着读，因此需要 循环读取。
write：
阻塞与非阻塞write返回值没有区分，都是 0发送数据大小，
特别：非阻塞模式下返回值 
只是阻塞模式下write会阻塞着发送数据，非阻塞模式下如果暂时无法发送]]></description><category></category></item></channel></rss>