nonespace
3/25/2019 - 7:20 AM

数据库可视化

INSERT INTO `articles` VALUES (2, 1, '微信小程序的页面跳转和参数传递,页面生命周期', 1, '2017-05-03 06:15:00', 0, '页面的生命周期函数如下:\r\n```js\r\n\r\nPage({\r\n  data:{\r\n    \r\n  },\r\n  onLoad:function(options){\r\n    // 生命周期函数--监听页面加载\r\n    console.log(\"---index page onLoad---\")\r\n  },\r\n  onReady:function(){\r\n    // 生命周期函数--监听页面初次渲染完成\r\n    console.log(\"---index page oload---\");\r\n  },\r\n  onShow:function(){\r\n    // 生命周期函数--监听页面显示\r\n    console.log(\"---index onshow--\")\r\n  },\r\n  onHide:function(){\r\n    // 生命周期函数--监听页面隐藏\r\n    console.log(\"--index onHide--\")\r\n  },\r\n  onUnload:function(){\r\n    // 生命周期函数--监听页面卸载\r\n   console.log(\"--index onUnload--\")\r\n  },\r\n  onPullDownRefresh: function() {\r\n    // 页面相关事件处理函数--监听用户下拉动作\r\n     console.log(\"--index onPullDownRefresh--\")\r\n  },\r\n  onReachBottom: function() {\r\n    // 页面上拉触底事件的处理函数\r\n     console.log(\"--index onReachBottom--\")\r\n  },\r\n\r\n \r\n})\r\n\r\n```\r\n微信小程序里面的页面的跳转\r\n\r\n这只是一种跳转方式:传值方式需要根据get请求\r\n\r\n```js\r\nitemClick : function(){\r\n      wx.navigateTo({\r\n        url: \'../logs/logs\',\r\n        success: function(res){\r\n          console.log(111)\r\n        },\r\n        fail: function(res) {\r\n          // fail\r\n        },\r\n        complete: function(res) {\r\n          // complete\r\n        }\r\n      })\r\n  }\r\n\r\n```\r\n\r\n\r\n第二种\r\n\r\nredirect是否显示返回按钮\r\n```js\r\n <navigator url=\"../logs/logs?id=100\" redirect>文章一</navigator>\r\n\r\n切换栏:taps\r\n\r\n  \"tabBar\": {\r\n    \"list\": [{\r\n      \"pagePath\": \"pagePath\",\r\n      \"text\": \"text\",\r\n      \"iconPath\": \"iconPath\",\r\n      \"selectedIconPath\": \"selectedIconPath\"\r\n    }]\r\n  }\r\n```\r\n\r\n\r\n只要需要两个\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n', '/static/upload/smallpic/20181110/1541860052787906335.png');
INSERT INTO `articles` VALUES (3, 1, '微信小程序简单的登录页面的跳转', 2, '2017-05-04 13:35:07', 0, '首先设置tapbar\r\n在APP.js里面设置相关数据\r\n用户的信息;\r\n```js\r\n loginBtnClick:function(){\r\n    app.globalData.userInfo={username:this.data.username}\r\n   wx.navigateTo({\r\n     url: \'../user/user\',\r\n     success: function(res){\r\n       // success\r\n     },\r\n     fail: function(res) {\r\n       // fail\r\n     },\r\n     complete: function(res) {\r\n       // complete\r\n     }\r\n   })\r\n\r\n  }\r\n```\r\nlogin页面需要绑定数据;\r\n  <view class=\"login-item\">\r\n            <view class=\"login-item-info\">用户名</view>\r\n            <view><input bindinput=\"username\" /></view>\r\n        </view>\r\n\r\n        <view class=\"login-item\">\r\n            <view class=\"login-item-info\">密码</view>\r\n            <view><input type=\"password\" bindinput=\"password\" /></view>\r\n        </view>\r\n绑定登录事件;\r\n\r\n```\r\n loginBtnClick:function(){\r\n    app.globalData.userInfo={username:this.data.username}\r\n   wx.navigateTo({\r\n     url: \'../user/user\'\r\n   })\r\n\r\n  }\r\n```\r\n\r\n\r\n显示用户 信息的user页\r\n```\r\nuser.js\r\nwx.redirectTo({url:\"../login/login\"})\r\nvar app=getApp();\r\nPage({\r\n  data:{\r\n    dataUser:\"asaaaa\"\r\n  },\r\n  onLoad:function(options){\r\n    // 页面初始化 options为页面跳转所带来的参数\r\n    this.setData({dataUser:app.globalData.userInfo.username})\r\n  },\r\n  onReady:function(){\r\n    // 页面渲染完成\r\n  },\r\n  onShow:function(){\r\n    // 页面显示\r\n  },\r\n  onHide:function(){\r\n    // 页面隐藏\r\n  },\r\n  onUnload:function(){\r\n    // 页面关闭\r\n  }\r\n})\r\n```', '/static/upload/smallpic/20181110/1541860052787906335.png');
INSERT INTO `articles` VALUES (4, 1, 'url解析,微信开发 url 解析', 3, '2017-09-06 14:30:08', 0, '```\r\nvar url = (window.location.search).slice(1,window.location.search.length) \r\n//  	获取当前文件    ?merchantid=5&restaurantid=5&tableid=6473828&tablename=A201&sceneid3\r\n    	var json =getField(url) \r\n \r\n    	function getField(url){\r\n    		var arr  = url.split(\'&\')\r\n    		var json = {}\r\n    		for(i in arr){\r\n    			var s =  arr[i].split(\"=\")\r\n    			json[s[0]] = s[1]\r\n    			\r\n    		}\r\n    		return json\r\n    		\r\n    	}\r\n    	\r\n    	console.log(json)\r\n```\r\n\r\n\r\n\r\n\r\n\r\n\r\n', '/static/upload/smallpic/20181110/1541860052787906335.png');
INSERT INTO `articles` VALUES (5, 1, '小程序日常坑', 4, '2018-11-10 15:21:01', 0, '①input标签采用弹性布局,否则设置宽度百分百时候会出现问题\r\n②带文件的发送请求不要使用wx.request,应该使用uploadFild 来发送请求\r\n③this指向的问题,在回调中this会改变,需要保存指针\r\n④需要通过this.setData方法来设置data值的变化\r\n⑤使用wx:for  或者其他wx:if 之类时候最好用block包裹起来\r\n⑥在使用swiper的时候,如果同时使用上拉刷新功能,需要给swiper或者其父类计算高度,否则每次滑动swiper的时候都会\r\n触发上拉刷新onReachBottom这个函数 ,另外如果采用swiper想实现Y轴滑动,里面的swiper-item 包一个view.这个view\r\n需要设置overflow-y:auto 才能实现Y轴滑动 ,另外,虽然使用了overflow-scrolling:touch 能够增加流畅度.但是\r\n在ios下,会出现屏幕回弹得BUG,在安卓不会. 另外,在开发者工具,swiper无论在任何位置下拉,都会触发onPullDownRefresh\r\n这个函数实现下拉加载更多..但是在手机端是不会出现这个效果,开发者工具版本为0.19.191100\r\n\r\n⑦表单提交sumbit,如果不想一个个获取input标签的value值,可以使用button 标签,里面绑定属性formType=\"submit\"\r\n就能一次过获取表单标签里面所有input的value值\r\n⑧在使用swiper的时候,快速切换或者网速慢的时候,会出现无限自动切换的问题,所以我们在切换的时候需要做一个判断,来避免切换事件bindchange 的重复调用\r\n\r\n⑨在swiper中可以左右切换和上下切换的时候,最好先把非当前索引的其他swiper-item隐藏,避免一些bug。而且在流畅度上\r\n会提升\r\n\r\n\r\n10 一般我们会在底部固定某一个标签栏,这时候我们在布局的时候,注意高度的问题,因为在某些手机这个固定的标签栏会覆盖我们的一些元素,我们需要通过getSystem拿到屏幕的高度,再减去相应固定标签的高度,再去计算元素,避免遮挡的问题\r\n\r\n11 使用scroll-view的时候,需要给它固定一个高度,并且设置scroll-y = true 才可以让它竖向滚动,但在使用这个scroll-view的时候,不同的手机端,在最底下的数据可能会被底下固定栏遮住,我们可能添加一个有高度的空标签把这个高度撑开,就能把数据全部展现出来了\r\n\r\n12 还是scroll-view问题 在使用弹窗scroll-view时候,在上下拖动scroll-view时候,可能会出现穿透现象,如果屏幕可以滚动,在scroll-view上下拖动也可以拖动屏幕,出现拖动穿透问题了,解决这个问题可以在所有元素外添加一个标签,该标签\r\n添加属性overflow-y = auto  设置宽高 100%; 来解决这个问题 \r\n\r\n13 picker标签的坑 有时候我们即使设置picker为宽度100%时候 也会出现点击失效原因,原因是picker里面有其他子元素\r\n而子元素之间是有空隙的,这些空隙会导致picker点击失效,所有子元素的宽度尽可能铺满picker,避免picker点击失效\r\n\r\n14 有时候我们可能在页面点击某处跳转到tab页面,这个时候我们一定要用switchTab去跳转,其他跳转不起作用。\r\n不过一般来说我们不需要这样做,因为通过tab标签跳转的页面都可以用原生返回键返回\r\n\r\n15 onLoad 和 onShow 区别 \r\n   onLoad是页面加载时候出发\r\n   onShow 是页面显示触发\r\n   所以一些跳转之后不会关闭的页面,或者tab的页面,我们在有数据渲染时候应该放在onShow上,避免某个操作完成后回到\r\n   这些页面导致没有实时刷新数据还展示旧的数据\r\n\r\n\r\n16 在swiper中如果想实现展开收缩某的功能 也是需要计算高度,拿到后台的数据进行高度的计算,然后每次点击\r\n展开和收起的按钮时候,相应的增加和减少高度,这个高度要根据你后台返回的数据进行计算。如果不计算高度,实现上拉下拉刷新时候就会出现BUG了。 主要目的是计算swiper整个的高度,避免上拉加载的bug\r\n\r\n17 拿到跳转传递过来的参数  在onLoad页面中,我们可以给onLoad一个事件对象,该对象可以返回跳转过来页面带过来的参数\r\n\r\n18 打印机的设置,绑定打印机需要设置终端号和密钥的\r\n\r\n19 需要预览图片可以通过api  wx.previewImage 传入指定路劲进行预览\r\n\r\n20 App() 函数只能在app.js注册.只能有一个\r\n\r\n在app.js文件中,不能够调用getApp() 通过this就可以拿到实例\r\n\r\n21 不要在 onLaunch 的时候调用 getCurrentPages(),此时 page 还没有生成。\r\n\r\n22 navigateTo, redirectTo 只能打开非 tabBar 页面。\r\n   switchTab 只能打开 tabBar 页面。\r\n   reLaunch 可以打开任意页面。\r\n   页面底部的 tabBar 由页面决定,即只要是定义为 tabBar 的页面,底部都有 tabBar。\r\n\r\n23 cheackBox 里的checked = {{false}} 不要直接写字符串 不要直接写 checked=\"false\" ,要用{{}}\r\n\r\n24 当数据改变触发渲染层重新渲染的时候,会校正带有 key 的组件,框架会确保他们被重新排序,而不是重新创建,以确保使组件保持自身的状态,并且提高列表渲染时的效率。 所以为了效率最好加上wx:key\r\n\r\n25 wx:if 也是惰性的,如果在初始渲染条件为 false,框架什么也不做,在条件第一次变成真的时候才开始局部渲染。\r\nhidden 就简单的多,组件始终会被渲染,只是简单的控制显示与隐藏\r\nwx:if 有更高的切换消耗而 hidden 有更高的初始渲染消耗。因此,如果需要频繁切换的情景下,用 hidden 更好,如果在运行时条件不大可能改变则 wx:if 较好。	\r\n', '/static/upload/smallpic/20181110/1541860052787906335.png');
INSERT INTO `articles` VALUES (6, 1, 'Go基础知识-01 关键字,go文件的基本结构(持续更新)', 5, '2018-11-04 15:30:10', 0, '####文件名&关键字&标识符\r\n\r\n\r\n- 所有go源码以.go结尾\r\n\r\n- 标识符以字母或下划线开头,大小写敏感,比如:\r\n	**huluwa   Huluwa  _huluwa**                           \r\n- 是特殊标识符,用来忽略结果\r\n- 保留关键字\r\n\r\n|break | default | func |interface|select|\r\n| ----- | ------ | ------ |\r\n| case | defer | go |map|struct|\r\n| chan | else | goto |package|switch|\r\n|const|fallthough|if|range|type|\r\n|continue|for|import|return|var|\r\n\r\n\r\n###go程序的基本结构\r\n```\r\npackage main\r\nimport “fmt” //引入的包\r\nfunc main() {\r\n    fmt.Println(“hello, world”) //调用包里面的方法\r\n}\r\n```\r\n - 任何一个go大文件都要属于一个包\r\n - import 关键字引入使用的包\r\n - 每个go可执行程序必须要有main 包\r\n - 函数调用\r\n     a.同一个包中函数,直接调用\r\n     b.小写意味着这个函数/变量是私有的,包外部不能访问\r\n - 包访问控制规则:\r\n    a.小写意味着这个函数/变量是私有的,包外部不能访问\r\n     b.大写意味着这个函数/变量是可导出的\r\n\r\n\r\n**重点内容**\r\n![目录结构](https://img-blog.csdn.net/20180808113827136?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NvbnNvbGVfXw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)\r\n下面是在main函数中调用\r\n```\r\npackage main\r\n\r\nimport (\r\n	\"gostudy/day1/add\"\r\n	\"fmt\"\r\n)\r\n\r\nfunc main() {\r\n	fmt.Println(add.Name)\r\n}\r\n\r\n```\r\n![这里写图片描述](https://img-blog.csdn.net/20180808114109611?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NvbnNvbGVfXw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)\r\n\r\n\r\n###总结:\r\n主要讲讲解 go语言的关键字,包的概念,跨包的使用', '/static/upload/smallpic/20181111/1541865712106203919.jpeg');
INSERT INTO `articles` VALUES (7, 1, 'Go基础知识-02 作用域 常量 变量 作用域(持续更新)', 6, '2018-11-10 23:53:54', 0, '####文件名&关键字&标识符\r\n\r\n\r\n- 所有go源码以.go结尾\r\n\r\n- 标识符以字母或下划线开头,大小写敏感,比如:\r\n	**huluwa   Huluwa  _huluwa**                           \r\n- 是特殊标识符,用来忽略结果\r\n- 保留关键字\r\n\r\n|break | default | func |interface|select|\r\n| ----- | ------ | ------ |\r\n| case | defer | go |map|struct|\r\n| chan | else | goto |package|switch|\r\n|const|fallthough|if|range|type|\r\n|continue|for|import|return|var|\r\n\r\n\r\n###go程序的基本结构\r\n```\r\npackage main\r\nimport “fmt” //引入的包\r\nfunc main() {\r\n    fmt.Println(“hello, world”) //调用包里面的方法\r\n}\r\n```\r\n - 任何一个go大文件都要属于一个包\r\n - import 关键字引入使用的包\r\n - 每个go可执行程序必须要有main 包\r\n - 函数调用\r\n     a.同一个包中函数,直接调用\r\n     b.小写意味着这个函数/变量是私有的,包外部不能访问\r\n - 包访问控制规则:\r\n    a.小写意味着这个函数/变量是私有的,包外部不能访问\r\n     b.大写意味着这个函数/变量是可导出的\r\n\r\n\r\n**重点内容**\r\n![目录结构](https://img-blog.csdn.net/20180808113827136?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NvbnNvbGVfXw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)\r\n下面是在main函数中调用\r\n```\r\npackage main\r\n\r\nimport (\r\n	\"gostudy/day1/add\"\r\n	\"fmt\"\r\n)\r\n\r\nfunc main() {\r\n	fmt.Println(add.Name)\r\n}\r\n\r\n```\r\n![这里写图片描述](https://img-blog.csdn.net/20180808114109611?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NvbnNvbGVfXw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)\r\n\r\n\r\n###总结:\r\n主要讲讲解 go语言的关键字,包的概念,跨包的使用', '/static/upload/smallpic/20181111/1541865712106203919.jpeg');
INSERT INTO `articles` VALUES (8, 1, 'Go基础知识-03 strings strconv(持续更新)', 6, '2018-11-10 23:55:29', 0, '##1. strings和strconv使用 ##\r\n\r\n- strings.HasPrefix(s string, prefix string) bool:判断字符串s是否以prefix开头 \r\n\r\n		str := \"hul uwah ahahAha\"\r\n		a := strings.HasPrefix(str, \"hulu\")\r\n- strings.HasSuffix(s string, suffix string) bool:判断字符串s是否以suffix结尾。\r\n```\r\n    b := strings.HasSuffix(str, \"haha\")\r\n	fmt.Println(\"结尾=>\", b)\r\n```\r\n- strings.Index(s string, str string) int:判断str在s中首次出现的位置,如果没有出现,则返回-1\r\n```\r\n    c := strings.Index(str, \"haha\")\r\n	fmt.Println(\"包含=>\", c)\r\n```\r\n\r\n- strings.LastIndex(s string, str string) int:判断str在s中最后出现的位置,如果没有出现,则返回-1\r\n```\r\n    d := strings.LastIndex(str, \"haha\")\r\n	fmt.Println(\"最后出现的位置=>\", d)\r\n```\r\n\r\n- strings.Replace(str string, old string, new string, n int):字符串替换\r\n```\r\ne := strings.Replace(str, \"haha\", \"123\", 3)\r\nfmt.Println(\"替换=>\", e)\r\n```\r\n\r\n- strings.Count(str string, substr string)int:字符串计数\r\n```\r\n	f := strings.Count(str, \"ha\")\r\n	fmt.Println(\"计数出现次数=>\", f)\r\n```\r\n- strings.Repeat(str string, count int)string:重复count次str\r\n```\r\n    g := strings.Repeat(str, 2)\r\n	fmt.Println(\"字符串加倍=>\", g)\r\n```\r\n- strings.ToLower(str string)string:转为小写 \r\n```\r\n    h := strings.ToLower(str)\r\n	fmt.Println(\"转小写=>\", h)\r\n```\r\n- strings.ToUpper(str string)string:转为大写\r\n```\r\n	i :=strings.ToUpper(str)\r\n	fmt.Println(\"转大写=>\", i)\r\n```\r\n- strings.TrimSpace(str string):去掉字符串首尾空白字符\r\n```\r\n     j := strings.TrimSpace(str)\r\n	fmt.Println(\"去掉收尾空白字符串=>\",j)\r\n```\r\n- strings.Trim(str string, cut string):去掉字符串首尾cut字符\r\n```\r\n     k :=strings.Trim(str,\"hua\") //只要前后在俩面就会处理\r\n	fmt.Println(\"去掉字符串前后=>\",k)\r\n```\r\n- strings.TrimLeft(str string, cut string):去掉字符串首cut字符\r\n```\r\n	l :=strings.TrimLeft(str,\"hua\")\r\n	fmt.Println(\"去掉字符串首=>\",l)\r\n```\r\n- strings.TrimRight(str string, cut string):去掉字符串首cut字符\r\n```\r\n    m :=strings.TrimRight(str,\"hua\")\r\n	fmt.Println(\"去掉字符串尾=>\",m)\r\n```\r\n- strings.Field(str string):返回str空格分隔的所有子串的slice\r\n```\r\n	n :=strings.Fields(str)\r\n	fmt.Println(\"返回str空格分隔的所有子串的slice=>\",n)\r\n```\r\n- strings.Split(str string, split string):返回str split分隔的所有子串的slice\r\n```\r\n     o := strings.Split(str,\"\")\r\n	fmt.Println(\"split分隔的所有子串的slice=>\",o)\r\n```\r\n- strings.Join(s1 []string, sep string):用sep把s1中的所有元素链接起来\r\n```\r\n    s := []string{\"jiqimao\",\"kabuda\",}\r\n	p := strings.Join(s,\"\")\r\n	fmt.Println(p,str)\r\n```\r\n- strconv.Itoa(i int):把一个整数i转成字符串\r\n```\r\nfmt.Println(strconv.Itoa(18))\r\n```\r\n- strconv.Atoi(str string)(int, error):把一个字符串转成整数\r\n```\r\n    q,_ := strconv.Atoi(\"56\")\r\n	fmt.Println(q)\r\n```\r\n', '/static/upload/smallpic/20181111/1541865712106203919.jpeg');
INSERT INTO `articles` VALUES (9, 1, 'Go基础知识-04 时间和日期类型(持续更新)', 7, '2018-11-09 15:56:09', 0, '##时间和日期类型 ##\r\n\r\n1.time包\r\n2.time.Time类型,用来表示时间\r\n3.获取当前时间,now :=time.Now()\r\n4.日期函数\r\n```\r\ntime.Now().Day()=>日期\r\ntime.Now().Minute()=>分钟\r\ntime.Now().Month()=>月份\r\ntime.Now().Year()=>年份\r\n```\r\n\r\n5.time.Duration纳秒\r\n6.常规常量\r\n```\r\nconst (\r\n	Nanosecond  Duration = 1\r\n	Microsecond          = 1000 * Nanosecond\r\n	Millisecond          = 1000 * Microsecond\r\n	Second               = 1000 * Millisecond\r\n	Minute               = 60 * Second\r\n	Hour                 = 60 * Minute\r\n)\r\n```\r\n7.格式化 2006/1/02 15:04时间原点\r\n```\r\nnow := time.Now()\r\nfmt.Println(now.Format(\"02/1/2006 15:04\"))\r\nfmt.Println(now.Format(\"2006/1/02 15:04\"))\r\nfmt.Println(now.Format(\"2006/1/02\"))\r\n```\r\n8.初始化一个指定日期\r\n```\r\n    time1 := time.Date(2017,11,11,0,0,0,0,time.Local)\r\n	fmt.Println(time1.Format(\"2006-01-02 15:04\"))\r\n```', '/static/upload/smallpic/20181111/1541865712106203919.jpeg');
INSERT INTO `articles` VALUES (10, 1, 'Go基础知识-05 指针类型、流程控制、函数(持续更新)', 8, '2018-11-10 15:57:08', 0, '## 1.指针类型\r\n\r\n1. 普通类型,变量存的就是值,也叫值类型\r\n        整数类型: int8、int16等等\r\n		浮点类型:float32、float64\r\n		布尔类型:bool\r\n		复数类型: complex64、complex128\r\n		字符串类型: string\r\n		字符类型: byte、rune\r\n		\r\n2. 获取变量的地址,用&,比如: var a int, 获取a的地址:&a\r\n	```\r\n	a := 2\r\n	 &a \r\n	```\r\n3. 指针类型,变量存的是一个地址,这个地址存的才是值\r\n4. 获取指针类型所指向的值,使用:*,比如:var *p int, 使用*p获取p指向的值\r\n		\r\n## 流程控制\r\n\r\n1.  If / else分支判断\r\n	```\r\n	if condition1 {\r\n	 }\r\n	 \r\n	if condition1 {\r\n	} else {\r\n	}\r\n	\r\n	if condition1 {\r\n	} else if condition2 {\r\n	} else if condition3 {\r\n\r\n	} else {\r\n	}\r\n\r\n	```\r\n2.  switch case语句\r\n	- 写法一\r\n\r\n		```\r\n		switch var {\r\n		case var1:\r\n		case var2:\r\n		case var3:\r\n		default:\r\n		}\r\n	  ```\r\n- 写法二\r\n	```\r\n	var i = 0\r\n	switch i {\r\n	case 0:\r\n	        fallthrough\r\n	case 1:\r\n	      fmt.Println(“1”)\r\n	case 2:\r\n	fmt.Println(“2”)\r\n	default:\r\n	     fmt.Println(“def”)\r\n	}\r\n	```\r\n- 写法三\r\n	```\r\n	var i = 0\r\n	switch i {\r\n	case 0, 1:\r\n	      fmt.Println(“1”)\r\n	case 2:\r\n	fmt.Println(“2”)\r\n	default:\r\n	     fmt.Println(“def”)\r\n	}\r\n	```\r\n- 写法4\r\n	```\r\n	var i = 0\r\nswitch {\r\ncondition1:\r\n      fmt.Println(“i > 0 and i < 10”)\r\ncondition2:\r\nfmt.Println(“i > 10 and i < 20”)\r\ndefault:\r\n     fmt.Println(“def”)\r\n}\r\n	```\r\n - 写法5\r\n	 ```\r\n	 switch i := 0 {\r\n   case i > 0 && i < 10:\r\n      fmt.Println(“i > 0 and i < 10”)\r\n    case i > 10 && i < 20:\r\n    fmt.Println(“i > 10 and i < 20”)\r\n	default:\r\n	     fmt.Println(“def”)\r\n	}\r\n	 ```\r\n3. for\r\n	- 写法一\r\n		```\r\n			for  条件 {\r\n			 }\r\n			 \r\n	 ```\r\n	- 写法二\r\n		```\r\n		for i > 0 {\r\n      fmt.Println(“i > 0”)\r\n}\r\n			 \r\n	 ```\r\n4.  for range 语句(用来遍历数组、slice、map、chan)\r\n	```\r\n		str := “hello world,中国”\r\n	     for i, v := range str {\r\n	      fmt.Printf(“index[%d] val[%c] len[%d]\\n”, i, v, len([]byte(v)))\r\n	  }\r\n	\r\n	```\r\n5.  break continue语句\r\n	```\r\n	str := “hello world,中国”\r\nfor i, v := range str {\r\n       if i > 2 {\r\n             continue\r\n       }\r\n  if (i > 3) {\r\n         break\r\n  }\r\n     fmt.Printf(“index[%d] val[%c] len[%d]\\n”, i, v, len([]byte(v)))\r\n}\r\n	\r\n	```\r\n6. goto 和 label 语句\r\n	```\r\n	package main\r\n	import \"fmt\"\r\n	func main() {\r\n	LABEL1:\r\n		for i := 0; i <= 5; i++ {\r\n			for j := 0; j <= 5; j++ {\r\n				if j == 4 {\r\n					continue LABEL1\r\n				}\r\n				fmt.Printf(\"i is: %d, and j is: %d\\n\", i, j)\r\n			}\r\n		}\r\n	}\r\n	\r\n	```', '/static/upload/smallpic/20181111/1541865712106203919.jpeg');
INSERT INTO `articles` VALUES (11, 1, '批量重命名-node', 12, '2018-11-10 15:58:41', 0, '有很多时候UI给的图标是中文命名的,为了和世界接轨,咱们要搞成英文的\r\n\r\n```\r\nlet fs = require(\'fs\')\r\nasync function reName(path,oldName, newName) {\r\n    let nameArr = await getNameList(path)\r\n    nameArr =  nameArr.filter(item => {\r\n        if (item.indexOf(oldName) > -1) {\r\n            return item\r\n        }\r\n    })\r\n    nameArr.forEach((name,index) => {\r\n        let oldPath = `./${path}/${name}`\r\n        let newPath = `./${path}/${newName}_${index+1}.png`\r\n        fs.rename(oldPath, newPath, (err) => {  //重命名\r\n            if (err) {\r\n                console.log(err)\r\n            }\r\n        })\r\n    });\r\n    \r\n}\r\nfunction getNameList(path) {\r\n    return new Promise((resolve, reject) => {\r\n        fs.readdir(path, (err, oldName) => {\r\n            if (err) {\r\n                reject(err)\r\n            } else {\r\n                resolve(oldName)\r\n            }\r\n        })\r\n    })\r\n\r\n}\r\nreName(\'./images/\', \'椒图\',\"pepperFigure\")\r\n```', '/static/upload/default/blog-default-4.png');
INSERT INTO `articles` VALUES (270, 1, '测试8888', 22, '2018-12-26 22:41:52', 0, '# 一级标题', '');
INSERT INTO `articles` VALUES (271, 0, '', 54, '0000-00-00 00:00:00', 0, '', '/static/upload/default/blog-default-0.png');