自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(155)
  • 资源 (8)
  • 收藏
  • 关注

原创 iOS开发技巧

iOS开发技巧

2022-08-05 11:55:02 498 1

原创 哈希(crypto/bcrypt)

哈希

2022-04-28 17:29:30 818

原创 Websockets

websocket实例websocket响应

2022-04-28 17:01:04 1284

原创 JSON编码和解码

json编码json解码

2022-04-28 16:49:37 1792

原创 会话(gorilla/sessions)

会话存储会话处理

2022-04-28 16:37:26 289

原创 中间件(基础和进阶)

中间件

2022-04-28 16:05:06 170

原创 表单(Forms)

添加模版读取模版响应请求

2022-04-27 18:56:31 241

原创 HTML模版

模版解析模版执行

2022-04-27 17:57:55 170

原创 MySQL数据库

安装mysql驱动包连接mysql数据库创建数据表数据表插入数据查询单条数据查询多条数据删除数据清空数据表

2022-04-27 17:21:54 355

原创 路由(gorilla/mux)

安装gorilla/mux包创建路由注册请求执行方法设置路由

2022-04-27 16:12:02 247

原创 静态资源服务

处理动态请求提供静态资源服务接受http连接

2022-04-27 11:44:46 304

原创 基础Web服务

注册响应方法添加监听服务

2022-04-27 09:58:41 174

原创 Goroutines and Channels and Select

多线程首先创建多线程方法:func f(from string) { for i := 0; i < 3; i++ { fmt.Println(from, ":", i) }}f("direct")go f("goroutine")go func(msg string) { fmt.Println(msg)}("going")time.Sleep(time.Second)fmt.Println("done")direct : 0direct : 1direct

2022-04-24 15:50:14 103

原创 Exit and Status

通过os.Exit,程序将以给定的状态退出运行。defer fmt.Println("!")os.Exit(3)编译并运行程序:% ./exit% echo $?3从命令行输出可以看出,defer未执行。

2022-04-20 22:51:09 211

原创 Signals

signal.Notify通过channel接收系统的信号。sigs := make(chan os.Signal, 1)signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)done := make(chan bool, 1)go func() { sig := <-sigs fmt.Println() fmt.Println(sig) done <- true}()fmt.Println("awaiting signal"

2022-04-20 22:45:12 221

原创 Spawning Processes and Exec‘ing Processes

衍生外部进程dateCmd := exec.Command("date")dateOut, err := dateCmd.Output()if err != nil { panic(err)}fmt.Println("> date")fmt.Println(string(dateOut))> date2022年 4月20日 星期三 19时16分44秒 CSTexec.Command的执行结果,与在命令行中执行的结果一致。grepCmd := exec.Command(

2022-04-20 20:23:47 116

原创 HTTP Clients and Servers and Context

HTTP请求resp, err := http.Get("http://gobyexample.com")if err != nil { panic(err)}defer resp.Body.Close()fmt.Println("Response status:", resp.Status)scanner := bufio.NewScanner(resp.Body)for i := 0; scanner.Scan() && i < 5; i++ { fmt.Prin

2022-04-19 18:12:49 2363

原创 Environment Variables

环境变量是向程序传递系统配置信息的通用机制。for _, e := range os.Environ() { pair := strings.SplitN(e, "=", 2) fmt.Println(pair[0])}USER__CFBundleIdentifierCOMMAND_MODELOGNAMEPATHSSH_AUTH_SOCKSHELLHOME__CF_USER_TEXT_ENCODINGTMPDIRXPC_SERVICE_NAMEXPC_FLAGSORIG

2022-04-19 17:17:11 412

原创 Command-Line

命令行参数argsWithProg := os.ArgsargsWithoutProg := os.Args[1:]fmt.Println(argsWithProg)fmt.Println(argsWithoutProg)命令行中运行程序并输入:./command-line-arguments a b c d命令行输出:[./command-line-arguments a b c d][a b c d]命令行标志wordPtr := flag.String("word",

2022-04-19 11:58:48 192

原创 Testing and Benchmarking

首先创建源码文件并实现方法。func IntMin(a, b int) int { if a < b { return a } return b}然后创建测试文件并实现测试方法。测试文件的文件名一般是源码文件名加_test后缀。func TestIntMinBasic(t *testing.T) { ans := IntMin(2, -2) if ans != -2 { t.Errorf("IntMin(2, -2) = %d; want -2", ans) }}f

2022-04-19 10:30:19 90

原创 Files and Directories

基本文件读取content, err := os.ReadFile("/tmp/dat")if err != nil { panic(err)}fmt.Println(string(content))先在/tmp/dat文件中写入以下内容:寻寻觅觅,冷冷清清,凄凄惨惨戚戚。乍暖还寒时候,最难将息。三杯两盏淡酒,怎敌他、晚来风急?雁过也,正伤心,却是旧时相识。执行代码,命令行打印以下内容:寻寻觅觅,冷冷清清,凄凄惨惨戚戚。乍暖还寒时候,最难将息。三杯两盏淡酒,怎敌他、晚来风

2022-04-18 19:20:50 143

原创 Base64 Encoding

标准编码src := "abc123!?$*&()'-=@~"sEnc := base64.StdEncoding.EncodeToString([]byte(src))fmt.Println(sEnc)YWJjMTIzIT8kKiYoKSctPUB+标准解码s := "5rGf5bGx5aaC5q2k5aSa5aiH77yM5byV5peg5pWw6Iux6ZuE56ue5oqY6IWw44CC"sDec, _ := base64.StdEncoding.DecodeStrin

2022-04-17 20:26:17 544

原创 SHA256 Hashes

s := "sha256 this string"h := sha256.New()h.Write([]byte(s))bs := h.Sum(nil)fmt.Println(s)fmt.Printf("%x\n", bs)sha256 this string1af1dfa857bf1d8814fe1af8983c18080019922e557f15a8a0d3db739d77aacb

2022-04-17 20:08:13 321

原创 URL Parsing

url解析rawURL := "postgres://user:[email protected]:5432/path?k=v#f"u, err := url.Parse(rawURL)if err != nil { panic(err)}fmt.Println("scheme:", u.Scheme)fmt.Println("opaque:", u.Opaque)fmt.Println("user:", u.User)fmt.Println("user.username:", u.User.U

2022-04-17 10:08:14 131

原创 Number

随机整数fmt.Println(rand.Intn(100))47rand.Intn方法可获得[0,n)区间内的随机整数。随机浮点数fmt.Println(rand.Float64())0.4377141871869802rand.Float64方法可获得[0.0,1.0)区间内的随机浮点数。指定范围的随机浮点数fmt.Println((rand.Float64() * 5) + 5)5.328185096087381该方法可获得[5.0,10.0)区间内的随机浮点数

2022-04-17 09:44:16 174

原创 Time and Duration and Epoch

当前时间now := time.Now()fmt.Println("now:", now)now: 2022-04-16 10:50:52.283976 +0800 CST m=+0.000111228指定时间then := time.Date(2009, 11, 17, 20, 34, 58, 651387237, time.UTC)fmt.Println("then:", then)then: 2009-11-17 20:34:58.651387237 +0000 UTC参数

2022-04-16 11:58:56 252

原创 XML编码解码

结构体类型数据转xml字符串type Plant struct { XMLName xml.Name `xml:"plant"` ID int `xml:"id,attr"` Name string `xml:"name"` Origin []string `xml:"origin"`}coffee := &Plant{ ID: 27, Name: "Coffee",}coffee.Origin = []string{"Ethiopia",

2022-04-15 22:33:34 1056

原创 JSON编码解码

基本类型数据转json字符串bolB, _ := json.Marshal(true)fmt.Println("bool json:", string(bolB))bool json: trueintB, _ := json.Marshal(1)fmt.Println("int json:", string(intB))int json: 1fltB, _ := json.Marshal(2.34)fmt.Println("float json:", string(fltB))

2022-04-15 21:53:54 2652

原创 Regular Expressions

声明正则表达式r, err := regexp.Compile("p([a-z]+)ch")或r = regexp.MustCompile("p([a-z]+)ch")第二种方法和第一种方法的区别在于,出现错误时,第一种方法返回error,第二种方法panic。匹配字符串matched, _ := regexp.MatchString("p([a-z]+)ch", "peach")fmt.Println(matched)或者r, _ := regexp.Compile("p([a-z

2022-04-14 17:51:29 150

原创 Text Templates

作用模版是静态文本和动作的混合体,用于动态插入内容。用法初始化t := template.New("template_name")t, err := t.Parse("template_text")if err != nil { panic(err)}或者t := template.New("template_name")t = template.Must(t.Parse("template_text"))template.Must方法实现了error判断和panic。实现一个

2022-04-14 16:26:07 391

原创 Defer

作用用于确保在程序执行的后期调用函数。通常用于清理目的。案例首先实现方法:func createFile(p string) *os.File { fmt.Println("creating") f, err := os.Create(p) if err != nil { panic(err) } return f}func writeFile(f *os.File) { fmt.Println("writing") fmt.Fprintln(f, "data")}f

2022-04-14 15:17:00 60

原创 Panic and Recover

Panic说明程序运行时,发生不应该发生的错误,panic可被用于处理这些错误。或者用于处理那些不准备优雅地处理的错误。使用println("before panic")panic("a problem")println("after panic")before panicpanic: a problemgoroutine 1 [running]:main.main()文件名:行号 +0x45从中可以看到,执行到panic时,程序退出,命令行中留下错误信息。通常情况下,pan

2022-04-03 15:27:03 507

原创 Sorting

简介排序功能支持内置类型数据排序,也支持自定义类型数据排序。内置类型数据排序字符串排序strs := []string{"c", "a", "b"}fmt.Println("before sort:", strs)sort.Strings(strs)fmt.Println("after sort:", strs)before sort: [c a b]after sort: [a b c]数字排序ints := []int{7, 2, 4}fmt.Println("before

2022-04-03 14:05:58 471

原创 Errors

描述error本质上是一个接口,任何实现该接口的结构体都是error。type error interface { Error() string}使用func f1(arg int) (float64, error) { if arg == 0 { return 0, errors.New("can't work with 0") } return 1 / float64(arg), nil}这是一个计算倒数的方法。如果传入的参数是0,那么返回error。arg1 := 10

2022-04-02 18:00:29 587

原创 Generics

描述泛型,也被称为类型参数,允许定义结构体或方法时,传入的参数类型不固定,运行时,可传入不同类型的参数。定义方法func MapKeys[K comparable, V any](m map[K]V) []K { r := make([]K, 0, len(m)) for k := range m { r = append(r, k) } return r}该方法从任何类型的映射中取出键名。该方法有两个类型参数:K和V,分别对应作为参数的映射的键名和键值的类型。该方法返回一个切片

2022-04-02 12:41:34 703

原创 Structs、Methods、Interfaces and Embedding

结构体声明结构体type rect struct { name string width, height float64}创建结构体r := rect{"rect_struct", 10, 100}fmt.Println(r){rect_struct 10 100}r := rect{name: "rect_struct", width: 10, height: 100}fmt.Println(r){rect_struct 10 100}r := r

2022-04-01 15:44:05 261

原创 Strings and Runes

字符串方法字符串是否包含子字符串fmt.Println("Contains:", strings.Contains("test", "es"))Contains: true字符串包含子字符串数量fmt.Println("Count:", strings.Count("test", "t"))Count: 2字符串是否包含前缀fmt.Println("HasPrefix:", strings.HasPrefix("test", "te"))HasPrefix: t

2022-03-31 19:07:08 196

原创 Variadic Functions

说明可变参数函数可传入任意数量的参数,例如fmt.Println。实现函数func sum(nums ...int) { fmt.Print(nums, " ") total := 0 for _, num := range nums { total += num } fmt.Println(total)}调用函数sum(1, 2)sum(1, 2, 3)nums := []int{1, 2, 3, 4}sum(nums...)[1 2] 3[1 2 3] 6[1

2022-03-31 17:24:52 163

原创 Range

作用用于迭代取出数据结构中的元素。数组取值a := []int{10, 100, 1000}for i, v := range a { fmt.Println(i, "->", v)}0 -> 101 -> 1002 -> 1000for i := range a { fmt.Println(i)}012映射取值m := map[string]string{"a": "apple", "b": "banana"}for k, v :

2022-03-31 14:45:21 274

原创 Maps映射

创建映射m := make(map[string]int)创建映射并初始化m := map[string]int{"foo": 1, "bar": 2}赋值m["k1"] = 7m["k2"] = 13取值fmt.Println(m["k1"])从映射中取值时,可选的第二个返回值表明该键名是否存在于映射中。_, prs := m["k2"]fmt.Println(prs)删值delete(m, "k2")映射长度fmt.Println(len(m))...

2022-03-31 14:03:24 87

react-hooks-in-action-code

react-hooks-in-action-code

2023-05-23

FactoryMethodPattern.zip

FactoryMethodPattern.zip

2021-05-10

SimpleFactoryPattern.zip

SimpleFactoryPattern.zip

2021-04-28

CrossModuleAnalysis.zip

CrossModuleAnalysis.zip

2021-04-21

ObjectProxyAnalysis.zip

ObjectProxyAnalysis.zip

2021-04-15

ProxyAnalysis.zip

ProxyAnalysis.zip

2021-04-14

TimerAnalysis.zip

iOS计时器Demo

2021-04-12

k-近邻预测约会对象

这是基于k-近邻算法的预测约会对象程序,通过该程序可以学习k-近邻的使用。

2018-11-07

k-近邻基础

k-近邻基础代码,实现了k-近邻的基本功能,通过该代码,可以学习k-近邻的原理

2018-11-05

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除