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 基础 一步步 一幕幕[面向对象之方法、方法的重载、方法的重写、方法的递归]
方法.方法的重载.方法的重写.方法的递归 方法: 将一堆代码进行重用的一种机制. 语法: [访问修饰符] 返回类型 <方法名>(参数列表){ 方法主体: } 返回值类型:如果不需要写返回值 ...
随机推荐
- Open-Source Service Discovery
Service discovery is a key component of most distributed systems and service oriented architectures. ...
- spring security4.2.2的maven配置+spring-security配置详解+java源码+数据库设计
最近项目需要添加权限拦截,经讨论决定采用spring security4.2.2!废话少说直接上干货! 若有不正之处,请谅解和批评指正,不胜感激!!!!! spring security 4.2.2文 ...
- Android 源码解析 之 setContentView
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/41894125,本文出自:[张鸿洋的博客] 大家在平时的开发中,对于setCont ...
- hibernate关系映射
多对一:比如多个订单对应同一个用户,需要在订单表中添加一个用户的属性 订单类: private Integer orderId; private Date createTime; private Us ...
- CentOS 7.2 关闭防火墙
CentOS7 的防火墙配置跟以前版本有很大区别,CentOS7这个版本的防火墙默认使用的是firewall,与之前的版本使用iptables不一样 1.关闭防火墙: systemctl stop f ...
- selenium--unittest 框架/selenium--常见异常
selenium常见异常 from selenium import webdriver from selenium.webdriver.common.by import By from seleniu ...
- Java 学习笔记 (六) Java 定义变量
这个问题来自于head first一书page68. package com.idea.study; public class Books { //headfirst page68 String ti ...
- blog4go.go
package blog4go import ( "bufio" "errors" "fmt" "io" "o ...
- BZOJ_1100_[POI2007]对称轴osi_KMP+计算几何
BZOJ_1100_[POI2007]对称轴osi_KMP+计算几何 Description FGD小朋友——一个闻名遐迩的年轻数学家——有一个小MM,yours.FGD小朋友非常喜欢他的MM,所以他 ...
- BZOJ_[usaco2007 Nov]relays 奶牛接力跑_离散化+倍增弗洛伊德
BZOJ_[usaco2007 Nov]relays 奶牛接力跑_离散化+倍增弗洛伊德 Description FJ的N(2 <= N <= 1,000,000)头奶牛选择了接力跑作为她们 ...