io

Posted by 夏泽民

Golang的IO读写提供了很多种方式,目前本人知道的有io库、os库、ioutil库、bufio库、bytes/strings库等。 虽然库多是一件好事,意味着选择性多,但让我困惑的一点是:什么场景下该用哪个库? 为什么? 在给出结论前,我先想给出Golang内置IO库的项目结构,主要方便理解和引用:

只列举了核心的目录及文件

src:

  • bufio
    • bufio.go
  • bytes
    • buffer.go
    • reader.go
  • io
    • ioutil
      • ioutil.go
    • io.go
  • os
    • file.go
  • strings
    • reader.go


call_user_function_ex 扩展调用php脚本函数

Posted by 夏泽民

其中可能我认为最关键的应该是在PHP扩展里怎么调用用户空间里的函数了!对于一个framework来说,最基本的功能就是路由到请求对应的Action了。



php扩展实现多线程

Posted by 夏泽民

在PHP扩展里是通过 call_user_function_ex 函数来调用用户空间的函数的。



zend_parse_parameters php扩展程序的参数传递 扩展类传参数

Posted by 夏泽民

在php扩展程序的开发中,涉及参数接受处理时,第一步便是要对传入参数进行判断,如生成的扩展示例代码: if (zend_parse_parameters(ZEND_NUM_ARGS(), “s”, &arg, &arg_len) == FAILURE) { return; }如上述示例代码,其判断有 1:判断是否有入参,如果没有入参就会报缺少参数错误。 2:判断入参是不是字符串,如果不是字符串就会把参数类型错误。 先说一下参数类型吧,上面的例子中只有字符串,没有其它类型。实际PHP扩展程序中的类型不少,有整型,浮点型,还有zval类型。zval是Zend引擎的值容器,无论这个变量是个简单的布尔值,字符串或者其他任何类型值,其信息总是一个完整的zval结构。可以认为是一个简单数据的底层复杂描述的结构。

PHP_FUNCTION(kermitcal) {   
char *username;
size_t username_len;
char *age;
size_t age_len;
char *email = "admin@04007.cn";
size_t email_len = sizeof("admin@04007.cn") -1;
zend_string *strg;
#使用sl|s表示|后的这个email参数可以不传递,使用默认值。
if (zend_parse_parameters(ZEND_NUM_ARGS(), "sl|s",&username, &username_len,&age, &age_len, &email, &email_len) == FAILURE){
    php_printf("need params username(string) and age(int).!");
    RETURN_NULL();
}
strg = strpprintf(0, "大家好,我叫%s, 今年%d岁, 我的邮箱是:%s \n", username, age, email);
RETURN_STR(strg); }


spl_autoload_register

Posted by 夏泽民

为什么要用spl_autoload_register其实我觉得这一段话基本可以解决所有的问题



Search

Popular posts

Anything in here will be replaced on browsers that support the canvas element

Recent posts

This blog is maintained by 夏泽民

Get in touch with me at 465474307@qq.com

Subscribe to our mailing list

* indicates required