建立socket服务端 起一个服务1234567 http.Handle("/",websocket.Handler(Server))err := http.ListenAndServe(":8080",nil)if err != nil { panic("ListendAndServer " + err.Error() )}
建立客户端连接12var ws = new WebSocket("ws://localhost:8080); //建立连接ws.send(data); //发送数据
聊天室实现代码
创建server监听tcp请求
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657package mainimport ( "net/http" "code.google.com/p/go.net/ ...
练习代码123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687package mainimport ( "fmt" "strings" "strconv")func main() { //判断字符串是否以 xx开头 var str string = "This is an example of a string" r := strings.HasPrefix(str,"Th") fmt.Println(r) r1 := strings.HasPrefix(str,"th") fmt.Println(r1) //以什么结尾 r2 := strings.HasSuffix(str,&qu ...
练习代码12345678910111213141516171819202122232425262728293031323334353637383940package mainimport "fmt"import "net/url"import "strings"func main() { //我们将解析这个 URL 示例,它包含了一个 scheme,认证信息,主机名,端口,路径,查询参数和片段。 s := "postgres://user:pass@host.com:5432/path/dir/?k=v#f" //解析这个 URL 并确保解析没有出错。 u, err := url.Parse(s) if err != nil { panic(err) } //直接访问 scheme。 fmt.Println(u.Scheme) //postgres //User 包含了所有的认证信息,这里调用 Username和 Password 来获取独立值。 fmt.Println(u ...
go执行输出文件写操作
go创建文件写入字符串
123456package mainimport "os"func main() { f, _ := os.Create("./outputFile.txt") f.Write([]byte("测试输出写入文本"))}
其他方式写入文件
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677package mainimport ( "os" "fmt" "io" "io/ioutil" "bufio")func check(e error) { if e != nil { panic(e) }& ...
go文件、目录、系统环境函数go 获取当前运行文件目录
go 获取当前运行文件目录
123 file, _ := exec.LookPath(os.Args[0])path, _ := filepath.Abs(file)println(path)
12345678910111213141516171819202122232425262728293031323334353637383940package mainimport ( "fmt" "log" "os" "path/filepath" "strings")func substr(s string, pos, length int) string { runes := []rune(s) l := pos + length if l > len(runes) { l = len(runes) } return string(runes[pos:l])}func getPare ...
go文件读取
一次性读取
适用于小文件123456789101112131415161718192021package mainimport ( "os" "io/ioutil" "fmt")func ReadAll(filePth string) ([]byte, error) { f, err := os.Open(filePth) if err != nil { return nil, err } return ioutil.ReadAll(f)}func main() { r , _ := ReadAll("1.go") fmt.Println(string(r))}
分块读取
1234567891011121314151617181920212223242526272829303132package mainimport ( "bufio" "io" "os")fu ...
设计模式概述
什么是设计模式? 设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。
项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。
设计模式的特点
复用解决方案: 设计模式本身就是对某一类问题的通用解决方案,是更高级别的服用,已经超出了代码复用。
确定通用术语: 开发中的交流和协作都需要共同的词汇其础和对问题的共识. 当你有想表达却又表达不清楚的设计思路,即使表达出来也会被同事误解的时候,设计模式就显出沟通的优势了。
代码更易于修改与维护:因为设计模式都是久经考验的解决方案,它们的结构都是经过长期的发展形成的,善于应对变化,设计模式本身也是对变化点的封装。
模式有助于提高思考层次: ...
中介者模式
中介者设计模式用于开发一个对象,这个对象能够在类似对象相互之间不直接交互的情况下传送或调解对这些对象的集合的修改。
代码12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879class CD { public $band = ''; public $title = ''; protected $_mediator; public function __construct(MusicContainerMediator $mediator = NULL) { $this->_mediator = $mediator; } public function save() { //具体实现待定 ...
外观模式
通过在必须的逻辑和方法的集合前创建简单的外观接口,外观设计模式隐藏了来自调用对象的复杂性。
设计一个User类123456789101112131415161718class User { protected $userName; protected $userAge; public function setUserName($userName) { return $this->userName = $userName; } public function setUserAge($userAge) { return $this->userAge = $userAge; } public function getUser() { echo '用户姓名:' . $this->userName . '; 用户年龄:' . $this->userAge; } ...
单例模式
单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。
不适用单例模式时:
123456789class Database{ public $db = null; public function __construct($config = array()) { $dsn = sprintf('mysql:host=%s;dbname=%s', $config['db_host'], $config['db_name']); $this->db = new PDO($dsn, $config['db_user'], $config['db_pass']); }}
然后创建3个对象:
12345678910111213$config = array( 'db_name' => ...