Go基础(2)
demo1:
package main import (
"fmt"
"strings"
) func main() {
url := pathToUrl("www.baidu.com", "https")
isUrl(url) } func isUrl(url string) {
http := strings.HasPrefix(url, "http://")
https := strings.HasPrefix(url, "https://")
if http || https {
fmt.Printf("%s 是一个URL", url)
} else {
fmt.Printf("%s 不是一个URL", url)
}
} func pathToUrl(path string, protocol string) string {
var result string
if protocol == "http" || protocol == "https" {
result += protocol
result += "://"
result += path
return result
} else {
return ""
}
}
分析:
1.字符串的基本使用
2.strings包还有其他的一些函数,会在下面介绍
demo2:
package main import (
"fmt"
"strconv"
"strings"
) func main() {
str := " hello world hahaha " result1 := strings.Replace(str, "world", "earth", 1)
fmt.Println(result1) // hello earth hahaha result2 := strings.Count(str, "ha")
fmt.Println(result2) // result3 := strings.ToUpper(str)
fmt.Println(result3) // HELLO WORLD HAHAHA result4 := strings.TrimSpace(str)
fmt.Println(result4) //hello world hahaha result5 := strings.Fields(str)
fmt.Println(result5) //[hello world hahaha] result6 := strings.Join(result5, "0")
fmt.Println(result6) //hello0world0hahaha result7 := strconv.Itoa(666)
fmt.Println(result7) // result8, err := strconv.Atoi("666")
if err != nil {
fmt.Println("can not convert to int:", err)
}
fmt.Println(result8) //
}
分析:
1.一些字符串的基本操作
2.其他的功能直接查文档即可,很简单
demo3:
package main import (
"fmt"
"time"
) func main() {
start := time.Now().UnixNano()
now := time.Now()
theTime := now.Format("2006/01/02 15:05:05")
fmt.Println(theTime) //2019/03/25 14:07:07
end := time.Now().UnixNano()
fmt.Printf("程序共耗时:%d微秒", (end-start)/1000)
}
分析:
1.格式化函数format,必须使用2006/01/02 15:05:05这个日期,Go规定的
2.这里统计程序运行时间的方法,在日后开发中会经常用到
demo4
package main import "fmt" func main() {
var a int = 10
fmt.Printf("%d\n", a) // var p *int = &a
fmt.Printf("%d->%d\n", p, *p) //824633794696->10 var b int = 5
//*p = b
//fmt.Println(a) //5 p = &b
fmt.Println(a) // modify(p)
fmt.Printf("a:%d b:%d\n", a, b) //a:10 b:666 modify(&a)
fmt.Printf("a:%d b:%d\n", a, b) //a:666 b:666
} func modify(p *int) {
*p = 666
return
}
分析:
1.指针的巩固练习
2.*p=b:p指向b,因为p是a的地址,所以a的值变成了b的值
3.p=&b:p是a的地址,指向a,这时候把b的地址赋值给p,但指向没有变。a,b的值都没有变,a和b的地址也没有变,*p的值变成5
4.第一次Modify:这时的p已经是b的地址了,所以如果修改了p的指向,那么其实就直接修改了b的值
5.第二次Modity:这里就是很正常地修改了a的值
demo5:
package main import "fmt" func main() {
str := "hello world!"
for index, value := range str {
fmt.Printf("index[%d] value:%c\n", index, value)
}
/*输出前三行如下
index[0] value:h
index[1] value:e
index[2] value:l
*/
}
分析:
1.除了基本地for循环,go有另一种for循环,很方便,值得学习
demo6:
package main import "fmt" type op_func func(int, int) int func add(a, b int) int {
return a + b
} func operator(op op_func, a, b int) int {
return op(a, b)
} func calc(a, b int) (sum int, avg int) {
sum = a + b
avg = (a + b) / 2
return
} func main() {
c := add
sum := c(1, 2)
fmt.Println(sum) var d op_func = add
result := operator(d, 100, 200)
fmt.Println(result) sum, avg := calc(2, 6)
fmt.Println(sum, avg)
}
分析:
1.go的函数可以赋值给一个变量,并且作为参数传递
2.go的函数可以多返回值,并且可以在函数开头给返回值赋值,在return处省略
demo7:
package main import "fmt" func add(a int, arg ...int) int {
var sum int = a
for i := 0; i < len(arg); i++ {
sum += arg[i]
}
return sum
} func concat(a string, arg ...string) (result string) {
result = a
for i := 0; i < len(arg); i++ {
result += arg[i]
}
return
} func main() {
sum := add(1, 2, 3, 4, 5)
fmt.Println(sum) result := concat("a", "b", "c", "d", "e")
fmt.Println(result)
}
分析:
1.函数支持不确定参数
demo8:
package main import "fmt" func main() {
var i int = 0
defer fmt.Println(i)
defer fmt.Println(1)
i = 10
fmt.Println(i)
} /*输出:
10
1
0
*/
分析:
1.defer语句的理解
2.defer...i...这一句先被放在栈底,然后在它上面放入defer...1...,最后再把函数本身放上。所以执行的时候,先输出10,然后是1,最后是0
3.defer的实际用途:释放资源,比如defer file.close():无论对文件做什么操作或者多么复杂的逻辑判断,最终都会释放资源
demo9:
package main import "fmt" func main() {
result := func(a int, b int) int {
return a + b
}
fmt.Println(result(1, 2))
}
分析:
1.匿名函数的简单使用
Go基础(2)的更多相关文章
- java基础集合经典训练题
第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...
- node-webkit 环境搭建与基础demo
首先去github上面下载(地址),具体更具自己的系统,我的是windows,这里只给出windows的做法 下载windows x64版本 下载之后解压,得到以下东西 为了方便,我们直接在这个目录中 ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- Golang, 以17个简短代码片段,切底弄懂 channel 基础
(原创出处为本博客:http://www.cnblogs.com/linguanh/) 前序: 因为打算自己搞个基于Golang的IM服务器,所以复习了下之前一直没怎么使用的协程.管道等高并发编程知识 ...
- [C#] C# 基础回顾 - 匿名方法
C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...
- HTTPS 互联网世界的安全基础
近一年公司在努力推进全站的 HTTPS 化,作为负责应用系统的我们,在配合这个趋势的过程中,顺便也就想去搞清楚 HTTP 后面的这个 S 到底是个什么含义?有什么作用?带来了哪些影响?毕竟以前也就只是 ...
- Swift与C#的基础语法比较
背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...
- .NetCore MVC中的路由(1)路由配置基础
.NetCore MVC中的路由(1)路由配置基础 0x00 路由在MVC中起到的作用 前段时间一直忙于别的事情,终于搞定了继续学习.NetCore.这次学习的主题是MVC中的路由.路由是所有MVC框 ...
- .NET基础拾遗(5)多线程开发基础
Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...
- .NET 基础 一步步 一幕幕[面向对象之方法、方法的重载、方法的重写、方法的递归]
方法.方法的重载.方法的重写.方法的递归 方法: 将一堆代码进行重用的一种机制. 语法: [访问修饰符] 返回类型 <方法名>(参数列表){ 方法主体: } 返回值类型:如果不需要写返回值 ...
随机推荐
- web优化(一)
今天读完了<高性能网站建设进阶指南>,记得博客园的某位前辈说,关于前端方面的书,带指南两个字的一般都是比较牛逼的,上一本看到的好书是<javascript权威指南>是淘宝前段团 ...
- Python——pip安装报错:is not a supported wheel on this platform
pip安装报错:is not a supported wheel on this platform 可能的原因1:安装的不是对应python版本的库,下载的库名中cp35代表python3.5,其它同 ...
- Asp.Net Core NLog 将日志输出到数据库以及添加LayoutRenderer的支持
在这之前打算用Apache的Log4Net,但是发现其AdoNetAppender方法已经不存在了,无法使用配置文件直接输出到数据库了,因此我便改用了NLog框架. 一.对项目添加NLog 通过Nug ...
- 关于Kafka监控方案的讨论
之前在知乎上尝试过回答这个问题,后来问的人挺多,干脆在博客里面保存一下. 目前Kafka监控方案看似很多,然而并没有一个"大而全"的通用解决方案.各家框架也是各有千秋,以下是我了解 ...
- monitor.go 源码阅读
package main import ( "fmt" "net/http" ) // 查询监控信息的接口 func statsHandler( ...
- 安卓---RedioButton(单选按钮)、CheckBox(复选按钮)
<RadioGroup android:layout_width="fill_parent" android:layout_height="wrap_content ...
- proxy.go
) for { select { case <-otherSwitch: complete <- true ...
- BZOJ_1014_[JSOI2008]火星人prefix_splay+hash
BZOJ_1014_[JSOI2008]火星人prefix_splay+hash 题意:火星人最近研究了一种操作:求一个字串两个后缀的公共前缀.比方说,有这样一个字符串:madamimadam, 我们 ...
- 面试阿里前端P6血和泪换来的收获
我的一个朋友在前端耕耘一段时间,也在网上进行了高度培训学习,最近一段时间他打算跳槽去阿里面试前端P6开发岗位,结果被痛虐了一回,估计从此以后会给他留下不可磨灭的阴影啊 真是十年生死两茫茫,一鲁代码 ...
- 用Python学分析 - 二项分布
二项分布(Binomial Distribution)对Bernoulli试验序列的n次序列,结局A出现的次数x的概率分布服从二项分布- 两分类变量并非一定会服从二项分布- 模拟伯努利试验中n次独立的 ...