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 基础 一步步 一幕幕[面向对象之方法、方法的重载、方法的重写、方法的递归]
方法.方法的重载.方法的重写.方法的递归 方法: 将一堆代码进行重用的一种机制. 语法: [访问修饰符] 返回类型 <方法名>(参数列表){ 方法主体: } 返回值类型:如果不需要写返回值 ...
随机推荐
- HTML5 CSS3 专题 : 拖放 (Drag and Drop)
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/31413767 本来准备写一个支持多图片拖拽上传的例子,但是为了更好的理解,先介绍 ...
- 解析PHP程序员需要掌握的必备技能
转自:http://www.php100.com/html/php/lei/2013/0904/4199.html 作为PHP的爱好者,如果你想加入PHP程序的世界,一定要做好充分的准备.建议大家阅读 ...
- Python logger /logging
# !/user/bin/python # -*- coding: utf-8 -*- ''' subprocess : 需要在linux平台上测试 shell logging ''' import ...
- Java 读书笔记 (九) 运算符
短路逻辑运算符 && 当使用与逻辑运算符时,在两个操作数都为true时,结果才为true,但是当得到第一个操作为false时,其结果就必定是false,这时候就不会再判断第二个操作了. ...
- 模板——无旋Treap
#include "bits/stdc++.h" using namespace std; inline int read(){ ,k=;char ch=getchar(); :, ...
- 【二分+最小树形图】UVA11865 比赛网络
Description During 2009 and 2010 ICPC world finals, the contest was webcasted via world wide web. Se ...
- jsp --- jquery
1 给标签 添加属性 $('#principalMoney').attr("disabled", false); $("#career1").css('dis ...
- linux文件的基本属性
Linux 文件基本属性 Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限.为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规 ...
- Redis详解(一)------ redis的简介与安装
工作中一直在用 Redis,但是一直没有进行系统的总结,这个系列的博客将整体的介绍 Redis 的用法. 1.Redis 的简介 Redis:REmote DIctionary Server(远程字典 ...
- java.util.Date 与 java.sql.Date 之间的转换
SimpleDateFormat sdf = new SimpleDateFormat("yy-MM-dd HH:mm:ss"); String dateStr = sdf.for ...