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 基础 一步步 一幕幕[面向对象之方法、方法的重载、方法的重写、方法的递归]
方法.方法的重载.方法的重写.方法的递归 方法: 将一堆代码进行重用的一种机制. 语法: [访问修饰符] 返回类型 <方法名>(参数列表){ 方法主体: } 返回值类型:如果不需要写返回值 ...
随机推荐
- 在Python中用Request库模拟登录(四):哔哩哔哩(有加密,有验证码)
!已失效! 抓包分析 获取验证码 获取加密公钥 其中hash是变化的,公钥key不变 登录 其中用户名没有被加密,密码被加密. 因为在获取公钥的时候同时返回了一个hash值,推测此hash值与密码加密 ...
- 在centos上面安装phantomjs
在opt目录下创建phantomjs文件夹 mkdir -p /opt/phantomjs 把phantomjs解压出来的的文件放到/opt/phantomjs下面 建立软链接 ln -s /opt/ ...
- python下如何安装.whl包?
下载 .whl 包 先 pip install wheel 之后 pip install 包名字.whl 即可安装某模块包
- (三)Maven使用入门之Hello World
主要内容 编写POM 编写主代码 编写测试代码 打包和运行 到目前为止,已经大概了解并安装好了Maven,现在开始创建一个最简单的HelloWorld项目. 编写POM 就像Make的Makefile ...
- uuid.go
package uuid import "time" func GenerateUUID() uint64 { return uint64(time.Now().UnixN ...
- React组件设计
React组件设计 组件分类 展示组件和容器组件 展示组件 容器组件 关注事物的展示 关注事物如何工作 可能包含展示和容器组件,并且一般会有DOM标签和css样式 可能包含展示和容器组件,并且不会有D ...
- Linux 下配置Nginx,MySql,php-fpm开机启动
一. Nginx 开机启动 1.在/etc/init.d/目录下创建脚本 vim /etc/init.d/nginx 2.编写脚本内容 (将以下复制进去相应改动安装路径) #!/bin/bash # ...
- privoxy自动请求转发到多个网络
有些时候我们需要通过不同的代理访问不同资源,比如某些ip或域名走本地网络,某些ip或域名走不可描述的代理等.当然这只是举个栗子! 我要解决的问题是:我的内网机器没有internet访问权限,但是我的应 ...
- 【Maven篇】---解决Maven线上部署java.lang.ClassNotFoundException和no main manifest attribute解决方法
一.前述 maven 线上部署的话会出现一些问题比如java.lang.ClassNotFoundException或者no main manifest attribute的话,是因为maven 配置 ...
- 基于 ReactJS 开发简单的可视化业务编辑器 01
线上可以看的,跟github上的代码不一样的:https://whensea.com/wfd/ 程序中经常有一些业务需要定制化,我定制化这些业务的方式主要是基于工作流.配置等方式.由于个人水平限制并不 ...