wwc
简单点就好

golang使用中的一些记录

一直在想为什么使用包内的函数设置一些状态之后别的函数能够直接使用

比如golang下的log包,可以New一个log来用。也可以直接setFlags,然后直接log.Printf来用

刚才看了一下log包下的实现

在log下有一个全局变量,stdlog,实际上使用包内的函数就是在设置这个对象的状态

Dep包管理工具

  1. [[constraint]]

    这就是你想要的library的源,可以选择分支或者版本号,source则是指想要从哪里下载这些库

  2. [[override]]

    覆写,如果由dep下载的依赖不符合你的要求,就可以指定这个选项,来重新指定直接依赖(你项目使用的库)或者间接依赖(你依赖的库的依赖)的版本号或者分支


Docker中一些CMD的使用

通过docker attach来绑定docker containerstdin, stdout, stderr

前提条件是创建docker container指定-i选项

全部使用golang的镜像为例

创建并运行container
1
docker run --name container -dti golang bash

绑定当前终端的std*

1
docker attach container

如果在第一步使用如下

1
docker run --name container -dt golang bash

则在attach之后虽然也会出现root&****:/go#,但是没有办法输入字符,只有指定interactive(-i)才可以
这个选项的意思是始终打开stdin,即使没有attach


Vue使用过程中遇到的问题

使用Vue的过程中碰到的各种错误,统计记下来

引入的组件如果有一个组件出现了问题,会导致在最终渲染生成的html许多资源注入失败

到底何为数据驱动?

比如一个页面显示10个item,随着用户下滑,item应该随时更新,那么就可以有一个数组,不断地请求新数据,
当新的数据到达之后就更新,vue使用者只需要准确更新数据,而数据最后在视图层的展示则由vue去处理

这种情况下适合使用vuex。

既然如此,那么vuex store中应该存放随外界条件改变的状态,对于一些不会改变的变量则不适合用vuex store

我也不知道这样理解对不对


css实现一个滑动侧边栏

使用css中的transition


济南大学正方教务的一次尝试登录

在进入登录界面之后,本地向http://jwgl7.ujn.edu.cn/jwglxt/xtgl/login_getPublicKey.html发了一个请求,获得了加密使用的modularexponent
response为如下格式

1
2
3
4
{
"exponent":"AQAB",
"modulus":"AIIF9qvokiWI5ci60kkAdWkpzGC2GRIjPzDgcY\/wLDKL5YS7p\/hIDUvJACHY9s2wsA\/OwKxgbnPm6BfnH\/zLGEtZ97wFjdayKHU84Zm\/3ScMD0kC8z\/lk0TgbLn4YavR\/10hRamFVDHocebmnuI96wBPyF5nWMNgcsQqX91e3qoL"
}


济南校园联通绕过拨号客户端使用PPPOE直接上网

济南校园联通使用PPPOE登录
Windows客户端之后流程

选择学校界面:

向服务器请求学校的具体信息
http-show


golang中ValueReceiver-PointerReceiver区别

如下代码

1
2
3
4
func main(){
var buf bytes.Buffer
fmt.Fprint(&buf,"test")
}

"test"写入buf,由于bytes.Buffer对于io.Writer接口使用了如下实现

1
2
3
4
5
6
7
8
func (b *Buffer) Write(p []byte) (n int, err error) {
b.lastRead = opInvalid
m, ok := b.tryGrowByReslice(len(p))
if !ok {
m = b.grow(len(p))
}
return copy(b.buf[m:], p), nil
}


java如何在shell编译运行单个源文件

一直用IDE,有时候为了看一段代码的文件打开那么笨重的IDE然后创建文件太麻烦了,所以打算直接shell编译运行

如下代码(包名完全是为了一般性),整个文件夹路径D:\code\javacode\main\main1\main2

如果源文件中指明了package
1
2
3
4
5
6
7
8
package main.main1.main2;

public class Main{
public static void main(String[] argv){
for(;;){
}
}
}

现在main2文件夹下面打开shell,然后

1
javac Main.java

这时候会在main2文件夹下面生成Main.class

然后现在到路径的javacode文件夹下面,运行

1
java main.main1.main2.Main

最后就会运行了

如果源文件中没有指明package

这样在通过javac Main.java生成class文件之后,不用切换目录,直接运行

1
java Main

就可以了


golang实现一个简单的HTTP-Proxy

最近学习Golang,为了学而学没什么意思,于是自己写了一个简单的HTTP代理,总共代码100行左右。
不得不说用Go写就是爽,来了一个Conn直接开Goroutine去处理,也不需要像Java那种小心翼翼的控制线程,
为了高并发还要用Select,Poll,Epoll。


golang 中closure body后面加括号

最近在看v2ray的代码,到了核心的goroutine执行阶段,看到如下的表达式
tasks是函数集合

1
2
3
4
5
6
7
8
9
10
11
12
for _, task := range tasks {
<-s.Wait()
go func(f func() error) {
if err := f(); err != nil {
select {
case done <- err:
default:
}
}
s.Signal()
}(task)
}

第一次看到在函数体结尾{}后面加括号的,这个的意思就是定义一个匿名函数,并且传递的参数为括号中的task

比如下面的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package main

import (
"fmt"
)

func main() {
print := func (){
fmt.Println("Hello,World")
}

start(print)
}

func start(tasks ...func()){
c := make(chan int)
for _, task := range tasks{
go func(f func()){
f()
c <- 1
}(task)
<- c
}
}

执行后输出Hello,World